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

3,076 阅读2分钟

这是我参与更文挑战的第2天,活动详情查看: 更文挑战

背景

由于目前的项目是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三方库了,且不改变原有的三方库导入形式