背景
由于目前的项目是OC开发,且目前通过cocopods导入的三方库,是以.a
静态库的形式导入
需求
目前需要导入一个swift开发的三方SDK,所以需要在OC项目中pod一个swift三方库
问题
对于swift三方库而言,一般都会要求 使用 use_frameworks!
通过.framework动态库
的形式导入。而目前OC项目中pod是通过.a
的形式导入,所以产生了以下问题:
- 1、如果pod中使用
use_frameworks!
,会改变项目中原有OC三方库的导入方式,xcode的会提示OC库找不到,需要从#import <xxx.h>
改为#import "xxx.h"
- 2、如果不使用
use_frameworks!
,以.a的形式导入swift三方库,编译时期报错
解决办法
那么有没有办法,可以在不改变原来的三方库的导入形式,然后还可以集成swift三方库且不报错呢?答案是有的,即使用混编
的方式,即swift三方库不采用 use_frameworks!
1、xcode配置
- 设置混编:target -> Defines Module 设置为YES
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三方库了,且不改变原有的三方库导入形式