扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
公司开发的SDK,是集成了各个平台的商品,包括购买、分享、提现等功能,为了加快进度,我是使用了一些第三方。但是有些需求,比如分享到微信朋友圈或者还有,必须用到微信的SDK。考虑到后期的维护成本和集成,笔者采用了cocoapods管理第三方库。
创新互联公司服务项目包括久治网站建设、久治网站制作、久治网页制作以及久治网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,久治网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到久治省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
笔者有片文章专门介绍SDK的开发步骤的,大家可以参考,我这里就直接进入主题了。
首先,你创建一个静态的framework工程MyTestSDK,把这个工程集成cocpapods,至于如何集成cocpapods,网上有教程,自己搜索。这个时候把你项目中所用的第三方库添加到Podfile文件中,然后 pod install。这个时候你command + B 编译运行,如果你的第三方库中还有Bundle资源,那么编译后,第三方库的bundle资源会被编译,一起放到Products文件下的framework文件中,右键Show in Finder就会看到。如下图所示的MBProgressHUD文件夹,里面都是MBProgressHUD第三方的资源文件。
然后把你的项目放入SDK工程中,编译运行一下,看看有没有错误。之所以先把SDK工程选用cocoapods管理,就是怕你的项目放入SDK中运行报错。没有任何问题,直接编译即可。
由于SDK中的第三方是通过cocoapods管理的,所以接入者的项目也要用cocoapods管理。
1:把SDK工程中,Products文件夹下的framework文件copy到项目中,最好项目中建立一个文件夹,专门放SDK和bundle。我是放到了一个文件夹中,方便分类寻找。如下图所示:
2:打开终端,cd到SDK所在的文件夹下,执行如下命令,回车,创建spec文件。
其中,MyTestSDK是你的SDK名称。
创建出来的spec文件,是个很长的文件,但是大部分都是注释的,我这里只提取了有用的信息展示出来:
然后把spec中依赖的第三方库,逐个加入到项目中的Podfie文件中。然后 终端打开,cd到自己的项目中,pod install即可。
本人亲自测试过的,No Problem。当初感觉SDK如果依赖了第三方库,接入的项目中也有同样的第三方库,会不会冲突啊,感觉好难搞啊。事实证明,通过spec进行依赖,可以很好的解决这个问题,也就没有那么麻烦了。
首次开发SDK还是遇到了很多问题,运行出现很多bug,但是最后还是一一解决了,就是没有记录下bug和解决发的方法。
1;path路径不对,就会报错 ,如下
是因为我把路径写成了:
其实正确的写法是:把“/”放在前面
2:SDK中有第三方,但是项目中的Podfile里面没有这个第三方,报错如下所示:
解决办法是就是在项目中的 Podfile里面加入缺失的第三方库,重新 pod install。
iOS开发中支持静态库与动态库,不过使用动态库,上架会有麻烦。这里讲到如果创建静态库.a文件,其实很早之前公司要求做wifi的SDK的时候就开始涉及这个东西了,但一直没写出来。
首先新建一个静态库的项目
注意这里选择的不是模拟器运行,继续
这时候就得到了两个.a文件。
把Release-iphoneo和Debug-iphonesimulator复制到桌面新建的文件夹
最后使用命令lipo -create xxx.a xxx2.a -output xxx3.a
新建项目或者随便找个已创建测试项目,可直接拖进来放在Frameworks目录下
再把暴露的.h文件引进来
接下来,我把静态库和暴露的.h文件放入cocopods中使用,将静态库和暴露的.h上传至github上的仓库。并更新一个release版本。
更改cyhCheckphoneNum.podspec版本号,与spec.source_files和spec.vendored_libraries
更新github上的release版本
验证是否通过,通过上传至github
上传至cocopods
最后使用cocopods安装使用
【原文】( )
图1:
图2:
图3:创建成功效果
图4:
图5:
图6:
图7:
图8:成功效果图
图9:
图10:
图11:成功效果图
图12:
图13:
图14:
图15:
6.选中目标SDK设置支持的架构(一般模拟器环境是x86_64 真机环境是armv7 armv64)
7.最后编译,command + B,编译通过在finder中找到framework,拷贝出来
编译之前设置工程为release环境
8.获取真机环境下的可执行文件
9.获取模拟器环境下的可执行文件
10.使用lipo -create /Users/suning/Desktop/未命名文件夹/FDDTestSDK.framework/FDDTestSDK /Users/suning/Desktop/未命名文件夹/FDDTestSDK1.framework/FDDTestSDK -output /Users/suning/Desktop/未命名文件夹/FDDTestSDK.framework/FDDTestSDK. 合并导出可以在真机和模拟器环境下的SDK文件。
最终的SDK文件目录,可以拖拽到项目中进行使用了。
打包资源文件的方式可以参考 此文章
IOS开发有些时候通过制作SDK进行组件化, 封装化开发很方便, 那么怎么制作一个可用的SDK呢? 直接上干货
当前环境:
MacOS 12.3.1
Xcode13.4.1
Intel Core i9
xcode → File → New → Project
Frame Library → Framework → Next
Product Name 中填写SDK名字 → Next 之后选个自己能找的到的地方保存工程
创建好了最终是这个样子
先修改 Deployment info 部署信息, 这个要根据自己的 目标工程 配置。例如 我加入的目标工程支持到 ios10.0, 不支持iPad, Mac, 那么我创建的SDK也要对应修改
其实自己随便一个项目加进去即可, 留意下版本号对应即可
接下来 Command + N 创建一个类便于后面调用
例如我这边创建一个 SpriteFactory 类, 类型是 NSObject , 并写入一个实例方法 factoryProductSprite
建好之后, 在公共文件 ProductSprite.h (第一个, 你自己建的那个名字), 引入头文件. 留意下引入文件格式即可
接下来我们需要修改一下 Build Settings 中部分内容
接下来我们建立个组群, 管理下SDK
建完之后如下, 多了一个这个
添加 framework 的脚本文件, Build Phases 点击 + 选择 New Run Script Phase
把这个复制进去
上方选择新加的 Targets 选择 Any iOS Device 运行
由于我们刚才已经写脚本了, 所以会自动生成模拟器真机的SDK, 并且自动弹开, 如下
其他项目如果想使用, 把 .framework 拖进去或者复制项目再 add 进去即可
加入之后如下, 留意下 General 中 Frameworks, Libraries, and Embedded Content 这快, 如果没有(老版本), 需要手动加进去 .framework
在合适地方调用, 引用头文件格式 #import "ProductSprite/ProductSprite.h" , 下面写进去对应方法
运行可看到
动态库如果正常按上面方式处理会报错, 例如
Targets → Build Settings → Mach-O Type 为 Dynamic Library
运行时候会这样Crash
目标文件: Build Phases 点击 + , 选择 New Copy File Phase
点击 + , 选择对应动态库加进去, Destination 留意选择 Frameworks
修改 Targets → Build Settings → Build Options → Validate Workspace 为 Yes
配置完之后再运行, 正常打印
最近公司由于业务需求,需要提供一个SDK以供第三方公司的集成开发,之前没有这方面的开发经验有点迷茫。然后就在网上查看了一些相关的资料,自己研究了一天,成功的封装出了自己iOS开发过程中的第一个SDK包。同时也是为了以后开发SDK留下一个比较完整的笔记。
SDK的英文全名是:software development kit,翻译成中文的意思就是“软件开发工具包”,我个人的理解就是一个工具包,完全可以理解成开发中我们的一个公共类。
二、怎么实现SDK的封装呢?
1.打开Xcode开发工具创建我们的工具类
注:本文中使用的开发工具为xcode9.3
创建完成后
创建完成后,我们新建两个继承于基类的文件,一个用于封装网络请求一个用于封装我们需要提供给他人使用的方法以及需要动态改变的参数。
2.网络请求添加到SDK中一起封装
因为我们封装的SDK有的数据涉及到网络请求,所以我们封装的时候,顺便把需要用到的网络请求也封装进去。
1).使用cocoapods导入第三方库AFNetWorking
具体使用 见印象笔记内容,包含了使用cocoapods遇到的问题以及解决方法:
2).在封装的SDK中如果涉及到使用第三方的库引用的时候,一定要在.m文件中进行引用
3.做完想要封装的文件后,开始进行封装
先进行编辑设置,在product --Scheme---Edit Scheme
此处必须是release,不能用debug模式,选择SDK是在iOS 、tvOS还是watchOS 4上面运行的SDK,在这儿我们选择iOS
在build Setting里面 搜索linking 设置Mach-O Type 为 static library
在build Phases --- headers 中添加需要暴露的类,将Project里面想暴露的文件.h拖动到Public里面进行文件暴露
完成所有设置后,我们进行真机编辑和模拟器编辑最后合并成一个可以在真机和模拟器上运行的第三方SDK,
4.到这一步我们的SDK封装就差最后一步了,合并成能在真机和模拟器上运行的SDK
选中编辑好的包,我这儿是Demo_SDK.framework然后右击显示文件内容
找到这两个文件后,我们开始合并,得到我们想要的SDK
1).打开终端---输入lipo -create 加上文件路径
1.为真机的文件,2为模拟器的文件,3为合并后输出问的地址
注意:我们所合并的文件是Demo_SDK,并不是所有的文件
合并到处文件为lipo结尾的
更改合并和的文件名称和合并前文件名称相同,并且去掉后缀。用合并和的文件替换掉和并前的文件
合并完成后拷贝处我们封装的SDK,在其他项目中引用就可以了
总结:截图比较多,为了照顾像我这样的小白,希望大家理解。第一次写,不喜勿喷,这只是作为自己的个人笔记,如果有什么不对的地方,希望大家指出一起交流学习,Thanks♪(・ω・)ノ
Demo链接:
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流