【问题标题】:AWSS3 Region / plist configuration issue 'The service configuration is `nil`AWSS3 区域/plist 配置问题'服务配置为 `nil`
【发布时间】:2017-07-10 04:00:25
【问题描述】:

我在使用 AWSS3 时遇到了一个奇怪的问题。

设置:

  • AWS 移动集线器
  • 认知
  • DynamoDB
  • S3

--> Cognito、Dynamo 甚至 S3(通过 cognito 用户数据)都可以工作。

但是我现在尝试使用以下代码直接连接到 AWS3:"

let transferManager = AWSS3TransferManager.default()
                            let uploadRequest = AWSS3TransferManagerUploadRequest()
                            uploadRequest?.bucket = "XXXXXXXXXXXX"
                            uploadRequest?.key = "user-data/" + awsId! + "/primary_profile_picture.png"
                            uploadRequest?.body = imgUrl as URL

                            transferManager.upload(uploadRequest!).continueWith(executor: AWSExecutor.mainThread(), block: { (task:AWSTask<AnyObject>) -> Any? in

                                if let error = task.error as? NSError {
                                    if error.domain == AWSS3TransferManagerErrorDomain, let code = AWSS3TransferManagerErrorType(rawValue: error.code) {
                                        switch code {
                                        case .cancelled, .paused:
                                            break
                                        default:
                                            print("Error uploading: \(uploadRequest?.key) Error: \(error)")
                                        }
                                    } else {
                                        print("Error uploading: \(uploadRequest?.key) Error: \(error)")
                                    }
                                    return nil
                                }

                                let uploadOutput = task.result
                                print("Upload complete for: \(uploadRequest?.key)")
                                return nil
                            })

我得到了错误:

AWSiOSSDK v2.5.1 [Debug] AWSInfo.m line:122 | -[AWSServiceInfo initWithInfoDictionary:checkRegion:] | Couldn't read the region configuration from Info.plist for the client. Please check your `Info.plist` if you are providing the SDK configuration values through `Info.plist`.
2017-02-20 19:29:21.748997 [2210:1152801] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'The service configuration is `nil`. You need to configure `Info.plist` or set `defaultServiceConfiguration` before using this method.'

我正在使用从 AWS Mobiel HUB 下载的 plist 配置,因此对它不起作用(就像所有其他组件一样)有点惊讶。

任何想法可能是什么问题? plist 实际上包含存储桶 ID 和区域。

【问题讨论】:

    标签: ios swift amazon-web-services amazon-s3


    【解决方案1】:

    对我来说,在上传之前,我必须使用以下代码配置凭据:

    let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1,identityPoolId:PoolID)
    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider)
    
    AWSServiceManager.default().defaultServiceConfiguration = configuration
    

    PoolID 是我的 Cognito 身份。我希望这对其他人有所帮助。

    【讨论】:

    • 我真的很讨厌 AWS 文档,现在感谢两年后的帮助。
    【解决方案2】:

    您的 info.plist 需要在其中包含 S3TransferManager。

    所以,**AWS -&gt; S3TransferManager -&gt; Default -&gt; Region -&gt; ...**

    你可以找到一个here的例子

    【讨论】:

    • 完美,谢谢 :) 上传仍然无法正常工作,但至少有一个新问题:P
    • 我也遇到了同样的问题,但我找不到解决方法。
    • 是否可以在 S3TransferManager 下列出不同的区域作为故障转移?
    【解决方案3】:

    Swift 3 - Xcode 8.3.3

    对于仍然遇到此问题的人,我只花了 3 小时来解决这个烦人的设置问题。

    我在我的 Info.plist 中添加了这两个块(替换第二个块中 ** ** 之间的变量),现在它又可以工作了。

    我认为亚马逊的文档没有正确更新。我希望这可以为一些人节省一些时间。

    <key>NSAppTransportSecurity</key>
        <dict>
            <key>NSAllowsArbitraryLoads</key>
            <true/>
            <key>NSExceptionDomains</key>
            <dict>
                <key>amazonaws.com</key>
                <dict>
                    <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                    <string>TLSv1.0</string>
                    <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                    <false/>
                    <key>NSIncludesSubdomains</key>
                    <true/>
                </dict>
                <key>amazonaws.com.cn</key>
                <dict>
                    <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                    <string>TLSv1.0</string>
                    <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                    <false/>
                    <key>NSIncludesSubdomains</key>
                    <true/>
                </dict>
            </dict>
        </dict>
    

    和:

    <key>AWS</key>
        <dict>
            <key>CredentialsProvider</key>
            <dict>
                <key>CognitoIdentity</key>
                <dict>
                    <key>Default</key>
                    <dict>
                        <key>PoolId</key>
                        <string>**YourCognitoIdentityPoolId**</string>
                        <key>Region</key>
                        <string>**AWSRegionUnknown**</string>
                    </dict>
                </dict>
            </dict>
            <key>S3TransferManager</key>
            <dict>
                <key>Default</key>
                <dict>
                    <key>Region</key>
                    <string>**AWSRegionUnknown**</string>
                </dict>
            </dict>
        </dict>
    

    【讨论】:

    • 在哪里可以找到“CognitoIdentityPoolId”?
    【解决方案4】:

    我有同样的问题,而不是 S3TransferManager 你应该放 DynamoDBObjectMapper

    例如..

    <key>DynamoDBObjectMapper</key>
        <dict>
            <key>Default</key>
            <dict>
                <key>Region</key>
                <string>us-east-1</string>
            </dict>
        </dict>
    

    【讨论】:

      【解决方案5】:

      问题是,区域应该是:

      us-east-1
      

      代替; US_EAST_1

      【讨论】:

        【解决方案6】:

        使用数据添加服务配置文件

        如果上述标记的解决方案在某些情况下不起作用。请尝试以下解决方案。

        正如错误所说,服务配置文件为零。因此,我们需要使用以下数据添加 awsconfiguration.json 文件。

        {
          "Version": "1.0",
          "IdentityManager": {
            "Default": {}
          },
        "CredentialsProvider": {
          "CognitoIdentity": {
            "Default": {
              "PoolId": "REPLACE_ME",
              "Region": "REPLACE_ME"
            }
          }
        },
          "S3TransferUtility": {
            "Default": {
              "Bucket": "REPLACE_ME",
              "Region": "REPLACE_ME"
            }
          }
        }
        

        替换项目的bucket、region、poolId。

        【讨论】:

          猜你喜欢
          • 2018-04-11
          • 1970-01-01
          • 1970-01-01
          • 2011-08-14
          • 2010-10-19
          • 1970-01-01
          • 2011-04-07
          • 2011-02-04
          • 1970-01-01
          相关资源
          最近更新 更多