如何在Objective-C中设置Amazon Amplify iOS?

如何在Objective-C中设置Amazon Amplify iOS?,ios,amazon-web-services,aws-amplify,Ios,Amazon Web Services,Aws Amplify,仅显示Swift代码。当尝试使用Objective-C时,我无法访问任何放大库。我是否缺少安装步骤 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { do { try Amplify.add(plugin: AWSCognitoAuthPlugin(

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

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中进行等效

我是否缺少安装步骤

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
你没有遗漏任何东西。不幸的是,在Amplify for iOS上没有Objective-C支持。Amplify是在Swift中使用其全部功能构建的,除非社区有强烈的需求,否则目前不考虑使用Objective-C支持


出于好奇:您是否正在Objective-C中启动一个新应用程序?如果是这样的话,我会好奇地想知道,鉴于苹果最近在Swift上的投资(联合收割机、SwiftUI、Swift语言更新等),为什么不选择Swift


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

是的,陈旧的Objective-C应用程序仍然存在。它们必须得到维护。期望开发人员用Swift重写它们以便使用AMPLYPT,这真的是不合理的。最近,我被要求在2015年初Swift出现之前,将Amplify添加到一个应用程序中。(天哪,真的有超过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)
    }
}

使用如下形式的目标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:""];


我正在将Amplify集成到现有的应用程序中。谢谢你的快速回复。我还必须在一个客观的C应用程序中添加Amplify。我添加了一个备选答案和一个如何实现的示例。如果您仍然需要这样做,我添加了一个答案,说明如何使用Swift包装器将其暴露给Objective C。