iOS端SDK开发总结和注意点
一、概念
静态库:以.a 和 .framework为文件后缀名。
动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名。
二、区别
静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用(如系统的UIKit.framework等),节省内存。
注意: 但是苹果不让使用自己的动态库,否则审核就无法通过。所有我们制作SDK通常都是指静态库
三、制作流程
度娘一搜,啥都有,这里就不写了。主要就做一下注意点和总结。
注意点
1、项目名、里面的各种类名、文件名和方法名最好都 带上自己的前缀。
2、SDK的文件分层要以模块和功能进行划分。
3、在进行资源操作如图片加载、文件读取时,要对对应的方法进行封装处理,方便对资源的统一处理,如对UIImageView 设置图片的方法进行二次封装。
4、能不使用第三方类库就不使用,假如真的需要就最好是对第三方类库进行重命名和方法名修改,以防止SDK使用方的项目中类库文件和方法冲突。
5、要对SDK中需要用到的依赖文件进行记录以方便做文档。
6、SDK中尽量不要使用分类Category,因为会涉及到一个资源加载的问题,会使得SDK包变大。使用起来当然也是没有任何问题,只需要添加-all_load或-ObjC就可以。
7、制作的SDK需要注意debug模式和Realease模式,debug模式只是一般的测试,Realease才可进行上商店。
备注:
关于-ObjC
这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来,这样编译之后的app会变大(因为加载了其他的objc代码进来)但是如果静态库中有类和category的话只有加入这个flag才行
关于-all_load
这个flag是专门处理-ObjC的一个bug的。用了-ObjC以后,如果类库中只有category没有类的时候这些category还是加载不进来。变通方法就是加入-all_load或者-force-load。-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。-force_load在xcode3.2后可用。但是-force_load后面必须跟一个只想静态库的路径。
关于-force_load
如果有多个三方库,有的需要加,有的不需要,用-all_load到最后duplicate symbol错误此时可以用-force_load + 路径方式
免费的iOS SDK和ipa加固和苹果审核被拒群:289533769,群里有免费的iOS SDK和工程的混淆加固工具,每天都分享苹果最新提审过包策略,欢迎大家进来一起交流一起进步一起过包!