Sfortunatamente non è possibile utilizzare IBDesignables
con librerie statiche (o framework statici).
Questa non è una buona risposta, ma voglio dare qualche contesto sul perché.
Sembra che il modo in Interface Builder classi carichi possano essere visualizzate come designables è di caricare effettivamente dinamicamente la dinamica quadro che si crea (e non binario della tua app), e utilizzando le classi direttamente (dopo aver cambiato usando il Runtime Objective-C abbastanza un po ').
Si può vedere che Interface Builder non viene caricato la vostra applicazione, e solo i singoli quadri con questi passaggi:
- Creare un nuovo progetto Xcode
- creare un nuovo target quadro nel progetto
- Aggiungere una classe che è
IBDesignable
- Nel storyboard dalla tua app creare una vista e impostare la sua classe per classe del framework
IBDesignable
- Fare clic su "Aggiorna tutte le viste" nel menu "Editor"
- Nella cartella DerivedData del progetto, nella directory
IBDesignables
, è possibile notare che è stato creato solo il target del framework.
Il generatore di interfaccia carica effettivamente il framework utilizzando dlopen
manualmente. Puoi anche vedere che per facilitare questo quando costruisci il tuo framework, Interface Builder aggiunge effettivamente 2 RPATH
s al tuo binario, quindi le dipendenze possono essere trovate nei percorsi personalizzati (puoi vederlo con otool -L frameworkbinary
). Questo metodo di caricamento del tuo binario non è possibile con le librerie statiche.
Per quello che vale Penso che il miglior soluzione per questo è di costruire quadri dinamici, invece di librerie statiche, ma solo per IBDesignable
costruisce. Dovrai fare un po 'di lavoro di configurazione per farlo, e non è facile aggirare Xcode per farlo funzionare, ma se lo provi, puoi usare sia il percorso di compilazione, sia l'ambiente, per differenziare le build IBDesignable
vs build "normali".
fonte
2017-06-24 05:19:48
Non ha specificato che stava usando CocoaPods. Questo problema sembra influenzare IB_DESIGNABLES che risiede su una libreria statica e viene utilizzato su storyboard o xib di un altro progetto. The use_frameworks! la direttiva sembra dire a CocoaPods di importare framework invece di librerie statiche. –