iOS SDK开发步骤

一、SDK工程

SDK工程包含所有SDK源码,真正的开发工程。

  1. 创建如下目录
目录.png
  1. 创建SDK工程,选择Framework
创建SDK工程.png
创建SDK工程.png
路径.png
  1. 进入工程目录,创建如下子目录
子目录.png

这是一个通用的目录,具体封装时应该不需要这么多目录。Controller和View存放UI相关文件;Depend存放依赖库文件,主要是内部库,注意与ThirdModule的区别;Logic用于存放业务逻辑处理文件,一般情况和VC配套使用;Model数据模型(多为UI数据模型);Reource模块内部资源;Service网络接口请求,处理网络数据;ThirdModule存放第三方库,这里区别于依赖模块(Depend),目前第三方库主要是Pod、framework和纯源码形式,对Pod形式,先用pod下载代码,然后将源码拷贝到ThirdModule目录,framework和纯源码形式,直接拷贝到ThirdModule目录,无论是哪种形式,一定要注意版本号的记录。

  1. 将子目录添加到工程中
添加目录.png
  1. 然后创建相应文件
ViewController1.png
ViewController2.png
Logic1.png
Logic2.png
View1.png
View2.png
Manager1.png
Manager2.png

特殊说明一下,一个模块最好的设计应该只有一个接口文件,或者说对外提供的文件,也就是Manager类。这样设计的好处在于:文件越多,接口就会越多,使用出错也会增加,使用也不会很方便,更重要的是,当模块内部出现问题时,因为对外接口过多,排查问题也会比较麻烦。

  1. 创建脚本
脚本1.png
脚本2.png
  1. 添加依赖
添加依赖.png
  1. 编写脚本文件

    UNIVERSAL_OUTPUTFOLDER=../Output/
    
    # 创建输出目录,并删除之前的framework文件
    mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
    rm -rf "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework"
    
    # 分别编译模拟器和真机的Framework
    xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
    
    xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
    
    # 拷贝真机的framework到univer目录
    cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/"
    
    # 合并framework,输出最终的framework到build目录
    lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"
    
  2. 添加脚本

添加脚本.png
  1. 设置脚本文件路径
设置路径.png
  1. 选择targets->Universal进行build
Universal.png

如果出现下面错误

提示错误

控制台进入脚本文件所在的目录,执行下面命令:

chmod 755 build-universal-framework.sh

  1. 额外配置,前面创建工程时,添加了Configurations目录,此目录用于保存配置信息。xcconfig文件是一个用来保存Build Settings键值对的纯文本文件。这些键值对会覆盖Build Settings中的值。所以当在xcconfig文件中配置了的选项在Build Settings中怎么设置都不会再起作用
  • 添加配置文件
图片.png
  • 然后可以在Project进行设置
图片.png

根据具体情况进行设置,此处不做详细介绍。

  1. 特殊说明
  • 默认情况下创建的Framework是动态库形式,如果要创建静态库形式的,修改如下参数:
参数修改.png
  • 在对第三方SDK进行封装时,由于第三方SDK可能提供的是源码和Framework。对于源码,可以直接包含到模块中,但对于Framework,就需要区分静态库和动态库两种情况:1、静态库可以直接包含到模块中;2、动态库不建议包含到模块中,而是与模块一同提供给用户使用。静态库和动态库的区分方法是通过file命令。
静态库.png
动态库.png
  • 关于第三方SDK提供的Bundle文件,也要单独提供,以防止造成资源无法找到。

二、Samples工程

此工程用来调试SDK接口,演示如何使用SDK。

  1. 创建工程
创建工程.png
位置.png
  1. 添加template.framework到工程中
添加framework.png
  1. 编写调试代码,然后运行调试
调试代码.png
  1. 运行时如果出现下面异常
异常.png

这是因为你使用的是动态库,没有加载到APP中,修改设置如下:

加载动态库.png
  1. 如果经过Demo使用SDK接口,没有发现问题,到此可以算是此SDK开发完成,可以将此SDK模块进行内部自测或提交QA系统测试。另外一种情况是,发现调用SDK接口时,没有得到预期结果,此时需要对SDK进行联调。

三、在Samples工程中调试SDK工程

  1. 在工程目录里创建一个Module目录

  2. 然后在控制台进入Module目录

控制台1.png
  1. 创建templateSDK目录快照如下
快照.png
  1. 复制一个新的targets,在新的targets中删除templateSDK.framework,因为下面将使用工程中的templateSDK.framewrok
复制.png
  1. 修改名字如下
修改名字
  1. 将templateSDK工程添加到templateTFW工程上
添加工程1.png
添加工程2.png
  1. 添加工程依赖
添加工程依赖.png
  1. 加载动态库
加载动态库1.png
加载动态库2.png
  1. 运行调试
    此时在templateSDK工程中修改代码,templateTFW工程运行就可以看到修改效果了。

最后

以上方法是一个通用编写SDK的方法,实际情况可能会复杂些,需要具体对待。今后也会补充特殊情况的处理和注意事项,也希望大家提出宝贵意见。

附上Demo下载

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

推荐阅读更多精彩内容