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开发 - 合并静态库架构缺失或重复 - 简书

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345