如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件。然而,这种方法并不是很优雅。它会暴露所有的实现细节,而这些实现你可能并不想开源出来。此外,开发者也可能并不想看到你的所有代码,因为他们可能仅仅希望将你的这份漂亮代码的一部分植入自己的应用中。
静态库:.a和.framework
动态库:.tbd和.framework
静态库和动态库的区别
.a文件肯定是静态库,. tbd肯定是动态库,.framework可能是静态库也可能是动态库
静态库在链接时,会被完整的复制到可执行文件中,如果多个App都使用了同一个静态库,那么每个App都会拷贝一份,缺点是浪费内存。类似于定义一个基本变量,使用该基本变量是是新复制了一份数据,而不是原来定义的;
动态库不会复制,只有一份,程序运行时动态加载到内存中,系统只会加载一次,多个程序共用一份,节约了内存。类似于使用变量的内存地址一样,使用的是同一个变量;
但是项目中如果使用了自己定义的动态库,苹果是不允许上架的,在iOS8.0以后苹果开放了动态加载. tbd的接口,用于挂载. tbd动态库
使用静态库的好处
模块化,分工合作
避免少量改动经常导致大量的重复编译连接
也可以重用,注意不是共享使用
使用动态库的好处
使用动态库,可以将最终可执行文件体积缩小
使用动态库,多个应用程序共享内存中得同一份库文件,节省资源
使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
需要支持bitcode
需要支持bitcode,
以上设置后并不能使framework支持bitcode,
因此还需要进行额外的设置一个命令让其支持bit code。
在TAGETS的Build setting中搜索Other C Flags,
添加命令“-fembed-bitcode”。
同样的设置在PROJECT中。如果不进行以上操作。
别人在集成你的framework时可以编译,亦可以真机测试。
唯独在打包时会发出警告并打包失败。
警告为framework不支持bitcode!
判断其支持架构:
1.进入到framework目录下
cd /Users/.../xFramework.framework
2.输入命令
lipo -info xFramework
3.结果
Architectures in the fat file: xsdkFramework are: armv7 arm64 不支持模拟器
.a文件也是一样
lipo -info lib.a
结果
Architectures in the fat file: libUPPayPlugin.a are: armv7 arm64 i386 x86_64 支持模拟器
静态库合并:
1.lipo -create /Users/.../RKPlatform.framework/RKPlatform /Users/.../RKPlatform.framework/RKPlatform -output /Users/wj/Desktop/RKPlatform
前两个是分别支持真机和模拟器的framework的路径 -output后是合并后输出可执行文件的路径
2.任意替换那两个任意一个framework里面的可执行文件RKPlatform就OK了