AWSiOSSDKv2 2.36.7

AWSiOSSDKv2 2.36.7

测试已测试
语言语言 Obj-CObjective C
许可证 NOASSERTION
发布上次发布2024 年 8 月

AWS Mobile SDK ToolsAWS Amplify Swift Ops 维护。



  • Amazon Web Services

AWS SDK for iOS

Release CocoaPods Carthage compatible CircleCI Discord

AWS SDK for iOS 为开发者提供了库和文档,用于构建使用 AWS 的连接式移动应用程序。

我们建议使用 Swift 的最新 v2 版本 AWS Amplify 库,以快速实现类似于 Authentication、Storage、Push Notifications 等常用应用程序用例,遵循 Swift 的异步/等待等模式。

注意:Swift Amplify 库的 v2(目前为 GA)基于 AWS SDK for Swift 构建,只提供对目前在开发者预览中的 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 的 Escape Hatch 访问此底层 SDK。

您可以通过 Swift Amplify 库文档 查询所有功能。您还可以使用 AWS Amplify 与 现有的 AWS 云资源。如果您在 Amplify 中找不到所需的功能,请通过 Swift Amplify 库 GitHub 仓库 提交问题,我们将很高兴考虑您的请求。

如果您仍然希望直接使用 AWS SDK for iOS,请参阅 此处 AWS SDK 文档 并遵循以下设置说明。您还可以查看 AWS SDK for iOS 样例应用程序仓库 中的示例应用程序。

设置

要开始使用AWS SDK for iOS,请参阅iOS开发者指南。您可以在新项目中设置SDK并开始构建,或者将其集成到现有项目中。您还可以运行示例以了解SDK是如何工作的。

要在您的开发机器上使用AWS SDK for iOS,您需要以下安装项:

  • Xcode 11.0或更高版本
  • iOS 9或更高版本

将SDK集成到现有iOS应用程序中

我们有一些示例应用程序展示了如何使用AWS SDK for iOS。请注意,这些示例应用程序中的代码不是生产级别的,应被视为我们所说的示例。

有几种方法可以将AWS Mobile SDK for iOS集成到您的项目中

您应该仅使用其中一种方式来导入AWS Mobile SDK。用多种方式导入SDK会导致项目中留下SDK的重复副本,并引起编译器/链接器错误。

注意:如果您正在使用XCFrameworks(即Swift包管理器、Carthage或动态框架),一些模块会以XCF后缀命名,以解决Swift问题AWSMobileClient被命名为AWSMobileClientXCF,而AWSLocation被命名为AWSLocationXCF。要使用AWSMobileClientAWSLocation SDK,按以下方式导入:

import AWSMobileClientXCF
import AWSLocationXCF

并在您的app代码中使用,无需添加XCF后缀。

AWSMobileClient.default().initialize() 
let locationClient = AWSLocation.default()

