Los documentos muestran solo el código Swift. Cuando trato de usar Objective-C, no puedo acceder a ninguna de las bibliotecas de Amplify. ¿Me estoy perdiendo un paso de instalación?
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}
¿Cómo hacer el equivalente en Objective-C?
Sí, todavía existen viejas aplicaciones crujientes de Objective C. Y tienen que ser mantenidos. Realmente no es razonable esperar que los desarrolladores los reescriban en Swift solo para poder usar Amplify. Recientemente me pidieron que agregara Amplify a una aplicación creada a principios de 2015 antes de que existiera Swift. (Dios mío, ¿realmente hay aplicaciones que tienen más de 5 años?)
Afortunadamente, si puede morder la bala y agregar compatibilidad con Swift a su proyecto de Objective C, no es tan difícil crear una clase contenedora de Swift que use de Objective C. Aquí hay una que creé gratis. Sería bueno que la gente muy bien pagada de Amazon tuviera la amabilidad de ayudarnos con ejemplos como este.
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) } }Use el formulario Objective C así:
#import "PutYourAppNameHere-Swift.h" - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[[AmplifyWrapper alloc] init] initialize]; ... }Luego, más adelante puedes hacer esto:
[[[AmplifyWrapper alloc] init] recordEventWithName:@"App Opened" category:@"Counts" accountId:""];¿Me estoy perdiendo un paso de instalación?
No te estás perdiendo nada. Lamentablemente, no hay compatibilidad con Objective-C en Amplify para iOS. Amplify se creó en Swift usando todas sus capacidades y la compatibilidad con Objective-C no se está considerando actualmente a menos que haya una fuerte demanda de la comunidad.
Por curiosidad: ¿estás iniciando una nueva aplicación en Objective-C? Si es así, tendría curiosidad por entender por qué no optar por Swift dada la inversión de Apple en Swift últimamente (Combine, SwiftUI, actualizaciones de idioma de Swift, etc.).
Si está intentando integrar Amplify en una aplicación Objective-C existente, me temo que no será posible.