在 iOS 中使用没有 `awsconfiguration.json` 的 AWSMobileClient
Use AWSMobileClient without `awsconfiguration.json`in iOS
我想验证 iOS 设备以通过 Cognito 用户池使用 AppSync/S3 服务。 AWSMobileClient provides some nice conveniences but the initialization 要求您的捆绑包有一个 awsconfiguration.json
文件——我们的应用程序将动态定义该文件。有没有办法手动配置?
当前的解决方案是使用 CLI 中的多环境工作流。
https://aws-amplify.github.io/docs/cli/multienv?sdk=ios
编辑
如果 Amplify 团队的多环境工作流不适合您,您可以创建配置的调试和生产版本,然后创建一个构建阶段,根据您的配置复制正确的版本构建设置(调试与发布等)。这对我的一个项目非常有效。
#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
从 AWS iOS SDK 2.11.0(2019 年 9 月 9 日)开始,现在可以在没有 awsconfiguration.json
文件的情况下进行配置。
它甚至记录在放大文档中 here
另见我的answer to a related question
具体解决方法如下:
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 ... }
我想验证 iOS 设备以通过 Cognito 用户池使用 AppSync/S3 服务。 AWSMobileClient provides some nice conveniences but the initialization 要求您的捆绑包有一个 awsconfiguration.json
文件——我们的应用程序将动态定义该文件。有没有办法手动配置?
当前的解决方案是使用 CLI 中的多环境工作流。 https://aws-amplify.github.io/docs/cli/multienv?sdk=ios
编辑
如果 Amplify 团队的多环境工作流不适合您,您可以创建配置的调试和生产版本,然后创建一个构建阶段,根据您的配置复制正确的版本构建设置(调试与发布等)。这对我的一个项目非常有效。
#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
从 AWS iOS SDK 2.11.0(2019 年 9 月 9 日)开始,现在可以在没有 awsconfiguration.json
文件的情况下进行配置。
它甚至记录在放大文档中 here
另见我的answer to a related question
具体解决方法如下:
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 ... }