V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
zixincao
V2EX  ›  iDev

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

  •  
  •   zixincao · 2015-10-16 15:17:09 +08:00 · 4534 次点击
    这是一个创建于 3121 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    如果用 Cocoapods 引入的话可以自己放一份 spec 在本地,然后在 Podfile 中用:path 指向本地的 spec 文件,然后在 spec 文件的过滤规则里面去掉"*.m"
    Dashit
        11
    Dashit  
       2015-10-16 21:03:57 +08:00
    还有个办法就是改名。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   911 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:09 · PVG 07:09 · LAX 16:09 · JFK 19:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.