2015-09-12 21 views
14

Ho una classe Swift che è collegata a più target con obiettivi di distribuzione diversi, il progetto principale ha requisito minimo per iOS 7 e un'estensione con obiettivo iOS 8.Avviso: controllo non necessario per obiettivo minimo di implementazione

Ora, quando compilo progetto, il compilatore tiri di avvertimento su questa linea di codice:

if #available(iOS 8.0, *) { ... } 

"assegno inutile per 'iOSApplicationExtension'; obiettivo minimo distribuzione assicura guardia sarà sempre vero"

I hai controllato le opzioni di configurazione e non hai trovato nessun interruttore per eliminare gli avvisi rapidi.

ho cercato di definire iOSApplicationExtension versione di destinazione separatamente da questa linea, ma senza successo:

if #available(iOS 8.0, iOSApplicationExtension 8.0, *) { ... } 

Esiste un modo per sopprimere questo messaggio fastidioso?

+1

vedere questo link può essere di aiuto con voi https://forums.developer.apple.com/thread/15030 –

+1

Molto probabilmente il vostro obiettivo minimo di distribuzione per l'estensione è iOS 8. Ciò significa che '#available (iOS 8.0, 0) 'sarà sempre vero, cioè non è necessario. –

+0

Le estensioni per le app @ILikeTau funzionano solo su iOS 8+. è per questo che l'ho fatto. – Mousavian

risposta

1

Trovato un brutto soluzione al silenzio avvertimento, ma spero che ci sia un modo migliore:

in iOS 8+ obiettivi costruiscono le impostazioni, ho definito una bandiera precompilazione in Impostazioni Build -> Swift Compiler - Bandiere personalizzate -> altre Bandiere Swift:

-D iOS8target

Poi ho cambiato il codice per questo modo:

#if iOS8target 
    // iOS 8+ compatible code 
#else 
    if #available(iOS 8.0, *) { 
     // repeat iOS 8+ compatible code again! 
    } else { 
     // iOS 7 code 
    } 
#endif 

Non è refactored e brutto, ma funziona!

UPDATE: C'è un interruttore compilatore rapida -suppress-warnings omettere tutte le avvertenze. Ma sopprime anche gli avvisi utili. Anche se esiste un solo file specifico che emette avvisi, è possibile utilizzare il flag -w nel riquadro Fasi degli edifici. Sopprimerà anche gli avvisi utili ma limitato a un file.

+4

Preferisco vivere con l'avviso: S – nobre

1

La prossima versione di Cocoapod (dopo 0.39.0) dovrebbe risolvere questo problema. Controlla this per maggiori dettagli.

0

Controllare la destinazione di implementazione nel generale e impostare da 9.0 a 7.0 o inferiore. questo avviso verrà rimosso automaticamente.

+0

ci sono diversi progetti che utilizzano lo stesso file sorgente. non posso cambiarlo alcuni devono essere 8 + – Mousavian

+0

se ci sono deprecati da ios8 +, quindi devi codificare entrambi con la vecchia e la nuova classe. non c'è un'opzione. prova a impostare il target di implementazione su 8. –