AWSAppleSignIn 2.36.7

AWSAppleSignIn 2.36.7

AWS Mobile SDK ToolsAWS Amplify Swift Ops 维护。



 
依赖项
AWSCore= 2.36.7
AWSAuthCore= 2.36.7
 

  • 作者
  • Amazon Web Services

AWS SDK for iOS

Release CocoaPods Carthage compatible CircleCI Discord

AWS SDK for iOS 为开发人员提供了库和文档,用于构建使用 AWS 的联机移动应用程序。

我们建议使用 AWS Amplify Library for Swift 的最新 v2 版本,以快速实现以下常见应用程序用例,例如身份验证、存储、推送通知等,这些用例遵循 Swift 的模式,例如 async/await。

注意:Swift Amplify Library 的 v2 版本(目前为 GA)建立在 AWS SDK for Swift 的基础上,并且仅提供对当前处于开发者预览阶段的 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 的逃生舱访问此基础 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 命名为 AWSMobileClientXCF,将 AWSLocation 命名为 AWSLocationXCF。要使用 AWSMobileClientAWSLocation SDK,导入它们如下所示:

import AWSMobileClientXCF
import AWSLocationXCF

并在您的应用程序代码中使用不带 XCF 后缀的 SDK。

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 包管理器 GitHub 存储库的 URL(https://github.com/aws-amplify/aws-sdk-ios-spm),然后点击 下一步

    Search for repo

    注意:此 URL 不是 SDK 的主 URL。我们在单独的存储库中维护此库的 Swift 包管理器功能描述文件(Package.swift)文件,以便使用 SDK 的应用程序不必下载整个源代码库即可 consumption of binary targets。

  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. 通过CocoaPods可以获取 AWS Mobile SDK for iOS。如果您尚未安装 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 拖放到应用程序目标的“通用”设置标签页的“嵌入的二进制文件”部分。

不建议使用带有“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。旧版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. 在您的应用程序目标的“General设置”选项卡下,在“嵌入二进制”部分,将您要使用的每个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
    

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

    image

Carthage

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

     $ carthage update
    

框架

  1. 在 Xcode 的 项目导航器 中,输入 "AWS" 以找到您手动添加到项目的 AWS 框架或 XCFramework。选择所有的 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)。此单例方法创建了一个使用 defaultServiceConfiguration 包含的客户端,这是在第 5 步中设置的,并维护对客户端的强引用。

使用 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)。此单例方法创建了一个使用 defaultServiceConfiguration 包含的客户端,这是在第 5 步中设置的,并维护对客户端的强引用。

使用 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文件。