iOS - SDK开发(上集) ,SDK工程搭建

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.创建一个孤独的文件夹。。。。(哭)

一:图1

2. 打开那个用了几百年的Xcode,File ---> New --->  Workspace

一:图2

3. 给我们的宝宝起个名,不好意思,是工作空间。。。选择那个自己创建的孤独的文件夹,放在里面

一:图3

第二步:创建SDK工程 和 Demo工程

1. 创建project。File ---> New ---> Project
(此处需要注意,必须打开着刚才创建的workspace来创建Project,不然后面会找不到这个workspace的选项)

二:图1


2.选择 iOS ---> Framework  ---> Next

二:图2

3. 还是起名字环节

二:图3

4. 选择刚才创建的文件夹,选择刚才创建的workspace

二:图4

5. 创建Demo工程, 还是相同的创建流程 File ---> New ---> Project ,这里大家都会了。Next !!!

二:图5


6. AddTo和Group也是选择刚才的workspace

二:图6

7. 完成!目录结构如下

二:图7

第三步:SDK工程与脚本配置
1. 选择SDK工程 ---> Build Settings ---> 搜索Mach-O ---> 选择Static Library 静态库

三:图1

2. 如果需要模拟器调试,需要在Valid Architectures中,添加对模拟器支持 x86_64。 i386就不加了,估计没有32位的开发机器了吧。。

三:图2

3. 添加合并模拟器framework和真机framework的脚本

三:图3

4. 选择Cross-platform ---> Other ---> Aggregate。命名 完成后 Finish.

三:图4.1


三:图4.2


5. 选择刚创建的MergeRunScript ---> Build Phases ---> 点击 + 号 ---> New Run Script Phase

三:图5


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

三:图6

第四步:SDK接口文件

1. 创建继承于NSObject的总接口api文件,把api.h拉到Public,暴露给使用方。(我个人没有使用自带的LmSDKProject.h文件,所以隐藏掉)

四:图1


2. 基本必备的快速接入、代理和销毁等。参考一些成熟的SDK来设计,这个具体看业务。
.h文件

四:图2

3. 单例的注意事项。
为了保证单例,需要重写NSZone的创建方法。
还有销毁单例的方法,需要把
static LmSdkApi * _sharedInstance = nil;
static dispatch_once_t onceToken;
声明成全局,并设计一个快捷销毁方法给使用方

.m文件

四:图3

第五步:验证framework的使用

1. 选择SDK工程, command + B  编译,分别生成模拟器和真机两种指令集的包

五:图1.1


五:图1.2


2. 选择脚本并command + B 编译一次,把模拟器和真机的framework合并。在Products文件夹中,得到成功的framework

五:图2.1


五:图2.2


3.查看framework支持的指令集
~ 打开命令行。
~ cd 到 framework目录  
~ file 查看目标文件
(这里有一点需要注意,SDK工程的最低支持版本,会影响到最终打包出来的指令集。例如:SDK工程最低支持iOS13.4的话,最终的framework是不含armv7指令集的。因为32位的机器升不了这个版本)

五:图3

第六步: 配置Pods 
1. 命令行,cd进入workspace所在的文件夹  . 输入 touch Podfile

六:图1


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

六:图2


3.命令行输入 pod install. 迅雷不及掩耳之际,Pods配置完成了

六:图3

到这里为止,SDK工程搭建流程已基本完成,可以愉快地开始开发了。
SDK工程是一个创造轮子的过程,实际上我们不应该过多地依赖第三方库,具体如何拿捏需要看不同的业务和功能。

下一集会继续写SDK的调试和发布。
iOS - SDK开发(下集) ,SDK发布到Cocoapods -

小弟不才,若有错误之处,欢迎留言讨论(^_^)


2021.04.19 脚本更新, 请点击此处跳转 :iOS开发 - 合并静态库架构缺失或重复 -

你可能感兴趣的:(iOS - SDK开发(上集) ,SDK工程搭建)