3

我已经开始使用 AWSMobileHub,我只是在完成集成步骤,但它似乎不能很好地与我打算在项目中使用的 cocoapods 配合使用。

我已经按照集成步骤添加了从 aws + 帮助代码下载的框架。

AWS 框架

我已经将它们添加为嵌入式框架,就像这样

在此处输入图像描述

在此处输入图像描述

这编译并运行良好

然后我使用 pod init 将 cocoapods 添加到项目中,使用以下内容编辑 podfile 并创建工作区。

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '9.0'

use_frameworks!

target 'ProjectName' do
project 'ProjectName'

pod 'Fabric'
pod 'Crashlytics'

end

接下来是 pod install ,它添加了我添加到 podfile 的任何框架。

但是现在当我编译时出现以下错误。

Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_AWSS3PreSignedURLBuilder", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSContentManager.o)
"_OBJC_CLASS_$_AWSS3ListObjectsOutput", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSContentManager.o)
"_OBJC_CLASS_$_AWSS3GetPreSignedURLRequest", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSContentManager.o)
"_OBJC_CLASS_$_AWSS3", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSContentManager.o)
 (maybe you meant: _OBJC_CLASS_$_AWSS3ContentProvider)
"_OBJC_CLASS_$_FBSDKLoginManager", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSFacebookSignInProvider.o)
"_OBJC_CLASS_$_AWSLambdaInvoker", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSCloudLogic.o)
"_OBJC_CLASS_$_AWSSNSGetEndpointAttributesInput", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSPushManager.o)
"_OBJC_CLASS_$_FBSDKApplicationDelegate", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSFacebookSignInProvider.o)
"_OBJC_CLASS_$_AWSSNSSubscribeInput", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSPushManager.o)
"_OBJC_CLASS_$_GIDSignIn", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSGoogleSignInProvider.o)
"_OBJC_CLASS_$_AWSSNSSetEndpointAttributesInput", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSPushManager.o)
"_OBJC_CLASS_$_FBSDKAccessToken", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSFacebookSignInProvider.o)
"_OBJC_CLASS_$_AWSSNS", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSPushManager.o)
"_OBJC_CLASS_$_FBSDKGraphRequest", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSFacebookSignInProvider.o)
"_OBJC_CLASS_$_AWSS3ListObjectsRequest", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSContentManager.o)
"_OBJC_CLASS_$_AWSSNSCreatePlatformEndpointInput", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSPushManager.o)
"_OBJC_CLASS_$_AWSSNSUnsubscribeInput", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSPushManager.o)
"_AWSSNSErrorDomain", referenced from:
  ___88-[AWSPushManager interceptApplication:didRegisterForRemoteNotificationsWithDeviceToken:]_block_invoke.237 in AWSMobileHubHelper(AWSPushManager.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果我删除嵌入式框架并将它们添加到 podfile

pod 'AWSCognitoIdentityProvider'
pod 'AWSCore'

我得到同样的错误。

这是我用于调试构建的其他链接器标志

//:configuration = Debug
OTHER_LDFLAGS = $(inherited) -l"c++" 
-l"sqlite3" 
-l"stdc++" 
-l"z" 
-framework "AVFoundation" 
-framework "AWSCognitoIdentityProvider" 
-framework "AWSCore" 
-framework "AddressBook" 
-framework "AssetsLibrary" 
-framework "CFNetwork" 
-framework "CoreFoundation" 
-framework "CoreGraphics" 
-framework "CoreLocation" 
-framework "CoreMedia" 
-framework "CoreMotion" 
-framework "CoreText" 
-framework "CoreVideo" 
-framework "MessageUI" 
-framework "QuartzCore" 
-framework "SafariServices" 
-framework "Security" 
-framework "StoreKit" 
-framework "SystemConfiguration" 
-framework "UIKit"

//:completeSettings = none

编辑:看起来它允许在一些框架中添加 cocoapods 很好

当框架需要将 -ObjC 添加到其他链接器标志时,似乎会出现问题

OTHER_LDFLAGS = $(inherited) -ObjC -l"z" -framework "AFNetworking" -framework "AWSCognitoIdentityProvider" -framework "AWSCore" -framework "Bolts" -framework "CFNetwork" -framework "CoreGraphics" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "PureLayout" -framework "QuartzCore" -framework "Reveal"

以上是在 pod.debug.xcconfig 文件中

当我添加以下内容时,使用 aws 编译正常

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'PureLayout'
pod 'AFNetworking', '3.1.0'

作为例子

但是,如果我添加以下内容,它会添加 -ObjC 并导致所有错误

pod 'Reveal-iOS-SDK', :configurations => ['Debug']

任何想法我应该在这里做些什么来让这些框架一起玩?

如果我尝试将显示作为 pod 文件添加到 AWSMobileHub“MySampleApp”附带的示例应用程序中,也会发生同样的情况

编辑 2:当我删除包含 AWSMobileHubHelper.framework 的 AMazonAws 文件夹并仅使用从 cocoapods 添加的 aws 文件进行编译时,它工作正常。添加 AmazonAws 文件夹时似乎会出现此问题。

4

3 回答 3

2

我通过转到 Pod 文件 pod-projectname.debug.xcconfig 并从 OTHER_LDFLAGS 中删除 -ObjC 解决了上述问题。

我不知道这个标志的作用,我仍在研究它,但至少现在它让我编译和运行我的项目。如果有人对此有更多信息,我会全力以赴。

编辑 - 好的,请不要这样做。它会导致其他错误。例如,我添加了一个名为 Intercom 的 pod,它需要 -ObjC 标志。它编译得很好,但稍后会在运行时崩溃。

我已将此错误记录到亚马逊,并且我有一位支持工程师正在查看此问题。与此同时,我已经完全删除了 Helper 框架,我直接使用其他 aws 框架并使用 pod 添加它们。

如果我从亚马逊支持那里听到任何有用的信息,我会在这里更新。

于 2017-03-05T19:30:19.483 回答
1

-ObjCpod-projectname.debug.xcconfig文件中删除不会解决此问题,也不是解决问题的正确方法。请不要这样做!Pods 脚本故意添加它。

修复它的正确方法是表面上:只需阅读 Xcode 提供的错误描述:

Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_AWSS3PreSignedURLBuilder", referenced from:
  objc-class-ref in AWSMobileHubHelper(AWSContentManager.o)

这意味着 AWSMobileHubHelper 的类AWSContentManager具有依赖关系并调用AWSS3PreSignedURLBuilder对象方法。您需要了解它是什么AWSS3PreSignedURLBuilder以及如何将其添加到您的项目中。

最简单的方法是在 Github 上搜索它。我们发现这AWSS3PreSignedURLBuilderAWSS3框架的一部分。因此,添加pod 'AWSS3'到您的 podfile 并修复错误。

对链接器错误消息中的每个未定义符号重复此操作,您将能够成功构建项目。

在您的情况下,您似乎需要添加AWS-SDK-iOS 的pod 和 pod

pod 'GoogleSignIn'
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

注意添加 pod - 它可能需要特定版本的 pod 来支持您的目标 iOS 版本和 Swift 版本(阅读 pod 提供的自述文件)。例如:

pod 'GoogleSignIn', '~> 4.1'
pod 'FBSDKCoreKit', '~> 4.17.0'
pod 'FBSDKLoginKit', '~> 4.17.0'
pod 'FBSDKShareKit', '~> 4.17.0'
于 2018-04-25T16:31:10.360 回答
-1

好吧,我不知道为什么,但似乎删除文件-ObjC中的pod-projectname.debug.xcconfig解决了问题。

我不Pods用于其他事情,除了AWS. AWS Frameworks我只是根据文档静态链接。

于 2017-05-25T07:49:16.647 回答