资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

iossdk开发,ios sdk开发

iOS开发:SDK依赖第三方库及其踩过的坑

公司开发的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 五款SDK工具

尽管App store里存在众多种类繁杂,服务各异的应用,但所有App都有一个共同的目标:提供 极致的用户体验。

好的用户体验是由许多因素构成的。我们需要知道,一款好产品背后必定是经过团队多方面打磨、迭代而成。产品迭代必不可少的一项内容,就是取决于你所使用的工具,比如iOS SDK(软件开发工具)开放的通用模块,从beta测试和错误监控到用户行为分析和A/B测试,都有相应的产品,可以大大缩减金钱、时间成本,从而提高应用整体运营的敏捷性。

这里列出了几款iOS必备软件开发工具,直接根据需要配置即可。

地址:

UserTesting的按需测试平台由一个超过一百万测试者的座谈小组组成,可以在移动设备上测试网站、App甚至是原型。在这里几小时内就可以得到人工的反馈意见,包括一段记录测试过程的视频和一份完整的文字报告。开发者可以通过这些内容详细地了解用户的使用习惯,以及产品在使用过程中遇到的各种问题。

主要特点:

超过百万的用户网络

可直接面试

视频模式和自动转录信息

地址:

openinstall SDK能提供多种服务,包括最让开发者头疼的iOS多渠道统计,相对iTunes Connect 的“营销活动”统计维度更丰富,且实时灵活,适合多渠道推广使用。同时提供免填邀请码安装、一键拉起(Deeplink)、携带参数安装、地推统计、CP结算、广告投放统计等多个使用场景以及应用优化功能,让App用户体验更佳,拉新转化率更高。

主要特点:

多渠道携带参数统计

免填邀请码等优化用户体验

提高拉新转化率

地址:

另一个具有多种功能的SDK是Instabug ,它包括了bug报告工具,让您的用户可以将bug发送给您;还有崩溃报告工具,可以向您发送所需的堆栈跟踪信息,甚至不用导航。您还可以对比当前版本和前一个版本,观看用户操作的屏幕记录。Instabug 可以与您的工作流程集成,然后通过Slack和JIRA发送提醒给整个团队。

主要特点:

bug屏幕记录

交互式用户反馈

Bug的建议和类型分析

地址:

Optimizely 的试验平台给web网站、移动端网页和移动端App提供解决方案。移动工具可以让您很流畅地对应用的各个部分进行即时实验。快速迭代是这个工具的特点,您不需要等待应用商店的审核即可更新应用。同时,Optimizely 还可以让您根据精准化的目标市场创造个性化的体验。

主要特点:

即时推出和分阶段推出

视觉编辑

自定义受众以及精准化目标定位

地址:

Foresee 提供了一套多渠道的“用户体验”工具,其中包括自助用户反馈工具。通过Foresee的反馈工具,您可以鼓励用户填写简单的调查问卷,让他们提出问题,以避免问题扩大化。此外,您还可以为核心用户快速部署评级和审核提示。此外,Foresee还可以重播整个会话,提供App用户体验的全貌。

主要特点:

简单,自助化

个性化评分和评审

提醒会话重播

相比于采购需要大量定制化开发或自研的产品,使用标准化通用的SDK,可以大大缩减金钱、时间成本,从而提高公司整体运营的敏捷性。

这就像你需要用电,但并不需要从头建发电厂,更明智地做法是主动关注哪些能力是市面上的SDK厂商已可提供的,哪些还不成熟;做好SaaS、定制化软件和自研工具之间的分配,为那些需要“拼速度”的一线业务准备好“利器”。

组件:制作SDK

因为公司的组件化开发的深入,虽然自己只是使用不需要去处理组件(组件模块是另外的小伙伴+大佬架构师负责的),还是需要自己造轮子。就屡屡了...花了点时间整理了下简单的,这些都是为组件做基础,后续会持续更新并实现组件。

废话就不多说了,关于SDK可以自行百度这边就不扯了,开始下面的正文。

静态库: .a 和 .framework

动态库: .dylib 和 .framework

选择 Cocoa Touch Static Library :

Build Active Architecture Only 设置为YES,表示只编译当前的 Architecture 版本,为了适配各种机型需要关闭当前的设置。

可以在编译完成后查看生成的静态库支持的系统架构,终端命令:

结果如下:

一般第三方只提供 release 的版本。

这边就不多讲了,国际化语言跟平时设置是一样的,具体的就附上个通道吧 iOS之SDK开发的总结 ,查看上面介绍的第四点即可。

真机、模拟器各需要运行一次生成对应的静态库,根据 第4点 切换环境编译生成对应的静态库,编译快捷键 cmd + B 。

如何查看编译是否成功,查看工程目录如下图红色框里面的名字,如果是红色的则未编译,下图是已经编译后的颜色:

编译完成后可以点击上面红色框 Show In Finder 进入该文件目录。

终端命令

注 :格式如上,上面的空格不是为了美观,而是格式

举个例子:

静态库制作完成,将静态库拖入工程中,记得导入相应需要暴露的头文件。因为静态库没有提供相应的头文件,只是单纯的一个.a文件。

使用 framework 制作静态库的方法就放到 动态库 中一起说明,具体的可以查看 动态库--2、配置Mach

在制作动态库上跟制作静态库的流程是大同小异,主要介绍不同的。

新建工程,选择如下:

Mach-O Type 默认为动态库,如果需要制作静态库的话在这边修改 framework 类型即可。

配置完成后, cmd + B 分别编译生成模拟器、真机 Framework 。

终端命令与制作.a静态库是一样的,不同的是选择的文件,需要用来合并的文件如下:

终端命令如下:

别忘了该空格的地方带上空格。

举个例子:

输出的文件是 result.lipo ,它的格式是 .lipo ,将该文件修改成合并文件时的文件名并放入其中一个 framework 中替换,通用的 Framework 制作好了。

图中红色框的文件是替换合并后的文件。

将库导入需要使用的工程中即可。

在工程中新建bundle,iOS-Resource-Setting Bundle 命名bundle,比如Resource.bundle。

创建一个文件夹如:images,将需要放入的图片拖进去即可,拖进去后Xcode还是未显示出加入的图片,可以将bundle取出然后重新添加进去就有了。

项目中导入使用的时候需要配置的编译参数 Build Settings - Linking - Other Linker Flags ,相关的介绍附上。

如果静态库中有 category ,那么需要添加 -ObjC 参数标识,否则可能会报: unrecognized selector sent to instance ,因为链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中。

会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到 ld: duplicate symbol 错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到 -ObjC 失效的情况下使用 -force_load 参数。

所做的事情跟 -all_load 其实是一样的,但是 -force_load 需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载

iOS-SDK从无到有(学有所出,有所记)

配置和使用静态库

iOS之SDK开发的总结

iOS 库.a 和 framework的区别和创建


名称栏目:iossdk开发,ios sdk开发
本文链接:http://www.cdkjz.cn/article/dscicoh.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220