各位大神, iOS 静态库中使用第三方库和项目中使用的第三方库冲突,求解!

2015-10-16 15:17:09 +08:00
 zixincao

项目中需要使用翼支付 SDK ,而这个 SDK 的静态库中包含 MJExtension ,我项目中也使用了 MJExtension ,结果悲剧了,好多使用 objectArrayWithKeyValuesArray 方法的地方直接 crash ,调用堆栈显示调的是静态库的 MJExtension ,该怎么解决呢?

4666 次点击
所在节点    iDev
11 条回复
chisj
2015-10-16 15:20:49 +08:00
首先,翼支付这个 SDK 肯定是做得不好,不规范的。 然后,可以把你项目中的 MJExtension 做成代码引用的方式,并你的 MJExtension 库每个类都加上前缀。
zixincao
2015-10-16 15:31:50 +08:00
@chisj 谢谢!如何代码引用呢?没这么搞过
zixincao
2015-10-16 17:12:36 +08:00
我尝试把静态库.a 文件中 MJExtension 的 category 方法去掉,并重新打包,不知道会不会有什么问题。。
SeanChense
2015-10-16 17:14:23 +08:00
@zixincao 简单的去掉不会把项目炸了么~~~
zixincao
2015-10-16 17:22:52 +08:00
@SeanChense 有待测试。。
xiaomayi0323
2015-10-16 17:50:47 +08:00
楼主多邻国的?
superpeaser
2015-10-16 19:15:56 +08:00
之前用银联的 sdk 和数米的 sdk 也是,数米把银联的 sdk 打包在他们自己的静态库中,直接通知数米让他们重新给我们编译一份不带银联的 sdk
zixincao
2015-10-16 19:50:03 +08:00
@xiaomayi0323 没猜对,^_^
zixincao
2015-10-16 20:28:40 +08:00
@superpeaser 这个可以试试
juxingzhutou
2015-10-16 20:38:28 +08:00
在静态库里面直接打包别的库肯定是不规范的,如果引用的 MJExtension 的版本是一样的,那可以以代码形式引入 MJExtension ,但是不引入实现文件(把实现文件在对应 target 上的勾去掉),这样就能直接正常使用静态库中打包的 MJExtension 了。

如果未来拿到剔除了 MJExtension 的版本的话再把勾勾上就是了。

如果用 Cocoapods 引入的话可以自己放一份 spec 在本地,然后在 Podfile 中用:path 指向本地的 spec 文件,然后在 spec 文件的过滤规则里面去掉"*.m"
Dashit
2015-10-16 21:03:57 +08:00
还有个办法就是改名。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/228556

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX