awsmobilehub 和 cocoapods 集成
awsmobilehub and cocoapods integration
我已经开始使用 AWSMobileHub,我只是在完成集成步骤,但它似乎不能很好地与我打算在项目中使用的 cocoapods 一起使用。
我已经按照集成步骤添加了我从 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']
有什么想法可以让这些框架协同工作吗?
如果我尝试将 reveal 作为 pod 文件添加到 AWSMobileHub 附带的示例应用程序中,也会发生同样的情况 "MySampleApp"
编辑2:
当我删除包含 AWSMobileHubHelper.framework 的 AMazonAws 文件夹并仅使用从 cocoapods 添加的 aws 文件进行编译时,它工作正常。添加 AmazonAws 文件夹时似乎会出现此问题。
我通过转到 Pod 文件 pod-projectname.debug.xcconfig 并从 OTHER_LDFLAGS.
中删除 -ObjC 解决了上面的问题
我不知道这个标志的作用,我仍在研究它,但至少现在它让我编译和 运行 我的项目。如果有人对此有更多信息,我会洗耳恭听。
编辑 - 好的,请不要这样做。它会导致其他错误。例如,我正在添加一个名为 Intercom 的 pod,它需要 -ObjC 标志。它在没有的情况下编译得很好,但稍后会在 运行ning 时崩溃。
我已将此错误记录到亚马逊,并且我有一名支持工程师正在处理此问题。与此同时,我完全删除了 Helper 框架,我直接使用其他 aws 框架并使用 pods.
添加它们
如果我从亚马逊支持那里收到任何有用的信息,我会在这里更新。
嗯,我不知道为什么,但似乎删除 pod-projectname.debug.xcconfig
文件中的 -ObjC
可以解决问题。
除了 AWS
,我没有将 Pods
用于其他用途。我只是根据文档静态链接 AWS Frameworks
。
删除 pod-projectname.debug.xcconfig
文件中的 -ObjC
不会 解决此问题并且 方法不正确 修理它。请不要这样做! Pods 脚本故意添加它。
正确的修复方法是表面上的:只需阅读Xcode提供的错误描述:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_AWSS3PreSignedURLBuilder", referenced from:
objc-class-ref in AWSMobileHubHelper(AWSContentManager.o)
这意味着 AWSMobileHubHelper 的 class AWSContentManager
具有依赖项并调用 AWSS3PreSignedURLBuilder
对象方法。
您需要了解什么是 AWSS3PreSignedURLBuilder
以及如何将其添加到您的项目中。
最简单的方法是在 Github 上搜索它。
我们发现 AWSS3PreSignedURLBuilder
是 AWSS3
框架的一部分。所以将 pod 'AWSS3'
添加到您的 podfile 并修复错误。
对链接器错误消息中的每个未定义符号重复此操作,您将能够成功构建项目。
在您的情况下,您似乎需要添加 pods of AWS-SDK-iOS 和 pods
pod 'GoogleSignIn'
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'
注意添加 pods - 它可能需要特定版本的 pod 来支持您的目标 iOS 版本和 Swift 版本(阅读 pod 提供的 README)。
例如:
pod 'GoogleSignIn', '~> 4.1'
pod 'FBSDKCoreKit', '~> 4.17.0'
pod 'FBSDKLoginKit', '~> 4.17.0'
pod 'FBSDKShareKit', '~> 4.17.0'
我已经开始使用 AWSMobileHub,我只是在完成集成步骤,但它似乎不能很好地与我打算在项目中使用的 cocoapods 一起使用。
我已经按照集成步骤添加了我从 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']
有什么想法可以让这些框架协同工作吗?
如果我尝试将 reveal 作为 pod 文件添加到 AWSMobileHub 附带的示例应用程序中,也会发生同样的情况 "MySampleApp"
编辑2: 当我删除包含 AWSMobileHubHelper.framework 的 AMazonAws 文件夹并仅使用从 cocoapods 添加的 aws 文件进行编译时,它工作正常。添加 AmazonAws 文件夹时似乎会出现此问题。
我通过转到 Pod 文件 pod-projectname.debug.xcconfig 并从 OTHER_LDFLAGS.
中删除 -ObjC 解决了上面的问题我不知道这个标志的作用,我仍在研究它,但至少现在它让我编译和 运行 我的项目。如果有人对此有更多信息,我会洗耳恭听。
编辑 - 好的,请不要这样做。它会导致其他错误。例如,我正在添加一个名为 Intercom 的 pod,它需要 -ObjC 标志。它在没有的情况下编译得很好,但稍后会在 运行ning 时崩溃。
我已将此错误记录到亚马逊,并且我有一名支持工程师正在处理此问题。与此同时,我完全删除了 Helper 框架,我直接使用其他 aws 框架并使用 pods.
添加它们如果我从亚马逊支持那里收到任何有用的信息,我会在这里更新。
嗯,我不知道为什么,但似乎删除 pod-projectname.debug.xcconfig
文件中的 -ObjC
可以解决问题。
除了 AWS
,我没有将 Pods
用于其他用途。我只是根据文档静态链接 AWS Frameworks
。
删除 pod-projectname.debug.xcconfig
文件中的 -ObjC
不会 解决此问题并且 方法不正确 修理它。请不要这样做! Pods 脚本故意添加它。
正确的修复方法是表面上的:只需阅读Xcode提供的错误描述:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_AWSS3PreSignedURLBuilder", referenced from:
objc-class-ref in AWSMobileHubHelper(AWSContentManager.o)
这意味着 AWSMobileHubHelper 的 class AWSContentManager
具有依赖项并调用 AWSS3PreSignedURLBuilder
对象方法。
您需要了解什么是 AWSS3PreSignedURLBuilder
以及如何将其添加到您的项目中。
最简单的方法是在 Github 上搜索它。
我们发现 AWSS3PreSignedURLBuilder
是 AWSS3
框架的一部分。所以将 pod 'AWSS3'
添加到您的 podfile 并修复错误。
对链接器错误消息中的每个未定义符号重复此操作,您将能够成功构建项目。
在您的情况下,您似乎需要添加 pods of AWS-SDK-iOS 和 pods
pod 'GoogleSignIn'
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'
注意添加 pods - 它可能需要特定版本的 pod 来支持您的目标 iOS 版本和 Swift 版本(阅读 pod 提供的 README)。 例如:
pod 'GoogleSignIn', '~> 4.1'
pod 'FBSDKCoreKit', '~> 4.17.0'
pod 'FBSDKLoginKit', '~> 4.17.0'
pod 'FBSDKShareKit', '~> 4.17.0'