iOS开发:iOS Xcode8制作framework及使用

前言

网上关于Framework制作的教程数不胜数,然而都过于陈旧,最新的也是使用Xcode7的教程,而且有些设置也只给出步骤,并没有给出原因,而且按照有些教程制作出的framework还有些问题,所以我把自己制作framework的过程记录下来,并且使用的是最新的Xcode8环境。

正文

首先新建一个项目,选择Cocoa touch Framework 

然后随便取一个名字 

然后将要封装成framework的代码拖入工程 

选择工程文件>target第一项>Build Setting>搜索linking,然后几个需要设置的选项都显现出来,首先是Dead Code Stripping设置为NO,网上对此项的解释如下,大致意思是如果开启此项就会对代码中的”dead”、”unreachable”的代码过滤,不过这个开关是否关闭,似乎没有多大影响,不过为了完整还原framework中的代码,将此项关闭也未曾不可。

The resulting executable will not include any “dead” or unreachable code

然后将Link With Standard Libraries关闭,我想可能是为了避免重复链接

最后将Mach-O Type设为Static Library,framework可以是动态库也可以是静态库,对于系统的framework是动态库,而用户制作的framework只能是静态库。

然后将需要公开的头文件从Project中拖入Public,至于是否需要将私有的头文件拖入Private,我觉得直接放在Project中即可,若是Private中有头文件,打包以后的framework中会多出一个Private的文件夹包含着放入Private的头文件,不过我觉得如果是私有最好还是不要让别人看到。 

为了对一些特殊机型的支持,添加armv7s架构,当然不添加也没什么问题,只有5和5c使用了此架构。 

下面就开始编译了,先选择Generic iOS Device,按下Command+B:Build一下 

然后随意选择一个模拟器再次Build一下 

找到Build后的framework 

我们看到总共有两个文件夹,上面是真机编译生成的文件,下面是模拟器编译生成的文件。 

然后用命令行将下面两个文件进行合成 
 
 
将合成后的文件输出到桌面之上,这里解释一下这看似很复杂的命令:lipo -create +上面两个文件的路径 + -output + 合成后文件的输出路径 
 
然后用输出在桌面上的YuXinSDK替换掉前面Debug-iphoneos中framework中的YuXinSDK

将这做好的framework直接拖入要使用的工程中 

注意将Copy items if needed打勾 

然后在工程的search path中加上此framework的Headers的路径 
 
 

本以为大功告成,按下了Command+R悠闲的等着编译运行,然而在链接的时候却出了问题 
 
很经典的错误,库中缺少了i386架构的文件,这时我就比较困惑了,明明将模拟器生成的库文件合并进来了,怎么在模拟器上编不通呢!用lipo命令查看一下,果然没有i386架构的文件 
 
再看一下用模拟器生成的framework 
 
居然只有x86_64架构

我换成iPhone 4s模拟器,编译后生成的文件居然包含了i386 
 
经过我的测试,在iPhone5之前编译的framework都是i386架构,iPhone 5s之后都是x86_64架构,然而在所有模拟器上运行时,这两种架构缺一不可,然后我将这两种架构的framework合并在与真机的合并 

拖入工程后终于能够正常运行了 

后来经过摸索发现之前按照网上的教程却把自己坑了 
 
开始将上图中的选项设为YES,导致其编译时只生成当前机器的框架,将其设置为NO后,发现用模拟器编译后生成的framework同时包含x86_64和i386架构。

bitCode错误

在项目中引入静态库后,archive的时候又会出现错误

bitcode bundle could not be generated because ... was built without full bitcode.All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64
 
 
  • 1
  • 1

Bitcode是苹果在Xcode7及以后推出的新功能。用于代码的二次编译,针对CPU进行优化,编译工作由苹果AppStore后台来完成。 
针对iOS是可选项,默认打开。watchOS 和 tvOS 是必选项。

所以需要打开库工程的此选项并加上-fembed-bitcode参数,重新编译 

如此archive时就不会出问题了,到此我在制作使用framework时遇到的问题都在这里了。

总结

架构

对于模拟器来说4s和5的模架构是i386的32位架构,5s至今是x86_64的64位架构。对于真机来说3GS~4s是armv7架构,5和5c是armv7s架构,5s至今是arm64架构

静态库

静态库: 链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xcode 没有比任何时候都可帮助您创建高质量的应用程序。它自动配置您的应用程序以使用最新的苹果服务、 管理统一的资产目录中的图像,并可帮助您设计令人惊叹的接口为 7 的 iOS 和 OS X。它也容易地分析您的代码、 监视性能,并测试您的应用程序,并对持续集成的访问与内置权在中,您的团队可以创建比以往更好的应用程序。 1.在“应用程序”中,右键单击 -- 》 “显示包内容”。 2.依次打开 “contents” --》“Developer” --》 “Platforms” --->>"iPhoneOS.platform"-->>"DeviceSupport". 3.将“10.3 (14E269)”拷贝到 “DeviceSupport”中。收缩 Xcode 6.4 adds support for iOS 8.4 Xcode 6.4 includes Swift 1.2 and SDKs for OS X 10.10 Yosemite and iOS 8.4    Swift 1.2   •增量生成显著提高编译时敏捷项目   •斯威夫特编译器的调试版本和发布版本产生更快的可执行件   •语言改进`让`和`为`迅速作出更一致和明确的   •标准库增加了强大的功能,包括“设置的数据类型和操作的flatmap   •代码转换器和固定它帮助你迁移到快1.2   在Xcode 6.3的附加功能:   •操场更具吸引力和可读性与丰富的本格式和显示结果的在线   •操场可以嵌入额外的代码资源来提高性能和简化共享   •更新OS X SDK包括新的力量触摸板支持   •崩溃的组织者可以很容易地分流和固定崩溃App Store和试飞程序   •苹果LLVM编译器的6.1提高了诊断信息,并增加了C + + 14支持

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值