一、SDK动态库开发(包含第三方库,以MBProgressHUD为例)
1、创建动态库,选择 Cocoa Touch Framework
2、在SDK中导入MBProgressHUD库,并创建一个SDKDemoViewController,SDKDemoViewController中有两个按钮,一个showHUD,一个dismiss
3、配置XCODE,例如 Build Active Architchture Only 设置为No,Other Linker Flags,添加 -ObjC
4、设置公开头文件,在 Build Phases 里设置 Headers 的public,并需要在SDKDemo.h文件中import引入
5、若SDK中有xib、图片等资源都需要添加到Bundle中,所以要创建Bundle,点击File
-New
-Target-ios-Bundle,取名为
SDKDemoBundle,将资源添加到
Bundle,配置Bundle
6、编译Bundle,在products
目录下,会发现生成的Bundle
7、为SDK添加脚本,作用是将模拟器的sdk和真机的sdk合成一个,使它同时适用于真机和模拟器。
8、创建测试工程,将SDK、bundle都导入
9、上架APPStore,需要将i386 x86_64两个平台删除后,才能正常提交。
二、静态库开发
1、创建动态库,选择 Cocoa Touch Static Library
2、编写逻辑代码,(分别在模拟器和真机)command + B
3、show in finder,合并.a文件
三、静态库和动态库的区别
1、静态库在程序编译时会被链接到目标代码中,而动态库在程序运行时才被载入
2、静态库在链接时,会被完整的复制到可执行文件中,如果多个App都使用了同一个静态库,那么每个App都会拷贝一份,缺点是浪费内存。动态库不会复制,只有一份,程序运行时动态加载到内存中,系统只会加载一次,多 个程序共用一份,节约了内存(这是系统动态库)。我们自己使用 Cocoa Touch Framework 制作的动态库是放到 app bundle 中,运行在沙盒中的,不过 iOS8 上开放了 App Extension 功能,可以为一个应用创建插件, 这样主app和插件之间共享动态库还是可行的。
3、静态库的好处:
1、模块化,分工合作,提高了代码的复用及核心技术的保密程度
2、避免少量改动经常导致大量的重复编译连接
3、也可以重用,注意不是共享使用
4、动态库的好处:
1、可以将最终可执行文件体积缩小,将整个应用程序分模块,团队合作,进行分工,影响比较小
2、多个应用程序共享内存中得同一份库文件,节省资源
3、可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的
四、静态库和动态库的相同点
静态库和动态库都是闭源库,只能拿来满足某个功能的使用,不会暴露内部具体的代码信息