2014-07-23 13 views
9

Base su questa questioneNon è più necessario collegare framework al progetto XCode?

Why don't iOS framework dependencies need to be explicitly linked to a static library

ho letto la risposta selezionato e ancora non capisco così ho fatto un progetto di esempio

Test Project on Github

Nel progetto di test, tolgo tutte quadro da Link binario con librerie e Navigazione file per il progetto principale e la libreria statica (inclusa Foundation. framework e UIKit.framework), fondamentalmente, sia il collegamento del progetto a 0 framework.

domande sono

  • In libreria statica, è compreso MapKit/MapKit.h senza fare riferimento alla Mapkit.framework al progetto, perché è la sua ancora lavorando?
  • Nel progetto principale, rimuovo UIKit.framework e Foundation.framework dal progetto, perché funziona ancora?
  • Dal momento che funziona per ora, ci sarà qualche problema dopo?

Grazie per il tuo commento.

P.S. Per funzionante al, voglio dire che posso eseguire il simulatore e posso archiviare il progetto principale senza errori.

Edit 25/07/2014

ho provato con l'applicazione reale che sto lavorando su, è la stessa.

  • Evidenzia Foundation, UIKit, CoreData e 10 altri framework in File Navigation, beh, tutti.
  • Deseleziona il bersaglio nel Pannello di Utilità -> Target adesione
  • Corporatura: Pass, Run: Passa

Ogni funzionalità della mia app è ancora lavorando come previsto. Non capisco questo.

risposta

25

Verificare le impostazioni di creazione del progetto. Sotto LLVM 5.1 - Lingua - Moduli dovresti vedere l'opzione 'Collega quadri automaticamente'. Nel tuo caso sembra che sia impostato su "SÌ", il valore predefinito.

In tal caso, invece di produrre un errore quando si fa riferimento a una classe che il compilatore non conosce, verrà determinato quale Framework contiene quella classe e la collega. Nel codice sarà MKMapView o una delle altre classi MapKit che attiva il collegamento.

EDIT: dal relativo 'What's New?' document:

Auto Linking è abilitato per i quadri importati dai moduli di codice.Quando un file sorgente include un'intestazione da un framework che supporta i moduli , il compilatore genera informazioni aggiuntive nel file oggetto per collegarsi automaticamente in tale framework. Il risultato è che, nella maggior parte dei casi , non è necessario specificare un elenco separato dei framework da collegare alla destinazione quando si utilizza un'API framework che supporta i moduli .

Un altro modo di vedere le cose è che il compilatore è abbastanza intelligente per mutare #import-@import quando il quadro è stato costruito in modo appropriato. Tutti i framework di sistema sono stati.

+0

Grazie @Tommy, sì, è impostato su SÌ. Se posso chiedere, il valore predefinito per Link Frameworks è automaticamente SÌ, giusto? Se è così, posso dire che quando creo un nuovo progetto, non ho bisogno di collegarmi a nessun framework? –

+2

Sì, ora è "Sì" per impostazione predefinita. Inoltre, dall'aprire un mio vecchio progetto sembra che sia impostato su "Sì" quando apri tutto ciò che precede la funzione. Quindi non penso che sia necessario preoccuparsi di elencare esplicitamente i framework [correttamente costruiti] nel passaggio di collegamento mai più. Pedanticamente: continuerai a collegarti a loro, è solo che il compilatore può capirlo da solo. – Tommy

+0

Grazie per il chiarimento, suppongo che sia una nuova funzionalità aggiunta di recente e non ho letto il registro delle modifiche di LLVM, quindi non ne sono a conoscenza. –

Problemi correlati