Swift包管理器

  1. Swift 包管理器与 Xcode 一同分发。要将 AWS SDK 添加到您的 iOS 项目中,请先在 Xcode 中打开项目,然后选择 文件 > Swift Packages > 添加包依赖

    Add package dependency

  2. 在搜索栏中输入 AWS SDK for iOS Swift 包管理器 GitHub 仓库的 URL(《https://github.com/aws-amplify/aws-sdk-ios-spm》),然后单击 下一步

    Search for repo

    注意:此 URL 不是 SDK 的主 URL。我们在此独立仓库中维护该库的 Swift 包管理器清单文件(《Package.swift》),这样使用 SDK 的应用程序就不必下载整个源代码仓库,以便使用二进制目标。

  3. 您将看到需要 Swift 包管理器安装的 SDK 版本的仓库规则。选择第一个规则 版本,并选择 直到下一个次要版本,因为它将使用从 main 分支检测到的最新兼容依赖项版本,然后单击 下一步

    Dependency version options

    注意:AWS Mobile SDK for iOS 并不使用语义版本,可能在次版本发布中引入破坏性 API 更改。我们建议将您的 版本 规则设置为 直到下一个次要版本,并评估次版本发布以确保它们与您的应用程序兼容。

  4. 选择您想要添加到项目的库。始终选择 AWSCore SDK。您要安装的其余 SDK 将取决于您尝试安装的 SDK。大多数 SDK 仅依赖于 AWSCore,但对于完整的依赖关系列表,请参阅 README-spm-support 文件

    注意:由于与打包的二进制依赖的冲突,AWSLex 目前不支持通过 Swift 包管理器提供对 arm64 架构的支持。

    Select dependencies

    选择所有适用项,然后单击 完成

    您可以通过打开项目的 Swift 包选项卡,随时修改项目中的 SPM 包:在 Xcode 导航器中单击项目文件,然后单击项目图标,选择 Swift Packages 选项卡。

CocoaPods

  1. AWS Mobile SDK for iOS 通过 CocoaPods 提供。如果您尚未安装 CocoaPods,请运行以下命令安装 CocoaPods

     $ gem install cocoapods
     $ pod setup
    

    根据您的系统设置,您可能需要使用 sudo 安装 cocoapods,如下所示

     $ sudo gem install cocoapods
     $ pod setup
    
  2. 在您的项目目录中(您的 *.xcodeproj 文件所在的目录),运行以下命令以创建项目中的 Podfile

     $ pod init
    
  3. 编辑 Podfile 以包含您想要集成到项目中的 pods。例如,如果您需要身份验证,则可以使用 AWSMobileClient,如果需要分析则添加 AWSPinpoint。因此,您的 podfile 可能类似于以下内容

target 'YourTarget' do
    pod 'AWSMobileClient'
    pod 'AWSPinpoint'
end

有关我们 pod 的完整列表,请查看此项目根目录下的 .podspec 文件。

  1. 然后运行以下命令

     $ pod install --repo-update
    
  2. 要打开项目,请使用 XCode 打开项目目录中的新生成的 *.xcworkspace 文件。您可以通过在项目文件夹中执行以下命令来完成此操作

     $ xed .
    

    注意:请 务必 使用 *.xcworkspace。如果您打开项目文件而不是工作区,则可能会收到以下错误

     ld: library not found for -lPods-AWSCore
     clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

Carthage

推荐使用 XCFrameworks

Carthage 支持 Xcode 12 或更高版本中的 XCFrameworks。以下步骤用于使用 XCFrameworks 消耗 AWS SDK for iOS:

  1. 安装 Carthage 0.37.0 或更高版本。

  2. 将以下内容添加到您的 Cartfile

     github "aws-amplify/aws-sdk-ios"
    
  3. 然后运行以下命令

     $ carthage update --use-xcframeworks --no-use-binaries
    

截至 Carthage 0.37.0,由于 Carthage 发布说明中提到 - https://github.com/Carthage/Carthage/releases/tag/0.37.0

  1. 在您的应用程序目标的“通用”设置选项卡中,在“嵌入的二进制文件”部分,从磁盘上的 Carthage/Build 文件夹拖放您要使用的每个 xcframework。

不推荐使用“fat libraries”的框架

要为二进制中的多个体系结构构建特定平台的框架捆绑包(Xcode 11 及以下版本)

  1. 安装 Carthage 的最新版本。

  2. 将以下内容添加到您的 Cartfile

     github "aws-amplify/aws-sdk-ios"
    
  3. 然后运行以下命令

     $ carthage update
    
  4. 在 Xcode 中打开您的项目后,选择您的 Target。在 通用 选项卡下,找到 框架、库和嵌入内容,然后单击 + 按钮。

  5. 单击 添加其他... 按钮,然后在弹出菜单中单击“添加文件...”,然后导航到 Carthage > Build > iOS 下的 AWS<#ServiceName#>.framework 文件,并选择它们。如果提示您不要选中 目的:如有需要复制项目 复选框。根据您特定的用例添加所需的框架。例如,如果您使用 AWSMobileClient 和 AWSPinpoint,您将想要添加以下框架

    • AWSAuthCore.framework
    • AWSCognitoIdentityProvider.framework
    • AWSCognitoIdentityProviderASF.framework
    • AWSCore.framework
    • AWSMobileClient.framework
    • AWSPinpoint.framework
  6. 在您的目标中,在构建阶段选项卡下,点击左上角的+按钮,然后选择新运行脚本阶段。然后按照以下方式设置构建阶段。确保此阶段位于嵌入框架阶段下方。

     Shell /bin/sh
     
     bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSCore.framework/strip-frameworks.sh"
     
     Show environment variables in build log: Checked
     Run script only when installing: Not checked
     
     Input Files: Empty
     Output Files: Empty
    

注意:当前,AWS SDK for iOS使用最新发布的Xcode版本构建Carthage的二进制文件。要使用预构建的二进制文件,您的Xcode版本必须相同,否则您必须通过将--no-use-binaries标志传递给carthage update命令在您的机器上构建框架。

框架

XCFramework 配置

从AWS SDK iOS版本2.22.1开始,SDK二进制文件以XCFramework的形式发布。按照以下步骤安装XCFramework。

  1. 下载最新的SDK https://releases.amplify.aws/aws-sdk-ios/latest/aws-ios-sdk.zip。旧版本的SDK可以从https://releases.amplify.aws/aws-sdk-ios/aws-ios-sdk-#.#.#.zip下载,其中#.#.#代表版本号。因此,对于2.23.3版本,下载链接是https://releases.amplify.aws/aws-sdk-ios/aws-ios-sdk-2.23.3.zip

注意1:如果您使用的是版本< 2.22.1,请参阅下面的“旧框架配置”部分。注意2:要下载版本< 2.23.3,请使用此链接 https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip

  1. 解压缩ZIP文件
  2. 在应用程序目标的“常规”设置选项卡中,在“嵌入的二进制文件”部分,从下载的文件夹中拖放您想使用的每个xcframework。

旧框架配置

  1. 使用https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip下载所需的SDK,其中#.#.#代表版本号。因此,对于2.10.2版本,下载链接是https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-2.10.2.zip

注意:如果您使用的是版本> 2.22.0,请参阅上面的“XCFramework配置”部分。

  1. 在Xcode中打开您的项目,选择您的目标。在通用选项卡下,找到嵌入的二进制文件,然后点击+按钮。

  2. 点击添加其他...按钮,导航到AWS<#ServiceName#>.framework文件并选择它们。在选择提示时,勾选目的地:如果需要,则复制项复选框。为您特定的用例添加所需的框架。例如,如果您正在使用AWSMobileClient和AWSPinpoint,您希望添加以下框架

    • AWSAuthCore.framework
    • AWSCognitoIdentityProvider.framework
    • AWSCognitoIdentityProviderASF.framework
    • AWSCore.framework
    • AWSMobileClient.framework
    • AWSPinpoint.framework
  3. 在您的目标中,在构建阶段选项卡下,点击左上角的+按钮,然后选择新运行脚本阶段。然后按照以下方式设置构建阶段。确保此阶段位于嵌入框架阶段下方。

     Shell /bin/sh
     
     bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSCore.framework/strip-frameworks.sh"
     
     Show environment variables in build log: Checked
     Run script only when installing: Not checked
     
     Input Files: Empty
     Output Files: Empty
    

更新SDK到新版本

当我们发布SDK的新版本时,您可以按照以下方式获取更改。

CocoaPods

  1. 在项目目录中运行以下命令。CocoaPods将自动获取新更改。

     $ pod update
    

    注意:如果您的pod存在问题,您可以删除Podfile.lockPods/,然后运行pod install以干净地安装SDK。

    image

Carthage

  1. 在项目目录中运行以下命令。Carthage将自动获取新更改。

     $ carthage update
    

框架

  1. 在Xcode的项目导航器中,输入"AWS"以找到您手动添加到项目的AWS框架或XCFrameworks。选择所有AWS框架,然后按键盘上的删除键。然后选择移动到垃圾箱

  2. 按照上述安装流程包括新版 SDK。

Swift 快速入门

  1. 在应用程序代理中导入 AWSCore 头文件。

    import AWSCore
  2. 通过在 application:didFinishLaunchingWithOptions: 应用程序代理方法中添加以下代码片段来创建默认服务配置。

    let credentialsProvider = AWSCognitoCredentialsProvider(
        regionType: CognitoRegionType,
        identityPoolId: CognitoIdentityPoolId)
    let configuration = AWSServiceConfiguration(
        region: DefaultServiceRegionType,
        credentialsProvider: credentialsProvider)
    AWSServiceManager.default().defaultServiceConfiguration = configuration
  3. 在你想要使用 SDK 的 Swift 文件中,导入你所使用服务的相应头文件。头文件导入约定是 import AWSServiceName,如下面的示例所示

    import AWSS3
    import AWSDynamoDB
    import AWSSQS
    import AWSSNS
  4. 调用 AWS 服务。

    let dynamoDB = AWSDynamoDB.default()
    let listTableInput = AWSDynamoDBListTablesInput()
    dynamoDB.listTables(listTableInput!).continueWith { (task:AWSTask<AWSDynamoDBListTablesOutput>) -> Any? in
        if let error = task.error as? NSError {
        print("Error occurred: \(error)")
            return nil
        }
    
        let listTablesOutput = task.result
    
        for tableName in listTablesOutput!.tableNames! {
            print("\(tableName)")
        }
    
        return nil
    }

注意:大多数服务客户端类都有一个单例方法来获取默认客户端。命名约定是 + defaultSERVICENAME(例如,上述代码片段中的 + defaultDynamoDB)。这个单例方法使用你在第 5 步中设置的 defaultServiceConfiguration 创建服务客户端,并保持对客户端的强引用。

Objective-C 快速入门

  1. 在应用程序代理中导入 AWSCore 头文件。

    @import AWSCore;
  2. 通过在 application:didFinishLaunchingWithOptions: 应用程序代理方法中添加以下代码片段来创建默认服务配置。

    AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:CognitoRegionType
                                                                                                    identityPoolId:CognitoIdentityPoolId];
    AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:DefaultServiceRegionType
                                                                         credentialsProvider:credentialsProvider];
    AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
  3. 导入你所使用服务的相应头文件。头文件导入约定是 @import AWSServiceName;,如下面的示例所示

    @import AWSS3;
    @import AWSDynamoDB;
    @import AWSSQS;
    @import AWSSNS;
  4. 调用 AWS 服务。

    AWSSNS *sns = [AWSSNS defaultSNS];
    AWSSNSListTopicsInput *listTopicsInput = [AWSSNSListTopicsInput new];
    [[sns listTopics:listTopicsInput] continueWithBlock:^id(AWSTask *task) {
        // Do something with the response
        return nil;
    }];

