SDK开发相关的知识网上没有太细致的总结,下面根据自己的经验总结一下:
SDK开发怎么做到更专业?
不管内部代码多么混乱、没有层次、不专业,但是提交给他人的sdk(头文件+库)要保证足够的专业性,简单来说就是一句话:
sdk开发就是在保证sdk源代码不外露的情况,给开发者一个可方便快速接入的,兼容多个iOS系统、真机模拟器调试、可以上线AppStore的库。
这一句话包含的信息量甚多,最大前提就是没有bug我就不说了(尽量做到吧)......
下面根据过程详细分解下:
一. 代码阶段:
这一阶段保证我们的代码首先是好看、专业(
接口设计合理
)、其实一定要保证独一无二(
命名规范
),如果做不好命名的规范,将会导致跟开发者(使用你的sdk的人)的代码造成冲突(duplicate...类似的错误)
1. 接口设计合理,参考:http://blog.csdn.net/weiwenhp/article/details/8676211
2. 根据自己sdk性质或者公司性质启用一个通用前缀,这个前缀要用在
宏定义、类名、category等地方;
3. 第三方库的独一无二:
关于第三方库是否放在sdk中有两种声音,同意放在sdk中是考虑不需要开发者再去找第三方库,不同意的是考虑第三方库可能冲突,可能包含bug.... 我的想法是放在sdk中,方便开发者,那就需要减少冲突的可能,避免bug。为了避免冲突需要修改第三方库的类名及其中的宏定义等名字,加上固定不易混淆的前缀。
4. 完备的参数校验:
对使用sdk开发的开发者的各种使用case、各种输入参数都有足够的错误反馈,让开发者及时知道错在哪,怎么改,这样才能提高接入sdk的效率。
二. 编译阶段:
SDK开发产物有两类,一类是头文件+.a库,一类是framework, 其实framework也就是头文件+库文件的组合。
1. 首先修改编译选项
mach-o,保证编译产物是静态库。
.a文件就是静态库但是framework又分静态库和动态库,apple规定上线AppStore的ipa包含的第三方库,只有系统库允许是动态库(例如libxml.dylib),其余必须是静态库。
2.. 架构支持,支持各个架构armv7、armv7s、arm64(没有这个架构不能上线)、i386,并且要模拟器真机合并;
3. sdk支持的ios系统版本支持需要尽量小,如ios7、ios6。
尽管ios7以前的使用者不足5%,但是开发者的产品难免要考虑覆盖率,所以sdk要做好准备。
4. 做好头文件的暴露,内部文件不要暴露。 通常只让开发者看到他们会用到的头文件及方法,内部使用的所有属性、方法、头文件都不要暴露。