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

iOS 18 Beta版使用Amplify调用S3 API时出现访问拒绝问题

解决iOS 18 Beta下Amplify S3图片上传权限异常问题

问题概述

仅在iOS 18 Beta设备上使用Amplify插件上传图片至AWS S3时出现StorageAccessDeniedException,底层关联UnknownSmithyHttpException,iOS 18之前版本及其他平台正常。当前环境:Flutter 3.24.2,amplify_flutter: ^2.4.1,amplify_auth_cognito: ^2.4.1,amplify_storage_s3: ^2.4.1。

排查与解决步骤

1. 升级Amplify依赖包到最新兼容版本

iOS 18 Beta属于系统预览版,旧版Amplify包可能未适配其新特性。将相关Amplify包升级至pub.dev上的最新稳定版,修改pubspec.yaml后执行flutter pub get:

amplify_flutter: ^latest_version
amplify_auth_cognito: ^latest_version
amplify_storage_s3: ^latest_version

2. 验证iOS 18权限配置

iOS 18对权限机制可能有更新,检查Info.plist中以下配置是否齐全:

  • 媒体访问权限:确保添加NSPhotoLibraryAddUsageDescription和NSPhotoLibraryUsageDescription,明确描述应用需要访问相册的原因
  • 网络权限:若涉及非HTTPS资源(AWS S3默认使用HTTPS,此步可忽略),添加NSAppTransportSecurity的例外配置

3. 确认Cognito身份池与S3权限配置

  • 检查Cognito身份池关联的IAM角色是否拥有S3上传必要权限,确保包含s3:PutObject、s3:PutObjectAcl等权限
  • 验证Amplify Auth配置中的region、userPoolId、identityPoolId等参数是否正确,无拼写或配置错误

4. 捕获更详细的错误日志

启用Amplify verbose日志模式,或在错误捕获逻辑中解析底层异常细节,帮助定位问题:

// 启用详细日志
void initAmplify() async {
  Amplify.Logging.logLevel = LogLevel.verbose;
  // 初始化Amplify的其他代码
}

// 上传时的错误捕获
try {
  final uploadResult = await Amplify.Storage.uploadFile(
    localFile: AWSFile.fromPath('your-image-path.jpg'),
    key: 'target-s3-key.jpg',
  );
} on StorageAccessDeniedException catch (e) {
  print('权限错误详情: ${e.message}');
  print('底层异常: ${e.underlyingException}');
  // 尝试解析Smithy异常的更多信息
  if (e.underlyingException is SmithyException) {
    final smithyErr = e.underlyingException as SmithyException;
    print('Smithy错误码: ${smithyErr.code}');
    print('错误详情: ${smithyErr.details}');
  }
}

5. 验证HTTP/TLS协议兼容性

iOS 18可能对TLS版本或HTTP协议有新要求,确认AWS S3 endpoint支持TLS 1.2及以上版本,Amplify插件默认使用的协议符合系统要求。

内容的提问来源于stack exchange,提问作者Suraj Tiwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:30:59