2015-04-10 29 views
6

Sto lavorando su estensione iOS 8. Ho letto molti manuali e tutti loro mostrano semplicemente come aggiungere un'estensione alla tua app, e sembra che sia abbastanza.Problemi di estensioni di iOS 8. Importazione di un file di progetto in controller di vista estensione

ma qui ci sono molte insidie:

  1. Dopo aver aggiunto l'estensione sarà necessario importare alcune delle vostre classi per visualizzare regolatore che sono stati creati quando è stato aggiunto nuovo target di estensione. Il grande uso qui che avrai bisogno di aggiungerli tutti e se hai un progetto enorme non è un compito semplice. La soluzione può essere selezionata come destinazione dell'estensione quindi in Fasi di compilazione -> Compila origini premere il pulsante più e aggiungere tutti i file .m alla destinazione utilizzando la combinazione di tasti CMD + A.

  2. Dopo aver aggiunto tutti i file che si può vedere che alcuni dei lavori metodo di solito, e si può vedere questo errore: 'sharedApplication' is unavailable: not available on iOS (App Extension) modo la soluzione può essere una macro che controllano ifndef Extension allora possiamo invocare sharedApplication codice.

  3. #import <Foundation/Foundation.h> vs #import <UIKit/UIKit.h>. Quindi non ho capito con questo problema, ma quando ho sostituito Foundation con UIKit funziona per me e tutti i problemi correlati vanno via.

  4. CocoaPods. Tutti noi utilizziamo CocoaPods, quindi se la tua estensione deve utilizzare parte del codice del progetto e tale codice utilizza la libreria CocoaPods, devi aggiungere link_with 'ProjectTarged', 'ExtensionTarget' al file Pod e rendere nuovamente pod install per legare le tue librerie con la nuova destinazione dell'estensione.

Quindi questo è uno dei punti principali che ho affrontato. Forse qualcuno può suggerire come risolvere il problema, come ho detto ho appena importato un file necessario per il controller di visualizzazione estensione. Il file importato contiene alcune librerie come AFNetworking, RestKit e altre classi nidificate dal progetto principale. Ho bisogno di questa classe per invocare alcuni metodi con il passaggio dei dati dall'estensione al mio server back-end. Quindi un solo file ma molti problemi.

+0

Qual è il problema che stai cercando di risolvere? Elenchiamo un sacco di insidie, ma sembra che tu sappia già cosa fare su di loro. –

+0

@TomHarrington Mi aspettavo che ci fosse qualche fornitore tra app ed estensione e non è necessario importare le intestazioni, così come se tu abbia una classe nel target dell'app che può tracciare alcuni eventi dall'estensione e ad esempio eseguire qualche azione e invece di importare e aggiungere tutti i file basta usare l'adattatore smth tra due obiettivi –

risposta

5

è possibile utilizzare questo nel Pod per impedire "Richiedi solo API App-Extension-Safe". Basta metterlo alla fine del tuo Podfile.

post_install do |installer_representation| 
installer_representation.project.targets.each do |target| 
    target.build_configurations.each do |config| 
     config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO' 
     end 
    end 
end 
+1

Nota: a partire da una versione più recente di Cocoapods, è necessario cambiare "progetto" in "pods_project". – mdstroebel

2

1) È necessario solo aggiungere file alla destinazione dell'estensione che si intende utilizzare. Consiglierei solo di scavare ciò di cui hai bisogno trovando i file e in File Inspector, aggiungendoli a entrambi i target.

2) Sì, è vero. Avrai bisogno di aggiornare le librerie che controllano ciò per te o le forchetta e le aggiusta da te.

3) Penso che ti stai riferendo ai modelli predefiniti durante la creazione di una delle estensioni per app. Sì, è necessario utilizzare UIKit non Foundation. Foundation funzionerà per iOS o OS X, ma chiaramente non è sufficiente se stai realizzando un'applicazione UIKit.

4) Il comando link_with renderà tutti i pod del tuo Podfile collegati a tutti i target elencati. Se è quello di cui hai bisogno, allora, bene, fallo. Se avete solo bisogno di un piccolo sottoinsieme di cialde per il proprio interno, utilizzare il seguente:

target 'whateverTarget', :exclusive => true do 
    pod 'SomePod' 
end 
2

Per rimuovere sharedApplication problema da CocoaPods biblioteche non vi resta che cambiare Build Options entro impostazioni di generazione per il vostro pod.

tipo Proprio per cercare Require Only App-Extension-Safe API e quindi modificare il valore per NO com'è sull'immagine qui sotto:

enter image description here

Propably avrete bisogno di fare questo per ogni vostra baccelli.