asunquan.com

不忘初心 不止于行

职场新人 iOS菜鸟 就职于搜狐畅游 从事iOS/tvOS的SDK开发 对于游戏市场有点点了解 平日和一只小Corgi同吃同睡


一些使用第三方SDK时可能遇到的问题和解决方法

前言

在项目开发中, 产品经理都会提出各种不同的功能, 比如运营同事想看看应用内各项数据统计以便制定下一步运营计划, 这时项目中可能会使用友盟(阿里), TalkingData(独立第三方), Google Analytics(Google)等, 又比如领导觉得需要加入一些社交功能来实现用户间交叉推广, 这时项目中可能就会使用到微信, 微博, QQ, Facebook, Twitter等社交平台推出的SDK. 这些供我们使用的东西可以统称为第三方SDK(因为不是我们自己的), 在iOS开发中的SDK形式上可能会出现.a文件和.framework文件两种, 不过原则上问题产生的原因都是一样的.

由于本人从事SDK开发工作, 经常会遇到开发者在使用时提出一些问题, 所以在此介绍一些常见问题的解决方法.

ld:library not found -lXXXX 或 framework not found XXXX

发生时间: 编译时报错

错误原因: 一般出现在导入第三方SDK时路径设置出错

解决方案: 在Target -> Build Settings -> Library Search Paths / Framework Search Paths 中查看报错SDK的路径是否设置正确.

ld: ‘XXXX’ does not contain bitcode

发生时间: 编译时报错

错误原因: 一般出现在导入的第三方SDK不支持bitcode时

解决方案: 在Target -> Build Settings -> Enable Bitcode 设置为NO

[XXXX xxxx] : unrecognized selector sent to instance

发生时间: 运行时崩溃

错误原因: 一般出现在使用到导入的第三方SDK中的Category时

解决方案: 在Target -> Build Settings -> Other Linker Flags 设置 -ObjC .

Undefined symbols for architecture xxx: “OBJC_CLASS$_XXXX”, referenced from :

发生时间: 编译时报错

错误原因: 一般出现在没有引入第三方SDK需要使用到的系统framework时

解决方案: 在Target -> Build Phases -> Link Binary With Libraries 添加缺少的系统framework.

Undefined symbols for architecture xxx: “_xxxx”, referenced from :

发生时间: 编译时报错

错误原因: 一般出现在没有引入第三方SDK需要使用到的tbd(dylib)文件时

解决方案: 在Target -> Build Phases -> Link Binary With Libraries 添加缺少的tbd(dylib)文件.

duplicate symbol _XXXX in:

发生时间: 编译时报错

错误原因: 一般出现在第三方SDK中使用了与项目中同名文件时

解决方案: 更改项目中文件的名称.

注: 这种文件冲突理论上在SDK开发中是不应该存在的, 这是SDK开发者很严重的问题, SDK中文件命名规则应该规避常用名, 通常会加上特殊前缀, 如畅游海外自发行SDK中自行维护了一个AFNetworking库, 为了规避开发者也是用到相同的库, 我们对AFNetworking的文件进行了命名上的修改, 由于修改了命名, 从github上进行替换难以操作, 所以我们对内容自行维护包括近期的适配IPv6网络等.

(lldb) po launchOptions

error: Couldn’t materialize: couldn’t get the value of variable launchOptions: variable not available

error: errored out in DoExecute, couldn’t PrepareToExecuteJITExpression

发生时间: lldb调试时控制台显示

错误原因: 一般是由于把Build Configuration设置成了Release, 所以无法进行lldb调试

解决方案: Product -> Scheme -> Edit Scheme… -> Run -> Build Configuration 设置为Debug.

问题未完, 遇到再续…..

写在最后的一些话

以我个人经验, 上面的问题一般在SDK接入文档中都有说明需要配置, 一些开发者不是很重视接入文档, 甚至都不怎么看接入文档与类和方法无关的地方, 这样无形中为SDK开发人员加大了工作量. 也希望大家在以后的开发中能注重认真查看接入文档, 这样为双方都节省了时间, 何乐而不为呢?

最近的文章

关于AppStore强制使用HTTPS

前言时光如白驹过隙, 转眼间又到了年底. 还有40多天我们就要挥别2016迎接2017了. 今年的WWDC2016开发者大会上苹果通知了我们一件事”2016年底别想消停了”. 在大会上苹果宣布2017年1月1日起, 新提审的所有应用都必须启用AppTransportSecurity安全功能, 也就是说网络请求必须若原先为http协议的必须改成https协议. 由于销售业务的SDK涉及渠道众多, 在修改url的同时还要做大量的渠道SDK更新, 😔.HTTP和HTTPS HTTP: 超文本传...…

iOS开发继续阅读
更早的文章

个人简历

个人简历基本信息 姓名 孙泉 应聘职位 iOS开发工程师 性别 男 出生年月 1992年6月 联系电话 +86 18510220298 电子邮箱 asunquan@yeah.net 个人网站 http://www.asunquan.com...…

个人简历继续阅读