2015-02-21 23 views
24

Ho una struttura dinamica condivisa tra un'applicazione iOS e un'estensione. C'è del codice in quel framework che fa riferimento a UIApplication, che ovviamente non è utilizzabile in un'estensione. Quelle chiamate sono completamente isolate e quindi non sono preoccupato per loro causando problemi con la mia estensione.Come sopprimere l'avvertimento: collegamento a dylib non sicuro per l'uso nelle estensioni dell'applicazione?

Dal momento che non v'è una bandiera specificato nel messaggio di avviso, forse non c'è modo per farlo, ma come faccio a sopprimerewarning: linking against dylib not safe for use in application extensions quando si costruisce il mio progetto?

+6

In l'obiettivo per il proprio interno v'è una impostazione nella sezione "costruire opzioni" Build - "richiedono solo API App-Extension-Safe". Se non è già abilitato, prova ad abilitarlo ... – Toastor

+1

Oh a proposito - anche se tutto sta funzionando bene non usando gli apis non autorizzati nella tua estensione, c'è una buona probabilità che Apple rifiuterà la tua estensione per collegarsi ad essa Comunque. Vedi la sezione "Gestione degli scenari comuni" nella guida alla programmazione delle estensioni per app. – Toastor

+7

@Toastor Disabilitare la '' 'Richiedi solo API App-Extension-Safe'' 'risolto! – loretoparisi

risposta

6

Risposta breve: non c'è davvero un modo per fare.

Quello che ho finito è stato il refactoring del mio codice per estrarre i pezzi che erano comuni alla mia estensione e la mia cornice dinamica in modo che la mia estensione potesse fare riferimento in modo sicuro a quei pezzi indipendentemente dal codice specifico del telefono.

Ho finito per fare questo perché in futuro dovrò inviarlo all'App Store e le linee guida di Apple sembrano abbastanza chiare che fare riferimento a UIApplication è un bel no-no.

+0

Dove hai inserito il codice comune? Ce l'abbiamo in un framework e lo riferimento nell'app e nell'estensione. Ma questo solleva l'avviso ... – blackjacx

17

Per il tuo obiettivo/estensione dell'estensione del widget di oggi (quindi non la tua app o target di libray), vai nelle impostazioni del progetto e modifica l'impostazione di build "APPLICATION_EXTENSION_API_ONLY"/"Richiedi solo API App-Extension-Safe" su NO.

+3

Questo disattiva solo l'avviso Qualsiasi utilizzo dell'API non disponibile per l'estensione comporterà il rifiuto durante la revisione dell'app Apple. Se si intende rilasciare questa app tramite App Store, è meglio mantenere l'avviso attivato e rimuovere l'uso di eventuali API non consentite per le estensioni. – skim

0

Penso che sia possibile utilizzare il framework incorporato per condividere il codice tra l'estensione dell'app e l'app contenente. Ma devi stare attento che il tuo framework non contiene apis che non sono disponibili per le estensioni. Vedi Some APIs Are Unavailable to App Extensions e Using an Embedded Framework to Share Code.

Se il quadro non contiene tali API non dimenticate di impostare Require Only App-Extension-Safe API a SI nel Build Settings del bersaglio quadro.

enter image description here

Come secondo modo per condividere file di origine tra l'applicazione e l'estensione, non c'è bisogno di creare un target quadro separato. Puoi semplicemente condividere file sorgente scegliendo come target entrambi i due progetti.

enter image description here