AWSIoT 2.36.7

AWSIoT 2.36.7

测试已测试
语言语言 Obj-CObjective C
许可协议 无声明
发布最新发布2024年8月

AWS Mobile SDK ToolsAWS Amplify Swift Ops 维护。



AWSIoT 2.36.7

  • Amazon Web Services

AWS SDK for iOS

Release CocoaPods Carthage compatible CircleCI Discord

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

我们建议使用 AWS Amplify Library for Swift 的最新版本 v2,以便快速实现像身份验证、存储、推送通知等常用应用场景,该库遵循 Swift 的 craftsmanship 语言模式,如 async/await。

注意:Swift 的 Amplify Library 版本 2(目前为 GA)建立在 AWS SDK for Swift 的基础上,并且仅提供对当前开发者预览的 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 中的 Escape Hatch 访问此基础 SDK。

您可以通过 Swift Amplify Library 文档 了解所有功能,您还可以使用 AWS Amplify 与 现有的 AWS 云资源。如果无法在 Amplify 中找到所需功能,请向 Swift Amplify Library 的 GitHub 仓库 提交问题,我们将乐意考虑您的请求。

如果您仍然希望直接使用 AWS SDK for iOS,您可以通过 此处 AWS SDK 文档 了解详细信息,并按照以下设置说明进行操作。您还可以查看 AWS SDK for iOS 示例仓库 中的示例应用程序。

设置

要开始使用 AWS SDK for iOS,请参阅iOS 开发者指南。您可以使用 SDK 设置新项目,或将 SDK 集成到现有项目中。您还可以运行示例代码以了解 SDK 的工作原理。

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

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

在现有应用中包含 iOS SDK

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

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

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

注意:如果您使用 XCFrameworks(即 Swift 包管理器、Carthage 或动态框架),则一些模块的名称以 XCF 后缀命名,以解决一个 Swift 问题AWSMobileClient 被命名为 AWSMobileClientXCFAWSLocation 被命名为 AWSLocationXCF。要使用 AWSMobileClientAWSLocation SDK,您可以按以下方式导入它们:

import AWSMobileClientXCF
import AWSLocationXCF

并在您的应用代码中使用它,无需使用 XCF 后缀。

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

Swift 包管理器

  1. Swift 包管理器随 Xcode 一起分发。要开始将 AWS SDK 添加到您的 iOS 项目中,请使用 Xcode 打开您的项目,然后选择 文件 > Swift 包 > 添加包依赖

    Add package dependency

  2. 在搜索栏中输入AWS SDK for iOS Swift Package Manager GitHub仓库的URL(https://github.com/aws-amplify/aws-sdk-ios-spm),然后点击下一个

    Search for repo

    注意:此URL不是SDK的主URL。我们在这个单独的仓库中维护了这个库的Swift Package Manager清单文件(Package.swift),以便使用SDK的app不需要下载整个源存储库,仅下载二进制目标。

  3. 您将看到Swift Package Manager要安装的SDK版本规则。选择第一个规则版本,然后选择最高支持下一个次要版本,因为将使用从main分支检测到的最新兼容版本,然后点击下一个

    Dependency version options

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

  4. 选择你想添加到项目中的库。始终选择

    AWSCore SDK。要安装的其他SDK将根据你要安装的SDK而变化。大多数SDK仅依赖于

    AWSCore,但有关完整的依赖项列表,请参阅README-spm-support文件

    注意:由于与打包的二进制依赖项冲突,目前Swift Package Manager不支持

    AWSLex针对

    arm64架构的支持。

    Select dependencies

    选择所有合适的,然后点击

    完成

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

    Swift Packages选项卡。

CocoaPods

  1. 通过CocoaPods可以获取iOS AWS Mobile SDK。如果你没有安装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

要获取我们Pods的完整列表,请查看此项目根目录中的.podspec文件。

  1. 然后运行以下命令:

     $ pod install --repo-update
    
  2. 要打开你的项目,使用XCode打开项目目录中刚生成的*.xcworkspace文件。你可以在项目文件夹中执行以下命令:

     $ xed .
    

    注意:请不要使用*.xcodeproj。如果您打开的是项目文件而不是工作空间,可能会收到以下错误

     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),未支持使用 XCFrameworks 的预构建二进制文件。

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

具有“胖库”的框架(不推荐)

要构建具有多个架构的二进制文件的特定平台框架包(Xcode 11 和以下版本)

  1. 安装 Carthage 的最新版本。(https://github.com/Carthage/Carthage#installing-carthage)

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

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

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

  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
    

注意:目前,iOS版本的AWS SDK使用最新发布的Xcode版本来构建Carthage二进制文件。为了使用预构建的二进制文件,您的Xcode版本需要保持一致;否则,您必须通过传递--no-use-binaries标志到carthage update命令,在您的机器上构建框架。

框架

XCFramework设置

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

  1. 下载最新版本的SDK,链接为最新SDK。较早版本的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. 使用以下链接下载所需的SDK:https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip,其中#.#.#代表版本号。例如,对于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

以下是一些日志级别选项:

  • .off
  • .error
  • .warning
  • .info
  • .debug
  • .verbose

Objective-C

[AWSDDLog sharedInstance].logLevel = AWSDDLogLevelVerbose;

以下是一些日志级别选项:

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

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

目标日志输出

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

许可

有关更多信息,请参阅许可证文件。