Xcode 6 Beta / 4: utilizzo di colmare le intestazioni con un quadro di obiettivi di non è supportato

Ho appena effettuato l’aggiornamento di Xcode 6 Beta 4 e disporre di un quadro che ho creato per Vivere Viste nella Beta 2. A causa di un altro swift bug, ho bisogno di utilizzare alcuni Obj-C codice. Quando si esegue l’aggiornamento, però, ottengo il seguente errore:

errore: utilizzo di colmare le intestazioni con un quadro di obiettivi di non è supportato

Non ho visto niente nelle note di rilascio, o trovare qualsiasi altro percorso di migrazione. Qualcun altro ha visto questo e arrivati ad una soluzione?

Mi rendo conto che la Beta 3 ha eliminato la necessità per i quadri di riferimento per vivere la vista, ma ha senso nel mio caso se riesco a farlo funzionare. Riesco a rimuovere, anche se, come ripiego, ma preferisce utilizzare un quadro se non sono totalmente rotto in versione Beta 4.

  • Mi rendo conto che la Beta 3 ha eliminato la necessità per i quadri”. Come?
  • (per la visione dal vivo) – a cura
  • Io sono in esecuzione nello stesso problema.
  • Wow, la tua piccola modifica c’è solo reso la mia vita molto meglio, non mi sono sentito di questa modifica (eliminando la necessità per i quadri) ovunque è stato sbattere la mia testa con tutti questi framework gli obiettivi per la visione dal vivo per ore. Vi ringrazio tanto per questo @chrisco!

 

