 
        最近需要将自己项目的公共代码打包成
Framework来使用,但是在打包过程中遇到一个问题,就是提取的公共代码中用到了一些第三方的库,比如AFNetworking等,怎么才能把第三方库集成进来让代码编译通过并打包成功呢,网上找了很久都没有找到一篇专门说这个的,让我走了不少坑,现在就分享一下在打包Framework时怎样使用CocoaPods引入第三方库。
这篇文章已经不适用,建议查看我的另一篇文章:【iOS 开发】利用 Carthage 将项目打包 Framework 并依赖 CocoaPods 第三方库的方法
创建 Framework 工程
1. 创建打包工程
- 打开 Xcode新建一个工程,选择Framework & Libray选项中的Cocoa Touch Framework,这里说一下我的Xcode版本是8.3.2。

- 假设我的代码中要用到 MBProgressHUD这个第三方库(比较好演示),然后使用CocoaPods在工程中集成MBProgressHUD,集成方法和普通项目一模一样。

- 然后选择工程下的 TestFramework.xcworkspace重新打开工程。

- 因为要打包所需的文件,所以这里我自己创建了一个测试类,并在里面使用了 MBProgressHUD这个库,在实际的打包过程中,直接把需要打包的所有文件拖到该工程中即可。

2. 添加公开头文件
- 选中 Target,选择Build Phases-Headers,可以看出有三个选项,分别是Public 、Private 、Project,把需要公开给别人的.h文件拖到Public中,把不想公开的,即为隐藏的.h文件拖到Project中。

- 完成上述步骤之后,在默认生成的 .h文件中,我的是TestFramework.h,把所有需要暴露的.h文件都用#import <TestFramework/PublicHeader.h>引入,记住一定要将所有需要暴露的.h文件都引入,也就是上面Headers-Public中加的所有.h文件,不然编译后生成的.framework在引用的时候会有警告。

3. 更改设置参数
- 选中 Target,选择Build Settings,在Architectures下增加armv7s。

- 选中 Target,选择Build Settings,在搜索栏搜索Mach-O Type,将Mach-O Type修改为Static Library。

工程打包成 Framework
1. 真机编译所有文件
- 按照下图将编译的 Device选择为真机 ,然后按下Command + B开始编译,编译成功后右键Products文件夹下的.framework文件,点击show in Finder。

- 打开后可以看到打包完成的真机 Framework包。

2. 模拟器编译所有文件
- 按照下图将编译的 Device选择为随便一个模拟器 ,然后按下Command + B开始编译,编译成功后右键Products文件夹下的.framework文件,点击show in Finder。

- 打开后可以看到打包完成的模拟器 Framework包。

3. 将两个 Framework 合成
上面有两个 Framework , 一个是 Debug-iphoneos(真机) 下的,一个是 Debug-iphonesimulator(模拟器) 下的,需要通过终端命令将两个 Framework 合为一个模拟器和真机都可使用的 Framework 。
- 打开终端先输入 lipo -create,然后输入空格。

- 接着将 Debug-iphoneos(真机)下的TestFramework也就是上面框出来的空白文件直接拖到终端,终端会自动显示路径。

- 然后直接将 Debug-iphonesimulator(模拟器)下的TestFramework也拖到终端。

- 接着输入 -output,然后输入空格。

- 然后输入 ~/Desktop/NewTestFramework后直接回车。

- 这时候桌面上会多一个新的文件为 NewTestFramework,这时候将真机下的.framework包文件复制出来,然后将NewTestFramework重命名为TestFramework也就是.framework包中那个空白文件的名字,如果有.lipo后缀就去掉,接着替换.framework包中的那个空白文件。

- 最终替换完成后的 .framework包就是我们最后所需要的包了,但是可以发现打包完后的.framework包里面是没有CocoaPods集成的第三方库的,所以在使用.framework包时,工程中必须也要集成.framework包中用到的第三方库,否则会找不到文件而报错。
测试打包完的 Framework
- 新建一个测试工程 TestDemo,将打包完的TestFramework.framework拖到工程中,测试一下刚才创建的 TestClass 类,可以看到MBProgressHUD加载框显示出来了,测试成功。

- 上面说了,测试工程中也要集成 MBProgressHUD,否则会报错。

 
         
        