2014-11-01 11 views
13

Nelle ultime 24 ore ho provato a utilizzare due diverse librerie Swift di terze parti: Swiftz e Sleipnir. Presumo che dovrebbe essere abbastanza facile in quanto entrambi i progetti forniscono semplicemente uno schizzo su come consumarli. Tuttavia, nessuno dei due fornisce dettagli sufficienti da seguire. Ho provato quanto segue: aggiungere i progetti al mio spazio di lavoro, trascinare/rilasciare i framework compilati nel mio navigatore di progetto, aggiungere i framework alla fase "Link Binary with Libraries". In tutti i casi, ricevo un errore del linker che mi informa che non è possibile trovare il framework.Come collegarmi a un framework Swift di terze parti

Ho solo bisogno di un collegamento alla documentazione effettiva che spiega come farlo. Non sono stato in grado di trovarlo.

Modifica: dimentica anche le librerie di terze parti. Come consumi le tue librerie? Ho una libreria di Cocoa Framework che ho scritto. Ora ho aggiunto un progetto della riga di comando allo stesso spazio di lavoro. Certo sarebbe bello se potessi accedere al mio nuovo framework dalla mia app a linea di comando. Ho fatto clic sul mio progetto della riga di comando. Cliccato su Build Fhases e trascinato il mio framework personalizzato nella sezione Link Binary with Libraries. Tutto va bene. Quando eseguo la mia app ottengo il seguente errore:

dyld: Library not loaded: @rpath/libswiftAppKit.dylib 
    Referenced from: /Users/mgwelch/Library/Developer/Xcode/DerivedData/SwiftParsing- 
    btkaoklayoffujgrkklfyffpipih/Build/Products/Debug/Parsing.framework/Versions/A/ 
    Parsing 
    Reason: image not foundI 
+0

https://developer.apple.com/swift/<- questo veloce? –

+0

Sì, è quello che intendo. –

+0

Dovresti essere in grado di trascinare e rilasciare il file di progetto del framework dal Finder nel progetto in cui vuoi utilizzarlo (il progetto quadro deve * non * essere aperto in Xcode in quel momento). Lo faccio sempre;) quelli sono i cosiddetti sottoprogetti e vengono creati automaticamente con il tuo progetto. Hai solo bisogno di aggiungere l'obiettivo del framework nel progetto a cui vuoi aggiungere il framework (link con binario o qualcosa di simile, quando fai clic sul tuo file di progetto è nella prima scheda in fondo). – HAS

risposta

6

Ok, non molti utenti hanno familiarità con i framework Swift, credo.

Bene, sto ricevendo assistenza da uno sviluppatore di framework su un problema che ho sollevato su come utilizzare il loro framework. Ho ancora problemi, ma altri possono essere interessati a seguire la conversazione di vedere alcuni dei passaggi coinvolti

https://github.com/typelift/swiftz/issues/114

Istruzioni dettagliate sono forniti a questo problema. Sentiti libero di provarli. Segnalo come chiuso.

UPDATE Ho dichiarato questo in un commento ma potrebbe non essere visto. Stavo cercando di scrivere uno strumento da riga di comando. In questo momento con XCode 6.1 non sembra possibile utilizzare un framework di terze parti in uno strumento da riga di comando. In effetti ho scritto un problema contro un altro progetto affermando che i loro obiettivi da riga di comando non funzionano più: https://github.com/railsware/Sleipnir/issues/17

Forse questo ha funzionato in una precedente versione beta, ma non sembra più possibile.

+0

Continuo a ricevere un errore di runtime: 'dyld: Libreria non caricata: @ rpath/libswiftAppKit.dylib' –

+1

Stavo tentando di scrivere un'app della riga di comando e, secondo uno dei contributori dei progetti swiftz, non è possibile usa i dylibs con i progetti della riga di comando, qualcosa che penso sarebbe bello se XCode ti informasse di quando hai tentato di farlo. –

+0

Volevo anche scrivere uno strumento da riga di comando. Questo non è ancora possibile in XCode 6.4? – codecowboy

2

Provare a verificare Runpath Search Paths in Impostazioni di compilazione. Controlla se il percorso relativo alla directory Frameworks è corretto.

LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/../Frameworks @loader_path/Frameworks 
+0

Grazie. Vedi il mio commento aggiornato. Secondo i miei risultati, ciò che stavo tentando di fare non è possibile in XCode 6.1. Ma chiedo a tutti quelli che incontro se possono farlo. Puoi scrivere uno strumento da riga di comando e collegarlo a un framework di terze parti? Se è così, avresti alcuni dati per contraddire le mie scoperte. –

+0

Per rispondere alla tua domanda: La mia voce "Percorsi di ricerca percorso" era vuota. Copia/incolla il tuo suggerimento per un valore. Ora ricevo un errore 'dyld: Libreria non caricata: @ rpath/libswiftCore.dylib'. Quindi sembra che abbiamo modificato un po 'i sintomi del problema. Prima cercava libswiftAppKit, ma non lo so per certo. Questo era tutto un paio di settimane fa e stavo provando con un progetto diverso allora. Ma quello che sto cercando di fare ora è lo stesso (link a un framework), solo un progetto diverso. –

+0

Questa è la prima volta che mi è stato detto che non era possibile al momento: https://github.com/typelift/swiftz/issues/114#issuecomment-62075011 –

2

Partenza il seguente documento (Embedded Swift frameworks in OS X command line tools), descrive un processo che funziona per l'incorporamento quadri Swift in strumenti a linea di comando.

È più un work-around che una soluzione, ma funziona. Idealmente, la gente di Apple dovrebbe mettere un segno amichevole in lettere grandi, in grassetto, rosse quando si crea una app a riga di comando in Swift per evitare di perdere tempo con problemi come questo.

Ho seguito il processo per Swift 1.1 e Swift 1.2 senza problemi. L'unica po 'complicato esso per ottenere argv a rapida, ma si può fare questo in Objective-C in main.m con:

int main(int argc, const char * argv[]) { 

    @autoreleasepool { 

     NSMutableArray *paramArray = [[NSMutableArray alloc] init]; 
     for (int i=0; i<argc ;i++) { 
      [paramArray addObject:[[NSString alloc] initWithUTF8String:argv[i]]]; 
     } 
     return (int) [[Whatever sharedInstance]manage:argc param:paramArray]; 
    } 
    return 0; 
} 
+0

Grazie, darò un'occhiata. –

+0

Cool, felice che il processo abbia funzionato per te! – ColemanCDA

+0

@ColemanCDA richiede che lo strumento della riga di comando sia scritto in Objective-C? Sai se questo è ancora il caso di Swift2/XCode 7? – codecowboy

Problemi correlati