前言
我们可以发现Cocoapods上的库有的是可以看见源码的,有的是只暴露出framework和.h的。
接之前的文章Cocoapods私有库制作这里我们发布之后可以看到源码,接下来我们看如何制作私有库Framework不暴露源码。
流程
1、创建项目
2、我导入要打包的源码,并且把源码的依赖用cocoapods引入
3、在Build Phases->Headers里public里是要公开的.h文件,我这里把源码的.h从下面的Project里全部挪到了Public里,这样才能外部访问到
4、在目录的NRBaseFramework.h可以这样引入,方便调用方只引入NRBaseFramework.h就可以引入所有的类
#import <NRBaseFramework/UtilsMacros.h>
...
复制代码
5、Build Settings->Linking里修改
6、修改支持版本号
7、添加忽略arm64、Build Active Architecture Only = NO
7、支持bitcode(我这里支持了bitcode、方法如下)
Build Settings -> DEPLOYMENT_POSTPROCESSING = YES
Build Settings -> Compiler Flags添加 -fembed-bitcode 参数
Build Settings -> Enable Bitcode 为YES
复制代码
8、Edit Scheme的Run为Release,然后在Any iOS Device里和任意模拟器下分别command+B编译,打开目录下Products的framework右键Show in Finder,可以看到两个文件夹
注意下面的两个文件的路径是到framework下面的NRBaseFramework文件,直接从文件夹拖拽到终端即可:
lipo -create 后面加上iphones下面的framework下面的NRBaseFramework文件
再加上iphonesimulator下面的framework下面的NRBaseFramework -output 导出的路径
复制代码
9、复制一份上面的iphones下面的framework出来,把合并的NRBaseFramework文件替换framework下面的NRBaseFramework文件,至此当前的framework就是合并后的framework了
10、创建例子工程的过程与之前私有库的一样Cocoapods私有库制作,这里不说了,把framework放到Pod(修改名字之后的文件夹)下面的Classes里,然后podspec里依赖库需要引入,framework这里需要使用s.vendored_frameworks,我这里直接放到了Pod下,当然你也可以直接放在目录下,引入的路径要正确。
11、Example下面pod install检查下有没有问题,然后pod spec lint、pod repo push,注意这里需要使用–skip-import-validation,否则不能通过
问题
在Scheme的Run为Debug时,修改Build Active Architecture Only = NO会报找不到第三方库的错误
修改Scheme的Run为Release即可,我看很多打包脚本里打的也是Release版本的。
还有的人把第三方库的代码引入源码中,一起打包成Framework也是一种办法参考:打包自己Framework中含有第三方库的解决方案分CocoaPods与手动导入两种方式
参考
iOS framework如何支持bitcode以及bitcode检测
Xcode12适配The linked library is missing one or more architectures required by this target问题