2015-01-26 21 views
13

Ho effettuato un'estensione di oggi che scarica articoli da un feed e visualizza gli ultimi. Il tutto ha funzionato bene su iOS 8, funzionava ancora su iOS 8.1, poi è arrivato iOS 8.1.2 e abbiamo iniziato a lamentarci dell'estensione di oggi che non funziona più. Ho provato il debug su iOS 8.1.2 dispositivi, e prima che l'estensione anche lanciare, si blocca con questo errore:L'estensione di oggi si blocca prima dell'avvio su iOS 8.1.2

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: <__NSConcreteUUID 0x174027280> 5AFB07AB-5DCD-46FE-8D07-44DE0F3789F2)' 

Ho letto questo post sugli errori frequenti che accadono quando si sviluppa un oggi un'estensione: http://www.atomicbird.com/blog/ios-app-extension-tip

nel suo post, Tom Harrington dice:

in iOS 8 (e altre versioni più recenti), consentendo moduli impostazioni di generazione di Xcode significa che non c'è bisogno di elencare esplicitamente tutti i quadri che si desidera utilizzare. Verranno trovati automaticamente.

Ma questo non è il caso di NotificationCenter.framework, che utilizzano le estensioni di oggi. Se lo rimuovi dalle impostazioni di generazione, non riceverai alcun avviso o errore di build. Ma quando provi a caricare l'estensione, otterrai un'eccezione da libextension.dylib e l'estensione non verrà caricata. Il messaggio di eccezione non è illuminante:

2014-08-16 12: 06: 53,793 TodayTestExtension [41313: 6.111.763] * terminazione applicazione a causa di eccezione non identificata 'NSInvalidArgumentException', la ragione: '* setObjectForKey: oggetto non può essere nil (chiave: < __NSConcreteUUID 0x7fd729422390> ED3B42F8-66CD-4CB0-BCD5-F3DBA6F34DB5) ' Se si sta eseguendo un'estensione di oggi, lasciare tale framework nelle impostazioni di compilazione. Non dovrebbe essere necessario, ma lo fa.

La mia estensione include NotificationCenter.framework nelle sue impostazioni di compilazione, ma ho il sospetto che il mio problema potrebbe essere simile in qualche modo.

Chiunque ha riscontrato un problema simile? Qualche idea su come risolverlo?

+0

Wow, è scoraggiante. Sembra esattamente la stessa cosa, ma è l'unica cosa che so che potrebbe causare questo problema. –

+0

Queste lamentele sono state segnalate dagli utenti "sul campo" o da persone che eseguono build di test della tua app? In primo luogo sarebbe un bug 8.1.2 e non ci sarebbe molto da fare. Nel secondo, potrebbe essere un problema Xcode che potrebbe essere risolvibile. –

risposta

0

Eventualmente, ho provato a rimuovere NotificationCenter.framework dal mio obiettivo, a rimetterlo a posto, a pulire il progetto e ora funziona di nuovo. Immagino che il framework non fosse collegato correttamente, anche se potevo vederlo sul mio target con xcode. Inoltre, non riesco a capire perché ha funzionato, quindi ho smesso di funzionare con l'arrivo di 8.1.2.

0

Ho appena sperimentato lo stesso problema. Per me, era la proprietà "Interfaccia principale" in "Impostazioni generali" del target della tastiera. Era vuoto, e ho impostato il mio file storyboard e ora funziona come un fascino. Screenshot

32

Questo errore si verifica anche se si utilizza NSExtensionPrincipalClass in "Info.plist" per definire una classe base (anziché utilizzare uno storyboard) con il nome di un ViewController che non esiste.

Quando si utilizza Swift, assicurarsi di prefisso la classe con il nome del modulo (di solito il nome del target) come "Module.MyViewController".

+3

Fantastico, ha funzionato! Poi l'ho cambiato in '$ (PRODUCT_NAME) .', per un po 'di flessibilità in più. – user2565077

+0

Mi stai salvando la vita! – Hilen

+0

Questa soluzione si applica a qualsiasi tipo di estensione. E la parte "When using Swift" è ** importante **. Non dimenticare il nome del modulo. –