[iOS]iOS如何进行SDK开发(入门)

前言
兴趣来潮突然想试试如何开发一个自己的SDK,因为之前面试有问到,顺便做个笔记。

什么是SDK开发?
日常开发中,我们会遇到某些情况不能提供源码,项目组件化等需求,这时候我们就可以使用SDK开发,在OC的开发中,我们涉及到的一般是静态库(.a)或者动态库(.framework)。(注:不是所有的.framework就一定是动态库)

a与.framework有什么区别?
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
建议用.framework.

接下来将以实例帮助大家创建一个自己的.framework
首先新建Project选择Framework


image.png

在目录下写入想要封装的类文件


image.png

例如我在MyStringUtil中写了一个测试方法:
#import "MyStringUtil.h"
@implementation MyStringUtil
+ (void)helloWorld {
    NSLog(@"Hello World!");
}
@end

接下来进行项目配置:

image.png

然后设置需要暴露的头文件


image.png

在主文件中引入头文件


image.png

然后在Xcode中添加执行脚本
image.png

Project --> TARGETS --> Build Phases -> + --> New Run Script Phases 添加执行脚本,如下:
# Type a script or drag a script file from your workspace to insert its path.
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 "${DEVICE_DIR}" ] || [ ! -d "${SIMULATOR_DIR}" ]
then
exit 0
fi

# 如果合并包已经存在,则替换
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# 使用lipo命令将其合并成一个通用framework  
# 最后将生成的通用framework放置在工程根目录下新建的Products目录下  
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"

#合并完成后打开目录
open "${SRCROOT}/Products"

fi

最后真机和模拟器各运行一次项目就可以得到framework文件啦。


image.png

注意: 只有在真机,模拟器各编译一次后,才会在工程/Products目录下生产合并包,如不希望自动打开目录,注释掉最后一句#open "${SRCROOT}/Products"即可。

接下来使用以下试试
将SDK拖入工程试一试


image.png

image.png

image.png

你可能感兴趣的:([iOS]iOS如何进行SDK开发(入门))