2014-11-28 14 views
7

C'è un'applicazione principale con la logica e estendiamo l'app ad Apple Watch.Apple Watch, estensione WatchKit e applicazione principale

Dopo aver aggiunto il target xCode crea altre 2 applicazioni: estensione con codice e applicazione del kit di controllo.

Domanda: In che modo il codice dall'interno può riutilizzare la logica dell'app per iOS principale già pronta e già realizzata? In che modo l'app di estensione può comunicare con l'app principale e inviare comandi.

+0

La tua domanda è troppo ampia. Si prega di essere più specifici con le domande. Come da documentazione, avrai un'app principale che funziona sul telefono, un'estensione per app che funziona sul telefono e un pacchetto di watchkit che sono risorse trasferite sull'orologio per la visualizzazione sull'orologio. Nessuno del tuo codice viene effettivamente eseguito sull'orologio. Stai solo fornendo un pacchetto di risorse e dati all'orologio. –

+1

È possibile utilizzare i gruppi di app o il https://github.com/mutualmobile/MMWormhole. – kelin

risposta

9

di comunicare alla contenente applicazione per iPhone è possibile utilizzare

(BOOL)openParentApplication:(NSDictionary *)userInfo 
         reply:(void (^)(NSDictionary *replyInfo, 
             NSError *error))reply 

Nella tua WKInterfaceController

da Apple Docs

Utilizzare questo metodo per comunicare con il vostro contenente app iOS. Chiamando il il metodo fa sì che iOS avvii l'app in background (se necessario) e chiama lo application:handleWatchKitExtensionRequest:reply: metodo del suo delegato dell'app. Questo metodo ha la seguente firma:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo 
reply:(void(^)(NSDictionary *replyInfo))reply 

Il delegato app riceve il dizionario si passa nel parametro userInfo e lo utilizza per elaborare qualunque richiesta che hai fatto. Se fornisce una risposta, WatchKit esegue il blocco fornito nel parametro di risposta di questo metodo.

+0

ha funzionato per me. – Anand

+1

Per un esempio di codice su come utilizzare la modalità background, che assicura che l'app principale abbia il tempo di inviare la sua risposta, fare riferimento a "Chiamare l'applicazione genitore dall'app Watch" (http://stackoverflow.com/questions/30000274/calling -parent-application-da-watch-app/30000323 # 30000323) – vomako

3

Allo stato attuale della Guarda di estensione di Apple:

  • È possibile condividere le informazioni tra appliation principale iOS e WatchKit Extension. Utilizzare i gruppi di app e NSUserDefaults per accedere agli oggetti di informazioni condivise.

  • È non è possibile eseguire codice dalla tua app iOS che viene attivata da azioni su Apple Watch.

Almeno non ancora.

EDIT: Come di Xcode 6.2 Beta 2

Ora è possibile comunicare con il genitore app iOS di Apple Watch.

In Extension WatchKit chiamare l'applicazione padre tramite openParentAppentApplicion. Uno può passare un dizionario di valori all'applicazione padre e l'applicazione genitore può restituire un dizionario di valori.

Watchkit Estensione:

// Call the parent application from Apple Watch 

// values to pass 
let parentValues = [ 
    "value1" : "Test 1", 
    "value2" : "Test 2" 
] 

WKInterfaceController.openParentApplication(parentValues, reply: { (replyValues, error) -> Void in 
    println(replyValues["retVal1"]) 
    println(replyVaiues["retVal2"]) 
}) 

iOS App:

// in AppDelegate.swift 
func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) { 
    // retrieved parameters from Apple Watch 
    println(userInfo["value1"]) 
    println(userInfo["value2"]) 

    // pass back values to Apple Watch 
    var retValues = Dictionary<String,String>() 

    retValues["retVal1"] = "return Test 1" 
    retValues["retVal2"] = "return Test 2" 

    reply(retValues) 
} 
+0

Grazie a zisoft, esiste un modo per implementare la funzione di ascolto degli eventi e di attivazione in memmory tra l'estensione e l'app host? – vitalii

+0

Immagino tu stia pensando a qualcosa di simile: premi un pulsante su Apple Watch e avvia un'azione su iPhone. Ciò richiederebbe di mantenere l'app iOS in esecuzione e il polling per alcune informazioni di qualsiasi tipo. Non ho trovato un modo per farlo fin qui. Forse a volte, questa è roba molto nuova ... – zisoft

+0

Ho creato il servizio Pull che controlla i valori che abbiamo memorizzato in NSUserDefaults e se sono stati modificati, notifica agli ascoltatori. Problema: sembra che i valori vengano modificati solo all'avvio dell'applicazione, riavviato. Qualche idea? – vitalii

Problemi correlati