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

如何在Swift应用中连接AWS DynamoDB数据库?

Swift iOS应用对接AWS DynamoDB 实操指引

这个需求完全可以实现,以下是面向新手的可落地操作步骤:

1. 前置准备

  • 提前注册可用的AWS账号,在AWS控制台创建好目标DynamoDB表,同时创建专属IAM角色,只给该角色分配对应DynamoDB表的必要读写权限,不要使用根用户权限操作
  • Xcode版本要求14.0及以上,Swift版本5.7及以上即可适配最新的AWS SDK for Swift

2. 集成AWS SDK到Xcode项目

优先使用Swift Package Manager集成,操作更简便:

  • 打开你的Xcode项目,依次点击 File > Add Packages
  • 搜索官方AWS SDK for Swift稳定版本,添加依赖时勾选 AWSDynamoDB 和 AWSCognitoIdentity 两个产品,后者用于给客户端下发临时访问凭证,避免密钥泄露风险
  • 等待Xcode自动拉取依赖完成即可

3. 初始化AWS客户端配置

重点提醒:绝对不要把AWS访问密钥、秘密密钥硬编码在iOS客户端代码里,打包后容易被反编译泄露,造成资产损失,必须通过Cognito身份池下发临时凭证
示例初始化代码:

import AWSCognitoIdentity
import AWSDynamoDB

// 替换为你自己的Cognito身份池ID和资源对应的AWS区域
let credentialsProvider = AWSCognitoCredentialsProvider(
    regionType: .USEast1,
    identityPoolId: "你的Cognito身份池ID"
)
let configuration = AWSServiceConfiguration(
    region: .USEast1,
    credentialsProvider: credentialsProvider
)
AWSServiceManager.default().defaultServiceConfiguration = configuration

4. 基础操作示例

写入数据到DynamoDB

let dynamoDB = AWSDynamoDB.default()
let putRequest = AWSDynamoDBPutItemInput()
// 替换为你自己创建的DynamoDB表名
putRequest?.tableName = "你的DynamoDB表名"
// 替换为你表内定义的主键和对应字段内容
putRequest?.item = [
    "user_id": AWSDynamoDBAttributeValue.init(s: "test_user_001"),
    "user_name": AWSDynamoDBAttributeValue.init(s: "测试用户"),
    "age": AWSDynamoDBAttributeValue.init(n: "25")
]

dynamoDB.putItem(putRequest!) { result, error in
    if let error = error {
        print("写入失败:\(error.localizedDescription)")
        return
    }
    print("写入成功")
}

查询DynamoDB数据

let queryRequest = AWSDynamoDBGetItemInput()
queryRequest?.tableName = "你的DynamoDB表名"
queryRequest?.key = [
    "user_id": AWSDynamoDBAttributeValue.init(s: "test_user_001")
]

dynamoDB.getItem(queryRequest!) { result, error in
    if let error = error {
        print("查询失败:\(error.localizedDescription)")
        return
    }
    guard let item = result?.item else {
        print("未找到对应数据")
        return
    }
    // 解析返回的字段
    if let userName = item["user_name"]?.s {
        print("查询到的用户名:\(userName)")
    }
    if let age = item["age"]?.n {
        print("查询到的年龄:\(age)")
    }
}

5. 新手常见踩坑提醒

  • 确认Cognito角色对应的权限策略已经添加了DynamoDB表的对应操作权限,比如dynamodb:PutItem、dynamodb:GetItem等你需要用到的操作
  • 代码里填写的AWS区域要和你DynamoDB表实际所在区域完全一致,否则会请求失败
  • 客户端直接操作DynamoDB仅适合低安全级别的非敏感数据,涉及用户隐私、交易类的敏感数据建议走后端服务中转请求,不要直接把数据库暴露给客户端

内容的提问来源于stack exchange,提问作者Andrew Bertram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:12:01