AWSLocation 2.36.7

AWSLocation 2.36.7

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 构建互联移动应用程序。

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

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

您可以访问 Swift Amplify Library 文档 了解所有功能的详细信息。您还可以使用 AWS Amplify 与您现有的 AWS 云资源一起使用 您的现有 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"。要使用 "AWSMobileClient" 或 "AWSLocation" 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 包管理器 GitHub 仓库的 URL(https://github.com/aws-amplify/aws-sdk-ios-spm),然后点击 下一步

    Search for repo

    注意:此 URL 不是 SDK 的主 URL。我们在此单独存储库中维护 Swift 包管理器清单文件(Package.swift),以便使用 SDK 的应用程序无需下载整个源存储库就可以使用二进制目标。

  3. 您将看到适用于您希望 Swift Package Manager 安装的 SDK 版本的存储库规则。选择第一条规则 版本,并选择 到下一个次要版本,因为它将使用从 main 分支检测到的最新兼容版本,然后点击 下一步

    Dependency version options

    注意: iOS AWS 移动 SDK 不会使用语义版本控制,并且可能在次要版本发布中引入破坏性 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 查找 iOS AWS 移动 SDK。如果您尚未安装 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 支持 XCFrameworks(Xcode 12 或更高版本)。以下是使用 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 发行说明中所述 -

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

不推荐使用 "fat libraries" 框架

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

  1. 安装最新版本的 Carthage

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

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

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

  5. 单击 添加其他... 按钮,然后在弹出菜单中单击 "添加文件...",然后导航到 Carthage > Build > 下的 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 版本需要与此相同,否则您需要通过在 carthage update 命令中传递 --no-use-binaries 标志来在您的机器上手动构建框架。

框架

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. 使用 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的记录级别是可累加的,这意味着当级别设置为详细级别时, BelowVerbose级别的所有消息都会被记录。也可以设置自定义记录以满足您的需求。更多详细信息,请参阅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文件。