笔者有片文章专门介绍SDK的开发步骤的,大家可以参考,我这里就直接进入主题了。
首先,你创建一个静态的framework工程MyTestSDK,把这个工程集成cocpapods,至于如何集成cocpapods,网上有教程,自己搜索。这个时候把你项目中所用的第三方库添加到Podfile文件中,然后 pod install。这个时候你command + B 编译运行,如果你的第三方库中还有Bundle资源,那么编译后,第三方库的bundle资源会被编译,一起放到Products文件下的framework文件中,右键Show in Finder就会看到。如下图所示的MBProgressHUD文件夹,里面都是MBProgressHUD第三方的资源文件。
然后把你的项目放入SDK工程中,编译运行一下,看看有没有错误。之所以先把SDK工程选用cocoapods管理,就是怕你的项目放入SDK中运行报错。没有任何问题,直接编译即可。
由于SDK中的第三方是通过cocoapods管理的,所以接入者的项目也要用cocoapods管理。
1:把SDK工程中,Products文件夹下的framework文件copy到项目中,最好项目中建立一个文件夹,专门放SDK和bundle。我是放到了一个文件夹中,方便分类寻找。如下图所示:
2:打开终端,cd到SDK所在的文件夹下,执行如下命令,回车,创建spec文件。
其中,MyTestSDK是你的SDK名称。
创建出来的spec文件,是个很长的文件,但是大部分都是注释的,我这里只提取了有用的信息展示出来:
然后把spec中依赖的第三方库,逐个加入到项目中的Podfie文件中。然后 终端打开,cd到自己的项目中,pod install即可。
本人亲自测试过的,No Problem。当初感觉SDK如果依赖了第三方库,接入的项目中也有同样的第三方库,会不会冲突啊,感觉好难搞啊。事实证明,通过spec进行依赖,可以很好的解决这个问题,也就没有那么麻烦了。
首次开发SDK还是遇到了很多问题,运行出现很多bug,但是最后还是一一解决了,就是没有记录下bug和解决发的方法。
1;path路径不对,就会报错 ,如下
是因为我把路径写成了:
其实正确的写法是:把“/”放在前面
2:SDK中有第三方,但是项目中的Podfile里面没有这个第三方,报错如下所示:
解决办法是就是在项目中的 Podfile里面加入缺失的第三方库,重新 pod install。
记录下把第三方Framework打包到自己的SDK过程中遇到的问题。一般情况下我们不需要把第三方SDK打包到自己的SDK里,如果自己的SDK里引用了第三方SDK,主工程里也同时依赖自己的SDK和第三方SDK即可。有一些特殊情况,我们需要给客户出SDK,但是我们自己SDK又引用了合作方的SDK,这时候如果不把合作方的SDK打包到我们自己的SDK里则需要提供给客户多个SDK。
1.File ->New ->Project ->iOS ->Framework 创建Framework;
2.TARGETS ->Build Settings 设置SDK配置;
(1)搜索Mach,Mach-O Type设置为Static Library
(2)搜索Dead Code Stripping 设置为NO
(3)Build Libraries for Distribution 设置为Yes,swift 5.0后ABI稳定,设置为Yes后当swift语言更新后不影响输出SDK的使用,如不设置此项,swift语言版本更新后主工程会报错;
3.SDK业务层处理,这里假设我们的SDK依赖Bugly
4.创建主测试工程,拖动MyLib到测试工程中,MyApp测试工程可以调用MySDK.start()方法;
上述编译SDK过程没有把Bugly打进SDK里,主工程需要依赖Bugly。
经过测试Embed方式打包的静态SDK,可以把Bugly.framework包含进去,但是主工程还是需要引用Bugly.framework,我们可以从自己的SDK里面添加Bugly.framework的依赖。
TARGETS ->Build Settings,Mach-O Type设置为Dynamic Library
经过测试Embed方式打包的动态SDK,可以把Bugly.framework包含进去,而且主工程不需要再添加Bugly.framework引用;
Embed方式编译的依赖第三方Framework的静态SDK,主工程在使用时也需要添加第三方Framework依赖,可以从输出的SDK下Framework目录直接添加第三方Framework依赖。
Embed方式编译的依赖第三方Framework的动态SDK,主工程在使用时不需要添加第三方Framework依赖,系统会自动添加引用链接。
使用非嵌入方式编译的依赖第三方Framework的静态SDK,需要给客户提供自己输出的SDK及自己SDK里引用的第三方的SDK。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)