AWSCognitoIdentityProviderASF 2.36.7

AWSCognitoIdentityProviderASF 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 Amplify Library for Swift 的最新 v2 版本,以便快速实现诸如身份验证、存储、推送通知等常见应用用例,这些用例遵循 Swift 的 idiomatic 模式,如 async/await。

注意:Swift Amplify Library v2(目前为 GA)构建在 AWS SDK for Swift 的基础上,并且仅提供对 AWS SDK for Swift 的访问,该 SDK 目前处于开发者预览阶段。您可以通过 AWS Amplify 的 Escape Hatch 访问底层 SDK。

您可以通过访问 AWS Amplify Library for Swift 文档 了解有关所有功能的更多信息。您还可以使用 AWS Amplify 与 您现有的 AWS 云资源。如果您在 Amplify 中找不到您要查找的功能,请通过 AWS Amplify Library for Swift 的 GitHub 仓库 提交问题,并期待考虑您的请求。

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

设置

要开始使用 AWS SDK for iOS,请查看iOS 开发者指南。您可以为新项目设置 SDK 并开始构建,或 integrate SDK into an existing project。您还可以运行这些示例以了解 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。我们为了使使用SDK的应用程序无需下载整个源代码库就能使用二进制目标,在单独的仓库中维护了这个库的Swift Package Manager清单文件(Package.swift)。

  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支持在arm64架构上使用AWSLex。

    Select dependencies

    选择所有适当的选项,然后点击完成

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

CocoaPods

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

     $ gem install cocoapods
     $ pod setup
    

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

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

     $ pod init
    
  3. 编辑podfile以包含您要集成到项目中的pod。例如,如果您需要身份验证,您可以使用AWSMobileClient,如果您需要分析,您添加AWSPinpoint。因此,您的podfile可能看起来像这样

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

有关我们所有pod的完整列表,请查看本项目根目录中的.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,不支持使用 XCFrameworks 的预构建二进制文件,如 Carthage 发布说明中所述 - https://github.com/Carthage/Carthage/releases/tag/0.37.0

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

带有“胖库”的框架(不推荐使用)

为了构建具有多个架构的二进制文件的特定平台框架组件包(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. 在您的 Target构建阶段 选项卡下,点击左上角的 + 按钮并选择 新运行脚本阶段。然后按照以下设置配置构建阶段。确保此阶段在 嵌入框架 阶段之下。

     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:最新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,请参阅下面的“Legacy framework setup”部分。注意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. 在您的 Target构建阶段 选项卡下,点击左上角的 + 按钮并选择 新运行脚本阶段。然后按照以下设置配置构建阶段。确保此阶段在 嵌入框架 阶段之下。

     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创建服务客户端,并保持对客户端的强引用。

  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

我们建议在发布到Apple App Store之前将日志级别设置为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

许可协议

查看LICENSE文件获取更多信息。