iOS Swift项目Amplify自定义S3存储配置解码错误如何解决
修复方案
错误原因
AWSS3StoragePlugin的插件配置要求传入JSONValue枚举类型值,你当前传入的Swift原生[String: Any]字典无法被配置解码器识别,因此抛出无法解码配置的错误。
修复代码
无需Auth的简化版本(仅用S3存储)
import Amplify import AWSS3StoragePlugin func amplifyConfigure() { do { Amplify.Logging.logLevel = .verbose try Amplify.add(plugin: AWSS3StoragePlugin()) // 所有配置值需转换为对应的JSONValue枚举类型 let s3PluginConfig: [String: JSONValue] = [ "bucket": .string("你的实际bucket名称"), "region": .string("us-west-2"), "defaultAccessLevel": .string("protected") ] let storageConfiguration = StorageCategoryConfiguration( plugins: [ "awsS3StoragePlugin": .object(s3PluginConfig) ] ) let amplifyConfiguration = AmplifyConfiguration(storage: storageConfiguration) try Amplify.configure(amplifyConfiguration) print("Amplify 配置成功") } catch { print("Amplify 配置失败: \(error)") } }
同时使用Auth+存储的完整版本
如果你项目中需要配合Cognito Auth使用,需要同步补充Auth分类的配置:
import Amplify import AWSS3StoragePlugin import AWSCognitoAuthPlugin func amplifyConfigure() { do { Amplify.Logging.logLevel = .verbose try Amplify.add(plugin: AWSCognitoAuthPlugin()) try Amplify.add(plugin: AWSS3StoragePlugin()) // S3存储配置 let s3PluginConfig: [String: JSONValue] = [ "bucket": .string("你的实际bucket名称"), "region": .string("us-west-2"), "defaultAccessLevel": .string("protected") ] let storageConfiguration = StorageCategoryConfiguration( plugins: [ "awsS3StoragePlugin": .object(s3PluginConfig) ] ) // Cognito Auth配置(根据你的实际Auth参数修改) let authPluginConfig: [String: JSONValue] = [ "Default": .object([ "OAuth": .object([ "AppClientId": .string("你的Auth客户端ID"), "Region": .string("us-west-2") // 其余Auth所需配置项按需补充 ]) ]) ] let authConfiguration = AuthCategoryConfiguration(plugins: [ "awsCognitoAuthPlugin": .object(authPluginConfig) ]) // 传入所有分类配置初始化 let amplifyConfiguration = AmplifyConfiguration( auth: authConfiguration, storage: storageConfiguration ) try Amplify.configure(amplifyConfiguration) print("Amplify 配置成功") } catch { print("Amplify 配置失败: \(error)") } }
注意事项
所有配置值需要严格匹配JSONValue枚举类型:字符串用.string()、数字用.number()、布尔值用.boolean()、字典用.object()、数组用.array()、空值用.null。
内容的提问来源于stack exchange,提问作者Gastón Antonio Montes
相关产品推荐
相关产品推荐

