2021.04.25 更新:
由于此文章开始编写时,没有使用markdown编辑器。导致部分代码直接复制黏贴后会出错,估计是自动插入了一些转义符引起的。
这里借用一下别人的图做栗子
项目简单介绍
1. 此次创建的属于framework静态库
2. SDK工程需要依赖其他第三方库,使用Pods依赖,不手动拉进工程
3. Demo工程与SDK工程,在同一个工作空间 xxxxxx.xcworkspace
4. 使用脚本合成模拟器和真机打包出来的framework
5. framework项目上传
6. 发布到pods上
当前Xcode版本 11.4.1
第一步: 创建工作空间
1.创建一个孤独的文件夹。。。。(哭)
2. 打开那个用了几百年的Xcode,File ---> New ---> Workspace
3. 给我们的宝宝起个名,不好意思,是工作空间。。。选择那个自己创建的孤独的文件夹,放在里面
第二步:创建SDK工程 和 Demo工程
1. 创建project。File ---> New ---> Project
(此处需要注意,必须打开着刚才创建的workspace来创建Project,不然后面会找不到这个workspace的选项)
2.选择 iOS ---> Framework ---> Next
3. 还是起名字环节
4. 选择刚才创建的文件夹,选择刚才创建的workspace
5. 创建Demo工程, 还是相同的创建流程 File ---> New ---> Project ,这里大家都会了。Next !!!
6. AddTo和Group也是选择刚才的workspace
7. 完成!目录结构如下
第三步:SDK工程与脚本配置
1. 选择SDK工程 ---> Build Settings ---> 搜索Mach-O ---> 选择Static Library 静态库
2. 如果需要模拟器调试,需要在Valid Architectures中,添加对模拟器支持 x86_64。 i386就不加了,估计没有32位的开发机器了吧。。
3. 添加合并模拟器framework和真机framework的脚本
4. 选择Cross-platform ---> Other ---> Aggregate。命名 完成后 Finish.
5. 选择刚创建的MergeRunScript ---> Build Phases ---> 点击 + 号 ---> New Run Script Phase
6. 添加脚本 (复制黏贴大家好^-^) 此脚本会报错,文章尾部已更新最新可行的脚本。
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
第四步:SDK接口文件
1. 创建继承于NSObject的总接口api文件,把api.h拉到Public,暴露给使用方。(我个人没有使用自带的LmSDKProject.h文件,所以隐藏掉)
2. 基本必备的快速接入、代理和销毁等。参考一些成熟的SDK来设计,这个具体看业务。
.h文件
3. 单例的注意事项。
为了保证单例,需要重写NSZone的创建方法。
还有销毁单例的方法,需要把
static LmSdkApi * _sharedInstance = nil;
static dispatch_once_t onceToken;
声明成全局,并设计一个快捷销毁方法给使用方
.m文件
第五步:验证framework的使用
1. 选择SDK工程, command + B 编译,分别生成模拟器和真机两种指令集的包
2. 选择脚本并command + B 编译一次,把模拟器和真机的framework合并。在Products文件夹中,得到成功的framework
3.查看framework支持的指令集
~ 打开命令行。
~ cd 到 framework目录
~ file 查看目标文件
(这里有一点需要注意,SDK工程的最低支持版本,会影响到最终打包出来的指令集。例如:SDK工程最低支持iOS13.4的话,最终的framework是不含armv7指令集的。因为32位的机器升不了这个版本)
第六步: 配置Pods
1. 命令行,cd进入workspace所在的文件夹 . 输入 touch Podfile
2. 打开Podfile 按格式配置
workspace '工作空间的名字.xcworkspace'
target 'SDK工程名字' do
platform :ios, '10.0'
project 'SDK文件夹名字/SDK工程名字.xcodeproj'
pod 'AFNetworking'
end
target 'Demo工程名字' do
platform :ios, '10.0'
project 'Demo文件夹名字/Demo工程名字.xcodeproj'
pod 'AFNetworking'
end
3.命令行输入 pod install. 迅雷不及掩耳之际,Pods配置完成了
到这里为止,SDK工程搭建流程已基本完成,可以愉快地开始开发了。
SDK工程是一个创造轮子的过程,实际上我们不应该过多地依赖第三方库,具体如何拿捏需要看不同的业务和功能。
下一集会继续写SDK的调试和发布。
iOS - SDK开发(下集) ,SDK发布到Cocoapods -
小弟不才,若有错误之处,欢迎留言讨论(^_^)
2021.04.19 脚本更新, 请点击此处跳转 :iOS开发 - 合并静态库架构缺失或重复 -