热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS问题1:OC项目导入swift三方库不兼容问题

背景由于目前的项目是OC开发,且目前通过cocopods导入的三方库,是以.a静态库的形式导入需求目前需要导

背景

由于目前的项目是OC开发,且目前通过cocopods导入的三方库,是以.a静态库的形式导入

需求

目前需要导入一个swift开发的三方SDK,所以需要在OC项目中pod一个swift三方库

问题

对于swift三方库而言,一般都会要求 使用 use_frameworks! 通过.framework动态库的形式导入。而目前OC项目中pod是通过.a的形式导入,所以产生了以下问题:

  • 1、如果pod中使用 use_frameworks!,会改变项目中原有OC三方库的导入方式,xcode的会提示OC库找不到,需要从#import 改为#import "xxx.h"

  • 2、如果不使用use_frameworks!,以.a的形式导入swift三方库,编译时期报错

解决办法

那么有没有办法,可以在不改变原来的三方库的导入形式,然后还可以集成swift三方库且不报错呢?答案是有的,即使用混编的方式,即swift三方库不采用 use_frameworks!

1、xcode配置

  • 设置混编:target -> Defines Module 设置为YES

    iOS 问题 1: OC项目导入swift三方库不兼容问题
    设置混编

2、项目配置

  • 创建一个.swift文件,且创建时会自动生成一个桥接文件

  • 如果桥接文件没有自动生成,

    • 方式1:可以先删除 target -> Build Settings -> Objective-C Bridging Header中的路径,删除创建的swift文件,重新创建swift文件,此时会自动生成

    • 方式2:也可以自行创建桥接文件,并在target -> Build Settings -> Objective-C Bridging Header中配置桥接文件路径

需要注意以下几点:

  • 1)需要确保有桥接文件 项目名-Bridging-Header.h

  • 2)确保项目中至少有一个.swift文件

  • 3)target -> Build Settings中,确保 Product Module Name是有值的,如果没有,直接设置为 $(PRODUCT_NAME)

  • 4)target -> BuildSetting -> SWIFT_VERSION需要与pod中swift三方库的 BuildSetting -> SWIFT_VERSION 一致

3、swift三方库使用

  • 项目名-Bridging-Header.h桥接文件中导入需要的swift三方库
@import swiftSDK;
  • 在需要用到swift三方库的地方,导入 “项目名-swift.h”文件以及桥接文件
#import "项目名-Swift.h"
#import "项目名-Bridging-Header.h"

到此,可以在OC项目中以.a的形式导入swift三方库了,且不改变原有的三方库导入形式


推荐阅读
author-avatar
米西米西的歪国人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有