注意:大多数服务客户端类都有一个单例方法来获取默认客户端。命名约定是 + defaultSERVICENAME(例如,上述代码片段中的 + defaultS3SNS)。这个单例方法使用你在第 5 步中设置的 defaultServiceConfiguration 创建服务客户端,并保持对客户端的强引用。

与 AWSTask 一起工作

SDK 在执行异步操作时会返回 AWSTask 对象,以避免阻塞 UI 线程。

AWSTask类是Bolts框架中BFTask的改名字符串版本。关于Bolts的完整文档,请参阅Bolts-iOS仓库

日志记录

截至本SDK的2.5.4版本,日志记录使用了CocoaLumberjack,这是一个灵活、快速的日志框架。它支持许多功能,包括为输出目标设置不同的日志级别,例如将简短信息记录到控制台,将详细信息记录到日志文件。

CocoaLumberjack日志级别是累加的,因此当级别设置为详细级别时,低于详细级别的所有消息都将被记录。您还可以设置自定义日志以满足您的需求。有关更多信息,请参阅CocoaLumberjack

更改日志级别

Swift

AWSDDLog.sharedInstance.logLevel = .verbose

以下是一些日志级别选项

  • .关闭
  • .错误
  • .警告
  • .信息
  • .调试
  • .详细

Objective-C

