在iOS中使用没有`awsconfiguration.json`的AWSMobileClient

时间:2018-12-31 18:09:31

标签: ios aws-amplify

我想验证iOS设备以通过Cognito用户池使用AppSync / S3服务。 AWSMobileClient提供了一些便利,但是the initialization要求您捆绑有一个awsconfiguration.json文件-我们的应用程序将动态定义该文件。有没有办法手动配置?

3 个答案:

答案 0 :(得分:0)

当前的解决方案是使用CLI中的多环境工作流程。 https://aws-amplify.github.io/docs/cli/multienv?sdk=ios


编辑

如果Amplify团队的多环境工作流程不适合您,您可以做的是创建配置的调试和生产版本,然后创建一个构建阶段,该阶段根据您的构建设置复制正确的版本(调试与发布等)。这对我的一个项目来说效果非常好。

Config files

Build phases

#export; #Prints list of all xcode variables with values
printf "$CONFIGURATION\n";

if [ "$CONFIGURATION" = "Debug" ]; then
printf "creating debug configuration";
cp -r "$PROJECT_DIR/awsconfiguration-debug.json" "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/awsconfiguration.json"
else 
printf "creating production configuration";
cp -r "$PROJECT_DIR/awsconfiguration-prod.json" "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/awsconfiguration.json"
fi

答案 1 :(得分:0)

从AWS iOS SDK 2.11.0开始(9月9日),现在可以在没有awsconfiguration.json文件的情况下进行配置。

甚至在放大文档here

中也有记录

另请参阅我的answerrelated question

答案 2 :(得分:0)

这是一个具体的解决方案:

extension AWSMobileClient {
    convenience init?(configuration url: URL) {
        guard let data = try? Data(contentsOf: url) else { return nil }
        guard let dict = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any] else { return nil }

        self.init(configuration: dict)
    }

    convenience init?(configuration name: String) {
        guard let url = Bundle.main.url(forResource: name, withExtension: "json") else {
            return nil
        }

        print("INITIALIZING AWSMobileClient [\(name)]")
        self.init(configuration: url)
    }
}

要使用它,您可以根据需要拥有任意数量的awsconfiguration-XXX.json文件,并在运行时使用所需的文件进行初始化:

let mobileClient = AWSMobileClient(configuration: "awsconfiguration-XXX")
mobileClient.initialize { (userState, error) in ... }