You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:15:07