iOS SDK开发快速入门

  • 本文档包含的所有内容:
  1. iOS SDK预备知识;
  2. .a or .framework,该如何选择?
  3. 最基本,但完整的SDK开发流程;
  4. 文档使用静态库(.a)文件说明开发流程(.a应该是初学者最先接触到,且应用比较广泛的一种静态库,如果你还没有决定用那种库来开发,使用a库永远不是个错误的选择);
  5. 入门案例,所以文档中包含较多(详细)截图。
  • 本文档不包含的内容:
  1. 不包含Android SDK开发知识;
  2. 不包含SDK打包的知识(SDK打包相关知识,在下一个文档分享);
  3. 不包含.framework开发知识的讲解(.framework考虑在下一个文档详细分享);
  4. 不包含长篇大论,作者的已知经验,直接给出见解。

1. SDK预备知识

1.1 什么是SDK开发?

不管是百度、谷歌,还是找到它的缩写的来源,还是听大神们侃侃而谈;简单实用的说明就是:封装业务,供接入方使用。你懂的。

1.2 SDK开发的应用场景,即SDK是为了解决什么问题?

较常见的应用场景是:

  1. 游戏SDK:游戏开发人员是不可能花费大量精力做各个平台的开发(Andriod、iOS、WP)的,所以需要各个平台的SDK,来帮助游戏更快的接入各个平台;这里面又包含渠道SDK、融合SDK等说法。
  2. 各种功能性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开发需求的饿汉了。

  • 直接谈见解:
  1. 游戏SDK开发?or 有代码混淆需求?or 马甲包?(业务不变,代码却要求变动):使用.a库;推荐使用顺序:a > framework静态库 > framework动态库 ;(不懂这里说什么的读者,可忽略这些内容);

  2. 只是给别人使用,没有以上奇怪的需求:a or framework都可以,比较推荐.framework动态库,因为接入方接入会简单许多;推荐使用顺序:framework动态库 > framework静态库 > a;

  3. 如果你对公司的业务流程还并不是很清楚,使用.a;

  4. 如果公司的业务需求还并不是很清楚流畅,使用.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 新建静态库项目

从头开始创建项目
选择a的target
标题、语言、next
看看项目
头文件

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

直接上图:
新建测试的target

设置测试target的name

测试target文件浏览

4.2 集成静态库

直接上图:
测试target添加静态库

选择刚才的静态库

添加后的静态库

附注:也可以这样添加静态库哦

静态库正确被价值链!

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开发过程中有哪些坑?

以上内容,纯属个人经验分享。
如有不明之处,可留言;如有错误之处,欢迎指正!
转载注明出处。


版权声明:本文为hx853318463原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。