【问题标题】:Conflict between the Braintree iOS SDK & Card I/O iOS SDK: duplicate symbols for architecture armv7Braintree iOS SDK 和 Card I/O iOS SDK 之间的冲突:架构 armv7 的重复符号
【发布时间】:2014-12-20 08:50:50
【问题描述】:

在我正在开发的应用程序中(使用 Xcode 6.1,适用于 iOS 7&8),我使用 Card IO 捕获信用卡信息并使用 Braintree 作为付款方式。当我包含 Card IO iOS SDK 以及由 Cocoapods 导入的 Braintree iOS SDK 时出现问题,我得到了错误:

重复符号 _OBJC_CLASS_$_CardIOCreditCardInfo 在: /MyApp/Pods/Braintree/Braintree/PayPal/mSDK/libPayPalMobile.a(libCardIO.a-armv7-master.o) /MyApp/CardIO/libCardIO.a(libCardIO.a-armv7-master.o) 重复符号 _OBJC_CLASS_$_CardIOPaymentViewController 在: /MyApp/Pods/Braintree/Braintree/PayPal/mSDK/libPayPalMobile.a(libCardIO.a-armv7-master.o) /MyApp/CardIO/libCardIO.a(libCardIO.a-armv7-master.o) 重复符号 _OBJC_CLASS_$_CardIOView 在: /MyApp/Braintree/Braintree/PayPal/mSDK/libPayPalMobile.a(libCardIO.a-armv7-master.o) /MyApp/CardIO/libCardIO.a(libCardIO.a-armv7-master.o) 重复符号 _OBJC_METACLASS_$_CardIOCreditCardInfo 在: /MyApp/Pods/Braintree/Braintree/PayPal/mSDK/libPayPalMobile.a(libCardIO.a-armv7-master.o) /MyApp/CardIO/libCardIO.a(libCardIO.a-armv7-master.o) 重复符号 _OBJC_METACLASS_$_CardIOPaymentViewController 在: /MyApp/Pods/Braintree/Braintree/PayPal/mSDK/libPayPalMobile.a(libCardIO.a-armv7-master.o) /MyApp/CardIO/libCardIO.a(libCardIO.a-armv7-master.o) 重复符号 _OBJC_METACLASS_$_CardIOView 在: /MyApp/Pods/Braintree/Braintree/PayPal/mSDK/libPayPalMobile.a(libCardIO.a-armv7-master.o) /MyApp/CardIO/libCardIO.a(libCardIO.a-armv7-master.o) ld:架构 armv7 的 6 个重复符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

原来 Braintree 包含 Paypay SDK,其中已经包含 CardIO 的库。

我试过了 1)删除(remove reference) CardIO文件夹下的libCardIO.a,APP可以编译运行,但是CardIO的view controller和camera无法正常打开。
2)从 Braintree 中删除(删除引用)Paypal 文件夹,出现以下错误。

架构 armv7 的未定义符号:
“_OBJC_CLASS_$_BTPayPalButton”,引用自: libPods-Vinyo-2-Braintree.a(Braintree.o) "_OBJC_CLASS_$_BTPayPalViewController" 中的 objc-class-ref,引用自: libPods-Vinyo-2-Braintree.a(BTPaymentProvider.o) 中的 objc-class-ref
“_OBJC_CLASS_$_BTPayPalAppSwitchHandler”,引用自: libPods-Vinyo-2-Braintree.a(BTPaymentProvider.o) 中的 objc-class-ref libPods-Vinyo-2-Braintree.a(Braintree.o) ld 中的 objc-class-ref:未找到架构 armv7 clang 的符号:错误:链接器 命令失败,退出代码为 1(使用 -v 查看调用)

寻找一种可行且安全的方法来正确集成这两个 SDK 并使其工作。任何想法表示赞赏!提前谢谢!

【问题讨论】:

    标签: ios paypal braintree card.io


    【解决方案1】:

    来自 card.io 的 Dave。

    您的第一种方法是正确的。根据您迄今为止提供的信息,我不确定为什么它对您不起作用。

    请参阅https://github.com/braintree/braintree_ios/issues/53#issuecomment-58379403 了解一些具体建议。

    (再过一两周,这应该会变得更容易,因为正确的 card.io 标头将包含在 Braintree iOS SDK 中。)

    【讨论】:

    • 非常感谢您的回复和您提供的链接。我尝试删除 libCardIO.a 并添加所有标题。但是 CardIOPaymentViewController 仍然无法正确初始化。甚至在 viewWillApprear 中出现错误:“+[CardIOPaymentViewController preload]: unrecognized selector sent to class 0x365ffc。”在添加 Braintree SDK 之前,CardIO 运行良好。
    • @willyang preload 方法在 3.9.0 版中添加到 card.io。由于您已将 card.io 标头恢复为 Braintree SDK 使用的 3.8.2 版本,因此未定义该方法。 -> 我认为您最简单的解决方案是等待几天,直到 Braintree SDK 的下一次更新,这应该可以一劳永逸地解决问题。
    • 太好了!期待新的SDK。非常感谢您的回答!
    • 已经更新到最新的braintree sdk,经过几次Xcode的配置,一切都像魅力一样。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2016-12-15
    • 2011-05-17
    • 2013-05-01
    • 2019-06-10
    相关资源
    最近更新 更多