3 Replies
  1. 208

    Come indica l’errore, colmando le intestazioni non sono ammessi in Quadri. Il l’Importazione di Codice all’Interno di una Stessa Framework di Destinazione sezione del Mix & Match documentazione apple suggerimenti a questo. Come si dice, è necessario “Nel vostro ombrello file di intestazione, importare ogni Objective-C di intestazione che si desidera esporre a Swift”.

    Tuttavia, ho scoperto che si può anche bisogno di fare quelle intestazioni specifiche pubblico. Questa risposta giudizi perché e come fare: Swift di errore del compilatore: “non modulare di intestazione all’interno del quadro modulo”.

    Quindi, fare questo:

    1. Rimuovere il bridging file di intestazione.
    2. Rimuovere i riferimenti per il ponte file di intestazione nel costruire le impostazioni per il quadro
    3. Aggiungere l’header necessari per il vostro ombrello file ([ProductName].h)
    4. Rendere il file inclusi pubblico, nell’ambito del “Intestazioni” sezione “Build Fasi”.
    5. Pulire e ricostruire.

    Nota: “ombrello file di intestazione” è un file di nome [ProductName].h) che, generalmente, rappresenta tutte le intestazioni pubbliche di un quadro. Di solito è solo un elenco di istruzioni di #import per altre intestazioni contenuta nel framework. In Xcode, se si apre UIKit.h, si vedrà un buon esempio di un ombrello file.

    • Grazie! Mi ha salvato un sacco di capelli tirando stasera 🙂 ha Confermato che questo funziona.
    • Grazie per la sintetica risposta (contrassegnati come tali). Avevo letto che la sezione, ma era confusa la distinzione tra un Ombrellone e di raccordo di intestazione.
    • Cosa vuoi dire con questo, “Rimuovere i riferimenti al file di intestazione nel costruire le impostazioni per il quadro”? (Non ho precisi riferimenti a file di intestazione, ma la directory è parte dei percorsi di ricerca)
    • E la cosa in un altro modo? Cosa devo fare per utilizzare il codice Swift classi del framework codice Objective-C?
    • controllare il “Importazione di Swift in Objective-C” sezione di questo documento: developer.apple.com/library/ios/documentation/Swift/Conceptual/…
    • cosa ombrello file ti riferisci quando dici: “Aggiungere l’header necessari per il vostro ombrello file”? Grazie.
    • Ho aggiornato la mia risposta con una breve descrizione di un ombrello di intestazione.
    • Grazie. In realtà Im creazione di un rapido quadro dinamico, e ho bisogno di includere un file che è stato aggiunto al mio progetto utilizzando cocoapods. Puoi controllare qui: Dopo la rimozione del file di intestazione, questo è accaduto: stackoverflow.com/questions/30095287/…. Grazie.
    • Sto cercando di creare una cornice personalizzata di lavoro in Swift che ha bisogno di ObjC quadro che è gestito tramite CocoaPods. Forse si conosce la risposta: stackoverflow.com/questions/31688348/…
    • Citando questo commento su dove è l’ombrello di intestazione, in caso di chiunque altro, non si può sapere questo: “sarà una .h file con lo stesso nome del quadro che contiene il numero di versione e la versione stringa. Cercare FOUNDATION_EXPORT matrimoniale {framework nome}. – Nate Cuoco”
    • Questo è esattamente quello che mi serviva. Aggiunta alla sezione pubblica è stata la correzione.
    • Ho corretto assumendo quindi che tutte le classi che voglio fare nel mio quadro che deve essere utilizzato da una swift di classe, ora, deve essere reso pubblico a chiunque di usare il mio quadro? Non mi sembra la soluzione ideale.
    • Mi chiedo questa cosa esatta troppo. Ho vari Objective-C classi voglio tenere interna al mio quadro e non esporre pubblicamente.
    • ciao ho seguito ogni procedura dopo l’aggiunta di classi ombrello file di intestazione ricevo questo errore di non modulare di intestazione all’interno del quadro modulo ‘SpectrumLibrary’
    • non sono sicuro di questo. Si potrebbe desiderare di guardare a questa risposta: stackoverflow.com/a/28552525/730452
    • Un mio progetto ha due framework obiettivi: uno per Mac OS e una per iOS, Mac OS a ponte con intestazione funziona bene, iOS bridging intestazione lamenta l’errore di cui sopra.!!
    • grazie per avermi risparmiato un sacco di ore perse! Se potessi dare un voto positivo a questo più di una volta, vorrei
    • È possibile importare interno / lezioni private così, vedi qui: nsomar.com/…
    • Pulire e costruire il quadro di cancellare tutte le impostazioni. C’è qualche soluzione definitiva per risolvere questo problema?
    • Questo non sembra funzionare per me. Io sono sempre errori come: i simboli non definiti per l’architettura x86_64: “_OBJC_CLASS_$_MyClass”, riferimento: objc-classe-ref in MyOtherClass.o
    • Questa soluzione ha funzionato per me. Ho notato [productName].h) del file di progetto. dichiarate tutte le intestazioni del file stesso.

  2. 22

    Ci sono due possibilità. Aggiungere l’header necessari per l’ombrello file di intestazione e di renderlo pubblico è a senso unico. Tuttavia, questo è un problema se le intestazioni devono essere disponibili per la Swift, ma non pubblico.

    La seconda possibilità che renderà le intestazioni interne disponibili per Swift è descritto in dettaglio qui. Essenzialmente, un modulo mappa simile al seguente deve essere creato:

    module AwesomeKitPrivate {  
      header "../InternalClass.h"
      export *
    }

    Questo può essere incluso in XCode utilizzando l’impostazione:

    SWIFT_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule  
    • Eccellente! Grazie. Preferito di gran lunga la tecnica più fare tutte le intestazioni pubblico.
    • Raccomanda fortemente la soluzione contro gli altri, e a guardare il link fornito dettagliate soluzione
    • Questa è la risposta giusta imo, ma a seconda di che cosa si sta cercando di raggiungere, si può essere in grado di ottenere via con l’utilizzo di alcune fornito da Apple macro che aiuta molto con Swift-Objc di interoperabilità: developer.apple.com/documentation/swift/…
    • Il header istruzione accetta un percorso relativo. Cosa fare quando si desidera aggiungere le intestazioni di un altro quadro?
  3. 10

    Vedere L’importazione di Objective-C in Swift .

    Per importare codice Objective-C in Swift dallo stesso quadro

    1. Sotto Impostazioni di generazione, in un Imballaggio, assicurarsi che la Definisce l’impostazione del Modulo per il framework di destinazione è impostato su “Sì”.
    2. Nel vostro ombrello file di intestazione, importare ogni Objective-C di intestazione che si desidera esporre Swift. Per esempio:

       #import "XYZ/XYZCustomCell.h" 
      #import "XYZ/XYZCustomView.h" 
      #import "XYZ/XYZCustomViewController.h" 
      
    3. Rendere il file inclusi pubblico, nell’ambito del “Intestazioni” sezione “Build Fasi”.

    4. Pulire e ricostruire.

    Swift, vedrà ogni intestazione di esporre pubblicamente il tuo ombrello di intestazione. Il contenuto dell’Obiettivo-C file in tale quadro sarà disponibile in qualsiasi Swift file all’interno di tale quadro di destinazione automaticamente, senza alcun istruzioni di importazione. Utilizzare il costume codice Objective-C con la stessa Swift sintassi da utilizzare con le classi di sistema.

    let myOtherCell = XYZCustomCell()
    myOtherCell.subtitle = "Another custom cell"

    Importante: la “ombrello file di intestazione” significa che il file {Nomemodulo}.h.
    BTW, il nome di destinazione è {Nomemodulo}.framework.

Lascia un commento