- 本文档包含的所有内容:
- iOS SDK预备知识;
- .a or .framework,该如何选择?
- 最基本,但完整的SDK开发流程;
- 文档使用静态库(.a)文件说明开发流程(.a应该是初学者最先接触到,且应用比较广泛的一种静态库,如果你还没有决定用那种库来开发,使用a库永远不是个错误的选择);
- 入门案例,所以文档中包含较多(详细)截图。
- 本文档不包含的内容:
- 不包含Android SDK开发知识;
- 不包含SDK打包的知识(SDK打包相关知识,在下一个文档分享);
- 不包含.framework开发知识的讲解(.framework考虑在下一个文档详细分享);
- 不包含长篇大论,作者的已知经验,直接给出见解。
目录
1. SDK预备知识
1.1 什么是SDK开发?
不管是百度、谷歌,还是找到它的缩写的来源,还是听大神们侃侃而谈;简单实用的说明就是:封装业务,供接入方使用。你懂的。
1.2 SDK开发的应用场景,即SDK是为了解决什么问题?
较常见的应用场景是:
- 游戏SDK:游戏开发人员是不可能花费大量精力做各个平台的开发(Andriod、iOS、WP)的,所以需要各个平台的SDK,来帮助游戏更快的接入各个平台;这里面又包含渠道SDK、融合SDK等说法。
- 各种功能性SDK:比如你要使用别人公司的某个业务,或者功能,使用别人提供的SDK就实现了这个功能。
- …
- 总结:想让别人使用你公司或个人代码实现的功能,但是又不想人家看到你代码的实现逻辑,那就开发一个SDK吧!
1.3 SDK开发需要的工具?
- 一台Mac电脑:推荐MBP,其实一台8G内存的Mac是足够满足一般性的SDK开发工作的,SSD等都属于是有了更好,没有影响并不大。
- Xcode :使用较新版的Xcode即可,该文档演示的demo是基于Xcode9.4.1
- 语言:游戏行业一般会选OC;根据团队或者业务需求,OC或者swift;该文档演示demo使用的OC。
2. a or framework ?
看到这里的读者,大概都是真正的已经有SDK开发需求的饿汉了。
- 直接谈见解:
游戏SDK开发?or 有代码混淆需求?or 马甲包?(业务不变,代码却要求变动):使用.a库;推荐使用顺序:a > framework静态库 > framework动态库 ;(不懂这里说什么的读者,可忽略这些内容);
只是给别人使用,没有以上奇怪的需求:a or framework都可以,比较推荐.framework动态库,因为接入方接入会简单许多;推荐使用顺序:framework动态库 > framework静态库 > a;
如果你对公司的业务流程还并不是很清楚,使用.a;
如果公司的业务需求还并不是很清楚流畅,使用.a;
- 总结:如果真的不知道怎么选,那就选a吧!永远不会是错误的选择。
附注:.a和.framework的特点比较(个人经验,如有错误,望指正~)
1) .a 是静态库,参与iOS项目编译,接入方等于是使用了你的代码库,会让接入方的宿主APP在体积上,有明显的增大。
2).framework可以是静态库,也可以是动态库,但是默认是动态库;动态库的好处是:不会明显增加宿主app的体积;但是在加载速度上会低于静态库。
3)framework动态库是苹果审核大概iOS8.0之后才接受的,之前使用framework是不允许上架的;a是一直都被苹果商店接受的。
4)framework开发方便,接入也很方便;但是a是最安全稳妥的策略(对任何业务需求来说)
3. 入门案例:静态库HelloWorld.a的开发
3.1 新建静态库项目





3.2 编写代码
需求:实现最简单的hello world
直接上代码:(代码很短,不用快进)
// HelloWorld.h
@interface HelloWorld : NSObject
/**
say hello
*/
+ (void)sayHello;
@end
// HelloWorld.m
@implementation HelloWorld
/**
say hello
*/
+ (void)sayHello {
NSLog(@"Hello, world");
}
@end
好了,所有SDK的代码写完啦,开始编译成.a文件:图片说明
至此,一个静态库开发到编译的流程就完毕了!
恭喜你,你已经入门了!
那么,缓口气!下面的内容就都是更简单的内容了!(但是同样重要,这是每个sdk开发里面都必须要经历的环节)
4. 静态库的测试Demo
sdk开发中,一个测试SDK完整功能的测试demo,是必不可少的。
这里讲解一个最简单demo的编写。
测试方案分析:
方案1:直接新建一个普通的App项目,把刚才打包的好的.a文件及其头文件拖进去,编写功能测试代码,搞定!简单直接,但不推荐(确实有开发者是这么用的),因为需要新建一个project,需要在2个project之间来回切换,麻烦!
方案2:在该静态库项目中,新建一个target,使用这个target来测试静态库的功能。该案例使用这种方式来说明。
方案3:有些开发者的思路,跟这个文档的流程正好相反:创建一个测试demo项目,然后在测试项目中,添加一个静态库的target,然后也可以使用测试demo,来测试静态库的target;这种方式也有不少人用;但个人比较推荐方案2,以静态库的target为first target,目标导向更加清晰。
4.1 新建测试target
直接上图:


4.2 集成静态库
直接上图:




4.3 编写测试静态库的代码

输出结果:
HelloDemo[21696:2764086] Hello, world
- 因为这是一个app的测试demo,所以会吊起模拟器或者真机,但是因为是一个简单的demo,并没有节目展示,所以,这里只有Xcode的Command Line Tool(就是命令行)会打印出"Hello, world"。
至此,一个SDK完整的开发流程就此结束了!
5. 小总结
让我们总结一下,你学会了:
1、创建并编译一个静态库;
2、设置静态库对外可见的头文件;
3、用一个测试demo的target来测试编写的静态库的功能。
有读者肯定会觉得这个案例太简单了,而且毫无用处!
但是,该文档给入门者提供一个快速入门,并作为开发流程参考的作用,该是能达到的吧~
后续,你可能想了解的内容包括:
1、如何把你自己打包的SDK,给到别人用呢?
2、如何编译静态库的真机版,和模拟器版?
3、.framework的开发流程?
4、SDK开发过程中有哪些坑?
…
以上内容,纯属个人经验分享。
如有不明之处,可留言;如有错误之处,欢迎指正!
转载注明出处。