Framework工程中使用 CocoaPods

之前开发了一个 IM 通讯软件在公司内部使用,现在需要将 IM 以 SDK 的方式集成到另外一个 OA 应用中。对比了下两个工程,OA 应用是属于比较老旧的那种,全部以 OC 实现,并且依赖的第三方库比较老旧而且都是以代码集成方式管理,甚至对部分三方库做了修改。IM 是通过 Pods 进行第三方依赖库的管理,和 OA 共用若干库。由于是要求 IM 提供 SDK,加上 OA 不愿意修改他们的工程,所以我们只能以 SDK 的方式给他们提供Framework包。考虑到可能有的代码冲突,我们决定一些 两方都使用的UI 相关的库,在要求 UI 统一的情况下,拿出OA 的源码打包成 framework,双方共用。其余的非交叉的库各自引用各自的互不干扰,OA 使用源码集成,IM 使用 Pods 集成 framework。

IM 工程是 OC 和 Swift 混编的,在 Application 工程中,对于这种混编的解决方案也很简单,只要增加桥接头文件就可以了。但是在 Framework 工程中,是不需要桥接文件的。那在 Framework 工程中如何做到混编的呢?

1、首先当你新建一个 Framework 工程时,Xcode 的工程模板是会自动生成极简情况下的工程文件,其中有一个非常重要的文件,$(TARGET_NAME).h 文件。这个文件是作为 Framework 将内部方法暴露给外部调用的一个 Public 入口头文件,系统帮你默认生成的。

1 - 头文件

2、新建 Podfile,如下编写:

2 - Podfile


这里需要注意,使用 Swift 的 Framework 都必须在 Podfile 中写上 use_frameworks!原因如下两个

A、用CocoaPods 导入swift 框架 到 swift项目和OC项目都必须要 use_frameworks!

B、使用 dynamic frameworks,必须要在Podfile文件中添加 use_frameworks!

2、选择 PROJECR/TARGET -> Build Settings -> Allow non-modular includes in Framework Modules -> YES

注意: Project 和 Target 需要同时设置。

因为新版本的 Pods 的方式是将第三方库制作成Dynamic Frameworks,相当于在 MyFramework 中引用别的 Framework,需要告诉编译器允许这种行为。

3、将 Swift 文件中用到的 OC 文件的头文件包含到 MyFramework.h 中,并且将对应的头文件放到 Target -> Buid Phases -> Headers -> Public 中。这里需要注意的是,就算你在 Swift 代码中直接引用第三方库的方法,你也不需要将第三方库的头文件引用放到 MyFramework.h 中,只需要将你自己用到的 OC 头文件放入其中即可。原因第四点会讲。

4、编译工程,你会收到编译成功的通知。进入 Products 目录,你会发现 Products 目录下有如下几个文件:

3 - Products

你会发现编译结果为自己的 Framework 和第三方的 Framework,包括 Pods 生成的引用 Framework(只是引用,并没有将第三方库打包到其中)。如果你要向别人提供 MyFramework.framework ,别人是无法编译通过的,因为MyFramework.framework中仅包含它自己的源码而不包括第三放库的,因为苹果禁止在Dynamic Frameworks使用 Framework。所以你需要将所有的 Framework 都交付给第三方,除了 Pods生成的Framework。至此MyFramework 生成结束。

你可能会有疑问,如此引入会不会有编译问题。那这里可以探讨下。

一般集成第三方库的方式有如下三种:

A、直接将第三方库的源码集成到工程中;

B、将第三方库打包成 Static Library 集成到工程中;

C、将第三方库打包成 Framework 集成;

其中 A、B 两种方式是一样的,都需要链接第三方库的源码,只是 Static Library 是提前编译好了。如果第三方工程采用 A 方式集成第三方库,正如我遇到的情况,就算我们使用了相同的第三方库,也不会发生错误,因为他使用本地文件,头文件的引用方式和使用 Framework 的引用方式是不一样的,可以说两者是在不同的 NameSpace 中,编译器在编译和链接的过程中并不会发生错误。甚至 MyFramework 中可以使用与第三方相同的文件和类名,只要他在使用时文件中不同时引用MyFramework的头文件。

最后,鉴于Dynamic Frameworks 的优势,本人还是不推荐使用 AB 两种方式集成第三方库,除非万不得已。


以下为参考资料:

pods 使用方法:http://www.jianshu.com/p/ad2e37e741bb

http://www.samirchen.com/create-a-framework/

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

http://stackoverflow.com/questions/24175697/how-do-i-use-cocoapods-in-an-embedded-framework

http://www.tuicool.com/articles/Q3q6ry

https://guides.cocoapods.org/syntax/podfile.html

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/CreationGuidelines.html#//apple_ref/doc/uid/20002254-BAJHGGGA

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容