iOS技术之SDK开发注意事项
1、SDK库的含义:
共享程序代码的⽅式,可以对⾃⼰的项⽬进⾏封装,⽣成库,⽅便别⼈的使⽤。
2、SDK库的分类:
A、静态库,链接时完整地拷贝⾄可执⾏⽂件中,被多次使⽤就有多份冗余拷贝。
B、动态库,链接时不拷贝,程序运⾏时由系统动态加载到内存,供程序调⽤,系统只加载⼀次,多个程序共⽤,节省内存。
3、SDK库的形式:
A、.a与.framework⽂件是静态库(.framework属于⾃⼰创建),⾃⼰创建的.framework是静态库⽂件。
B、.tbd(Xcode7和iOS9 之前是.dylib⽂件)与.framework⽂件是动态库(.framework属于系统⾃带),系统⾃带的.framework是动态库⽂件。
sdk4、静态库和动态库的区别:
《1》.a是⼀个纯⼆进制⽂件,不能直接使⽤,⾄少要有.h⽂件配合
《2》.framework中除了有⼆进制⽂件之外还有资源⽂件,可以直接使⽤。
.framework = .a(⼆进制⽂件) + .h (头⽂件) + resourceFile (资源⽂件)
5、静态库的使⽤优点:
《1》⽅便程序共享代码,便于合理规范使⽤。
《2》 可以实现iOS程序的模块化,可以把固定的业务模块化成静态库。
《3》能够与别⼈分享你的代码库,但⼜不想让别⼈看到你代码如何实现。
《4》开发第三⽅SDK的业务模块需求。
6、静态库的制作的注意点:
《1》.a是⼆进制⽂件,需要配合.h头⽂件和其它⽂件才能使⽤,.framework可以直接使⽤。
《2》图⽚资源的处理可以使⽤.bundle⽂件,.bundle⽂件的名字和.a或.framework的名字相同。
《3》.bundle⽂件的简单制作如下:
⾸先,新建⼀个⽂件夹;
其次,修改⽂件夹的后缀名为.bundle ;
最后,点击右键,打开显⽰包内容,就可以向其中添加图⽚资源。
《4》category⽂件打包成静态库⽂件再添加到⼯程,调⽤分类⽅法时会有不到该⽅法的运⾏时错误(selector not recognized),解决办法就是在静态库的⼯程中配置other linker flags的值为-ObjC。
《5》如果静态库很复杂,需要暴露的.h头⽂件⽐较多,可以在静态库内部创建⼀个.h⽂件(⼀般这个.h⽂件的名字和静态库的名字相同),然后把需要暴露的.h头⽂件显⽰,不需要暴露的.h头⽂件集中放在这个内部创建的.h⽂件。
7、创建.a静态库⽂件流程如下:
《1》创建⼀个.a静态库⼯程
Xcode ——》File\New\Project ——》iOS\Framework and Library\Cocoa Touch Static Library ——》命名项⽬⼯程 ——》保存⽬录
《2》⼀个静态库⼯程由头⽂件和实现⽂件组成(TestSDK.h和TestSDK.m),这些⽂件将被编译为库本⾝。由于不需要实现⽂件,需要右键单击TestSDK.m删除该⽂件并移动到废纸篓。
《3》创建⼀个⾃⼰封装的控件,然后拷贝到Xcode项⽬⼯程⽬录⾥⾯。注意拷贝的时候,要勾选3个选项,Copy items id needed、 Create groups
和TestSDK。
《4》添加控件的.h头⽂件到库的主头⽂件TestSDK.h中
《5》⽣成静态库的形式:
A、模拟器,只有在模拟器才能编译运⾏
Build only Device ——》show in Finder ——》拿到模拟器的.a⼆进制⽂件和其它所有的.h头⽂件
B、真机,只有在⼿机端才能编译运⾏
iOS Simulators ——》show in Finder ——》拿到真机的.a⼆进制⽂件和其它所有的.h头⽂件
《6》合成真机与模拟器.a⽂件,这样可以在真机和模拟器都能够编译运⾏,终端命令如下:
lipo -create
模拟器.a⽂件⽬录
真机.a⽂件⽬录
-output 输出⽬录/TestSDk.a, 获取的TestSDk.a⽂件兼容模拟器和真机的⼆进制⽂件。
8、创建.framework静态库⽂件流程如下:
《1》创建⼀个.framework静态库⼯程
Xcode ——》File\New\Project ——》iOS\Framework and Library\Cocoa Touch Framework ——》命名项⽬⼯程 ——》保存⽬录
《2》创建两个新的⼯具类,或者向项⽬⼯程拖⼊⼀个相对完整的功能模块。
《3》在项⽬⼯程中添加所依赖的框架
Xcode ——》Project ——》Targets ——》Build Phases ——》Link Binary With Libraries
《4》在项⽬⼯程中设置要暴露的头⽂件接⼝,设置Public和Private,选择相应的运⾏设备。
Xcode ——》Project ——》Targets ——》Build Phases ——》Headers
《5》在项⽬⼯程中添加脚本
Xcode ——》Project ——》Targets ——》Build Phases ——》New Run Script Phase ——》 添加shell脚本
加⼊下⾯的脚本将模拟器和真机的Framework合并,如下所⽰:
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}" #open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi
《6》点击Xcode左上⾓的运⾏按钮,然后脚本就⾃动弹出⽣成的Framework库⽂件。
《7》如果其他项⽬⼯程导⼊这个Framework库,编译报错,需要让编译器提前编译这个⼆进制⽂件,做法是Xcode->General->Embedded Binaries,将系统依赖的Framework添加上去即可。
《8》最后,Framework的核⼼在于内部结构的设计,谨慎设计你的每⼀个接⼝,在每个对外暴露的⽅法中需要做好注释,然⽽⼀份通⽤的接⼝⽂档也是必须的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论