亚马逊最新的 SDK 与 iOS 集成出现错误

Posted

技术标签:

【中文标题】亚马逊最新的 SDK 与 iOS 集成出现错误【英文标题】:Amazon Latest SDK integration with iOS gives error 【发布时间】:2015-03-22 15:20:48 【问题描述】:

我正在为 iPhone 开发一个应用程序,并集成了 Amazon SDK v 2.0.10 来执行文件传输。

当我尝试集成最新的 SDK v 即 2.0.13 时,我收到以下错误。请帮帮我。

Errors:
duplicate symbol _OBJC_IVAR_$_BFWebViewAppLinkResolverWebViewDelegate._didFailLoadWithError in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiosSDKv2.framework/AWSiOSSDKv2(BFWebViewAppLinkResolver.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
duplicate symbol _OBJC_IVAR_$_BFWebViewAppLinkResolverWebViewDelegate._hasLoaded in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(BFWebViewAppLinkResolver.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
duplicate symbol _OBJC_METACLASS_$_BFWebViewAppLinkResolverWebViewDelegate in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(BFWebViewAppLinkResolver.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
duplicate symbol _OBJC_CLASS_$_BFWebViewAppLinkResolverWebViewDelegate in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(BFWebViewAppLinkResolver.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
duplicate symbol _OBJC_METACLASS_$_BFWebViewAppLinkResolver in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(BFWebViewAppLinkResolver.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
duplicate symbol _OBJC_CLASS_$_BFWebViewAppLinkResolver in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(BFWebViewAppLinkResolver.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
duplicate symbol _kBFMultipleErrorsError in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(Bolts.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(Bolts.o)
duplicate symbol _OBJC_METACLASS_$_Bolts in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(Bolts.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(Bolts.o)
duplicate symbol _OBJC_CLASS_$_Bolts in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(Bolts.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(Bolts.o)
duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods_Bolts in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(Pods-Bolts-dummy.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(Pods-Bolts-dummy.o)
duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods_Bolts in:
    Cryptall/Classes/Third Party Libraries/Amazon S3/frameworks/AWSiOSSDKv2.framework/AWSiOSSDKv2(Pods-Bolts-dummy.o)
    Cryptall/Classes/Third Party Libraries/Amazon S3/third-party/Bolts.framework/Bolts(Pods-Bolts-dummy.o)
ld: 212 duplicate symbols for architecture armv7s

【问题讨论】:

【参考方案1】:

此错误消息表示在链接时已在多个框架/目标中找到同名的类。

在这种情况下,它主要抱怨在主 AWSiOSSDKv2.frameworkBolts.framework 中都可以找到 Bolts 框架中的类。

我刚刚下载了适用于 iOS 的 Amazon SDK from here 并对其进行了反编译,它似乎确实包含了 Bolts 类(事实上,乍一看似乎有大部分用于其他第三方框架的类) 在主要的 AWS 开发工具包中。

这确实违背了他们所说的integration documentation here

按照相同的步骤,将位于第三方目录中的以下框架添加到您的项目中。

这是亚马逊如何构建和分发其 SDK 的一个错误。

您现在有两个可能的修复方法:

    从您的项目中删除 third-party 文件夹中的框架。这一切都应该只是工作™ 如上述指南中所述,使用 Cocoapods 安装 AWS 开发工具包。

我建议您联系亚马逊为未来的用户报告此问题。

【讨论】:

感谢您提请我们注意该问题。适用于 iOS 2.0.13 和 2.0.14 的 AWS 移动开发工具包无意中在 AWSiOSSDKv2.framework 中嵌入了第三方库。我们更新了 CocoaPods 的版本,新版本将每个 pod 添加到 Other Linker Flags,这导致在主框架中包含了第三方库。我们已经发布了 2.0.15 来解决这个问题。谢谢, 感谢洋介github.com/aws/aws-sdk-ios/issues/139#issuecomment-71288646 在替换 2.0.15 后开始接收,架构 armv7 的未定义符号:“_OBJC_CLASS_$_FMDatabaseQueue”,引用自:AWSiOSSDKv2 中的 objc-class-ref(AWSKinesisRecorder.o) ld: symbol(s)未找到架构 armv7 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) 您应该发布一个新问题并在此处粘贴链接。 cmets不是回答问题的好地方

以上是关于亚马逊最新的 SDK 与 iOS 集成出现错误的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊网络服务 SDK iOS

无法将亚马逊集成到我的 iOS 应用程序中

亚马逊 MWS API 请求错误

亚马逊多部分上传 api for mac

亚马逊支付与 Javascript 和 PHP 的集成 - PaymentPlanNotSet

亚马逊 Fire TV App 的 VisualOn Sdk 实现