Xcode11.2自定义framework手动合成(脚本合成待续)

开发工具:Xcode Version 11.2.1 (11B500)

第一步:新建工程,根据自己的需要选择对应的类型,该项目选择了如下图Framework类型,创建MyPro的工程名称。
x001.png
x003.png
修改相关配置
image.png

增加armv7s(ios8+不需要)或其他
image.png

第二步:根据需要创建PrefixHeader.pch文件,双击输入$(SRCROOT)/MyPro/PrefixHeader.pch
X004.png
x005.png

第三步:创建该framework的具体内容,完成后在文件MACatchException.h和PrefixHeader.pch中引入必要的头文件
X006.png
公开文件选用Public
私有文件选用Project,不要选用Private(会在合成的framework中以PrivateHeaders目录展示)
image.png

第四步:release或dubug模式下分别用测试真机和模拟器build
image.png

第五步:手动合成framework。打开终端输入
lipo -create 路径(真机Release) 路径(模拟器Release) -output 路径 // 注意空格间隔
lipo -create 真机MyPro.framework/MyPro路径 模拟器MyPro.framework/MyPro路径 -output 导出合成的/MyPro路径

lipo -create /../Products/Release-iphoneos/MyPro.framework/MyPro /..Products/Release-iphonesimulator/MyPro.framework/MyPro -output /../Desktop/MyPro
image.png

第六步:如果被引入framework含有分类,则需要修改自己工程中的Other linker flags 为-ObjC,不建议使用-all_load
说明:

C代码到可执行文件经历的步骤是:
源代码 > 预处理器 > 编译器 > 汇编器 > 机器码 > 链接器 > 可执行文件
在最后一步需要把.o文件和C语言运行库链接起来,这时候需要用到ld命令。源文件经过一系列处理以后,会生成对应的.obj文件,然后一个项目必然会有许多.obj文件,并且这些文件之间会有各种各样的联系,例如函数调用。链接器做的事就是把这些目标文件和所用的一些库链接在一起形成一个完整的可执行文件。
那么,Other linker flags设置的值实际上就是ld命令执行时后面所加的参数。
下面逐个介绍3个常用参数:
-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容