iOS 比较详细的自定义framework编译方法
2016年12月09日10:55:04
编译framework
1、iOS 开发里面,你不想把源代码给其他人,你就需要编译Framework
1
1 、打开Xcode创建一个framework工程。
2、新建一个TestFrame的工程
3、新建一个hello的类,并写两个方法
4、修改一些配置信息,生成支持所有架构的版本。
修改build setting 里面的build active architecture only 如图片所示的把Yes修改为NO
在build phase 里面搜索 “mach”,设置type为 “static library”
5、把需要公开的.h文件公开
在build phase 里面的headers 里面的project 右键 选择move to public group
6、使用command +b 编译 framework
编译真机 选择 generic iOS device command +b 编译
编译模拟器 选择任意一个模拟器 command +b 编译
编译成功是这样的
7、在文件夹查看编译好的framework
8、在文件夹可以看到如图下面
9、把两个文件夹拷贝到任意一个文件夹下面我这边是桌面的一个”ytt”文件夹
10、下面就需要把模拟器和真机的合并成一个通用版(这里需要在终端操作)
这些是我的终端操作,下面解释一下
taijitongdeiMac:~ taiyoshimichi$ cd /Users/taiyoshimichi/Desktop/ytt/Debug-iphoneos
taijitongdeiMac:Debug-iphoneos taiyoshimichi$ ls TestFrame.framework
Headers Info.plist Modules TestFrame
taijitongdeiMac:Debug-iphoneos taiyoshimichi$ lipo -info ./TestFrame.framework/TestFrame
Architectures in the fat file: ./TestFrame.framework/TestFrame are: armv7 arm64
taijitongdeiMac:Debug-iphoneos taiyoshimichi$ cd ..
taijitongdeiMac:ytt taiyoshimichi$ cd /Users/taiyoshimichi/Desktop/ytt/Debug-iphonesimulator
taijitongdeiMac:Debug-iphonesimulator taiyoshimichi$ ls TestFrame.framework
Headers Info.plist Modules TestFrame _CodeSignature
taijitongdeiMac:Debug-iphonesimulator taiyoshimichi$ lipo -info ./TestFrame.framework/TestFrame
Architectures in the fat file: ./TestFrame.framework/TestFrame are: i386 x86_64
taijitongdeiMac:Debug-iphonesimulator taiyoshimichi$ cd ..
taijitongdeiMac:ytt taiyoshimichi$ lipo -create /Users/taiyoshimichi/Desktop/ytt/Debug-iphoneos/TestFrame.framework/TestFrame /Users/taiyoshimichi/Desktop/ytt/Debug-iphonesimulator/TestFrame.framework/TestFrame -output /Users/taiyoshimichi/Desktop/ytt/Debug-iphoneos/TestFrame.framework/TestFrame
taijitongdeiMac:ytt taiyoshimichi$ cd /Users/taiyoshimichi/Desktop/ytt/Debug-iphoneos
taijitongdeiMac:Debug-iphoneos taiyoshimichi$ ls TestFrame.framework
Headers Info.plist Modules TestFrame
taijitongdeiMac:Debug-iphoneos taiyoshimichi$ lipo -info ./TestFrame.framework/TestFrame
Architectures in the fat file: ./TestFrame.framework/TestFrame are: armv7 i386 x86_64 arm64
taijitongdeiMac:Debug-iphoneos taiyoshimichi$
第一步、使用 cd 命令到 真机文件夹
cd /Users/taiyoshimichi/Desktop/ytt/Debug-iphoneos
第二步、使用ls命令显示TestFrame.framework的所有文件
ls TestFrame.framework
第三步、使用lipo -info查看真机支持的编码,可以看到是armv7,arm64
lipo -info ./TestFrame.framework/TestFrame
第四步、使用cd .. 回到根路径
cd ..
第五步、重复一二三,命令,只不过第一步的真机路径改为模拟器路径 最后可以看到编码是 i386 x86_64
第六步、合并真机和模拟器的framework使用lipo -create路径a 路径b -output路径a
cd ..
lipo -create /Users/taiyoshimichi/Desktop/ytt/Debug-iphoneos/TestFrame.framework/TestFrame /Users/taiyoshimichi/Desktop/ytt/Debug-iphonesimulator/TestFrame.framework/TestFrame -output /Users/taiyoshimichi/Desktop/ytt/Debug-iphoneos/TestFrame.framework/TestFrame
第七步、cd ..一下重复第一二三步查看得到的编码就是 armv7 i386 x86_64 arm64,说明你编译成功了
可能出现问题1、直接合并两个版本的TestFrame.framework,会便以失败,因为.framework是不可以合并的,s实际上是合并TestFrame.framework里面的TestFrame文件
可能出现问题2、模拟器版本显示没有i386,原因:是因为你在修改build setting里面的build active architecture only没有把Yes修改为NO,
可能出现的问题3、在使用的时候运行会报错dyld: Library not loaded: ***** Reason: image not found崩溃
解决方法,把framework添加一下如下图所示