[AWSDDLog sharedInstance].logLevel = AWSDDLogLevelVerbose;

以下是一些日志级别选项

  • AWSDDLogLevelOff
  • AWSDDLogLevelError
  • AWSDDLogLevelWarning
  • AWSDDLogLevelInfo
  • AWSDDLogLevelDebug
  • AWSDDLogLevelVerbose

我们建议在发布到苹果应用商店之前将日志级别设置为关闭

针对日志输出目标

CocoaLumberjack可以将日志直接导向文件,或者作为与Xcode控制台集成的框架。

要初始化对文件的日志记录,使用以下代码

Swift

let fileLogger: AWSDDFileLogger = AWSDDFileLogger() // File Logger
fileLogger.rollingFrequency = TimeInterval(60*60*24)  // 24 hours
fileLogger.logFileManager.maximumNumberOfLogFiles = 7
AWSDDLog.add(fileLogger)

Objective-C

AWSDDFileLogger *fileLogger = [[AWSDDFileLogger alloc] init]; // File Logger
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[AWSDDLog addLogger:fileLogger];

要初始化对Xcode控制台的日志记录,使用以下代码

Swift

AWSDDLog.add(AWSDDTTYLogger.sharedInstance) // TTY = Xcode console

Objective-C

[AWSDDLog addLogger:[AWSDDTTYLogger sharedInstance]]; // TTY = Xcode console

开源贡献

我们欢迎社区中的任何贡献!在提交任何PR之前,请确保阅读我们的贡献指南此处。谢谢!<3

与我们交流

访问我们的GitHub 问题 页面,留下反馈并与SDK用户建立联系。

作者

Amazon Web Services

许可

更多信息请参阅 LICENSE 文件。