iOS 比较详细的自定义framework编译方法

Posted TT不觉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 比较详细的自定义framework编译方法相关的知识,希望对你有一定的参考价值。

编译framework

1、ios 开发里面,你不想把源代码给其他人,你就需要编译Framework

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添加一下如下图所示

再次运行就没有问题了

以上是关于iOS 比较详细的自定义framework编译方法的主要内容,如果未能解决你的问题,请参考以下文章

为什么iOS 8上的SceneKit无法编译我的自定义着色器?

ios中Mkmapview中的自定义标注

与 Django Rest Framework 的非用户连接的自定义身份验证

iOS 开发 ZFUI framework控件,使布局更简单

使用 Play Framework JSON 库的自定义 Joda 时间序列化器?

如何在ios framework中引用其他静态库