【问题标题】:How can I set up Amazon Amplify iOS in Objective-C?如何在 Objective-C 中设置 Amazon Amplify iOS?
【发布时间】:2020-07-08 23:45:05
【问题描述】:

docs 仅显示 Swift 代码。尝试使用 Objective-C 时,我无法访问任何 Amplify 库。我是否缺少安装步骤?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

do {
    try Amplify.add(plugin: AWSCognitoAuthPlugin())
    try Amplify.add(plugin: AWSPinpointAnalyticsPlugin())
    try Amplify.configure()
    print("Amplify configured with Auth and Analytics plugins")
} catch {
    print("Failed to initialize Amplify with \(error)")
}

return true

}

如何在 Objective-C 中做等价的?

【问题讨论】:

  • 如果您仍然需要这样做,我添加了一个答案,说明如何使用 Swift 包装器将其公开给 Objective C。

标签: ios amazon-web-services aws-amplify


【解决方案1】:

是的,老旧的 Objective C 应用程序仍然存在。他们必须得到维护。期望开发人员在 Swift 中重写它们以便他们可以使用 Amplify 确实是不合理的。我最近被要求将 Amplify 添加到 2015 年初在 Swift 出现之前构建的应用程序中。 (天哪——真的有超过 5 年的应用吗?!)

幸运的是,如果你能硬着头皮为你的 Objective C 项目添加 Swift 支持,那么从 Objective C 中创建一个使用的 Swift 包装类并不难。这是我免费创建的。如果亚马逊的高薪人员能够帮助我们提供这样的示例,那就太好了。

import Amplify
import AmplifyPlugins

@objc
class AmplifyWrapper: NSObject {
    override init() {
        super.init()
    }
    @objc
    public func initialize() {
        do {
            try Amplify.add(plugin: AWSCognitoAuthPlugin())
            try Amplify.add(plugin: AWSPinpointAnalyticsPlugin())
            try Amplify.configure()
            print("Amplify configured with Auth and Analytics plugins")
        } catch {
            print("Failed to initialize Amplify with \(error)")
        }
    }
    @objc
    public func recordEvent(name: String, category: String, accountId: String) {
        let properties: AnalyticsProperties = [ "category": category, "accountId": accountId]
        let event = BasicAnalyticsEvent(name: name, properties: properties)
        Amplify.Analytics.record(event: event)
    }
}

像这样使用表单Objective C:

#import "PutYourAppNameHere-Swift.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[[AmplifyWrapper alloc] init] initialize];
    ...
}

以后你可以这样做:

  [[[AmplifyWrapper alloc] init] recordEventWithName:@"App Opened" category:@"Counts" accountId:""];

【讨论】:

    【解决方案2】:

    我是否缺少安装步骤?

    你没有错过任何东西。不幸的是,Amplify for iOS 不支持 Objective-C。 Amplify 是使用 Swift 的全部功能在 Swift 中构建的,目前不考虑支持 Objective-C,除非社区有强烈的需求。


    出于好奇:您是否正在使用 Objective-C 开始一个新应用程序?如果是这样,我很想知道为什么不使用 Swift,因为 Apple 最近对 Swift 进行了投资(Combine、SwiftUI、Swift 语言更新等)。

    如果您尝试将 Amplify 集成到现有的 Objective-C 应用程序中,那么恐怕这是不可能的。

    【讨论】:

    • 我正在将 Amplify 集成到现有应用程序中。感谢您的快速回复。
    • 我还必须将 Amplify 添加到 Objective C 应用程序。我添加了一个替代答案,其中包含如何执行此操作的示例。
    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多