2011-01-11 21 views
41

Ho alcune classi Objective-C, che attualmente utilizzo in un'applicazione Cocoa (Mac OS X) e un'applicazione Cocoa-Touch (iOS). Attualmente, quando aggiorno queste classi, devo copiare i file aggiornati .h e .m in entrambi i progetti. Non è un grosso problema, ma li userò in molti altri progetti.Come creare una libreria statica Objective-C?

Quindi, voglio creare queste classi in una libreria statica Objective-C. E quindi link a quella libreria in tutti gli altri progetti.

C'è un modo per creare una libreria statica in modo tale che funzioni sia con le applicazioni Cocoa che con quelle al cacao?

Ho provato a creare una libreria statica Cocoa con queste classi, ma ottengo vari errori quando provo a collegarmi a quella libreria nella mia applicazione Cocoa, e sono sicuro che provengono dal fatto che io non sto facendo bene

Quindi, come si crea una libreria statica Objective-C il a destra in modo? Devo creare una libreria statica Cocoa-Touch e Cocoa? O posso solo farne uno? Come è fatto?

Esistono tutorial ben organizzati su questo argomento?

Ho cercato sul Web e non riesco a trovare un tutorial completo su questo argomento, quindi ho posto la domanda qui, nella speranza che una grande risposta verrà pubblicata e questa domanda può servire come una risorsa per me e per futuri interrogatori.

+0

Buona domanda e vorrei che ci fossero altri esempi di come fare bene. Dò un'occhiata al tutorial che hai collegato e vediamo se c'è qualcosa che posso aggiungere. il tuo obiettivo è quello di costruire una lib statica universale che puoi condividere con altre app come risorsa binaria o vuoi creare una dipendenza dal progetto sul prodotto di costruzione di alcuni progetti condivisi? – Jonah

+0

libreria statica universale. :) – Alex

+0

Controlla questo documento Apple: https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/Articles/configuration.html –

risposta

25

Per XCode 5. Queste risposte sembrano un po 'obsolete. Puoi vedere i passaggi principali qui http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial. Ma Xcode 5 ha molto più lavoro per te e ora funziona quasi come vuoi tu.

1.Creare nuova libreria statica App in Xcode New Static Library in Xcode

2.You può cancellare tutti i file che crea e aggiungere il proprio. Aggiungere i vostri metodi ecc Code Code Code

3.Little problema con librerie statiche, è che si può costruire solo sia per il dispositivo o eseguire nel simulatore. Quindi abbiamo bisogno di creare una libreria che supporti le architetture ARM e i386, per fare questo abbiamo bisogno di creare un binario universale (quindi supporterà il simulatore e le build del dispositivo).

Creare una nuova destinazione (File> Nuovo> Destinazione). New Target

4.Select nuova destinazione quindi aggiungere una nuova fase di costruzione (Editor> Aggiungi Fase di Costruzione> Aggiungi Esegui script di build Fase New Build Phase

5.Select la fase di costruzione e inserire lo script da questo link in corsa sceneggiatura finestra. https://gist.github.com/sponno/7228256

Run Script Code

6.Now è necessario per costruire ciascuna architettura (simulatore e dispositivo iOS)

012.351.641.061.

6.2.Select nostro libary e poi iOS periferiche, fare clic costruire o run (Command + B)

6.3.Then per il simulatore (selezionare l'Icon Library molto alto a sinistra Xcode e poi il simulatore iOS) enter image description here

7. Ora si desidera creare l'icona BullsEye> Dispositivo iOS. Questo sarà l'obiettivo aggregato e unirà le nostre due librerie in un nuovo file universale.

8. Vedi se tutto ha funzionato. Espandere la cartella "Prodotti" nell'albero a sinistra, fare clic destro sul file che termina con ".a" e "Mostra nel Finder"

9.Se questo funziona, si dovrebbero vedere i seguenti file nel Finder. Vedrete il Library .a file and include files

10. La ultimo passo è semplice, è sufficiente trascinare il file "library.a e include la cartella nel nuovo progetto Xcode. enter image description here

enter image description here

Nella tua nuovo progetto, non devi fare altro, se non importare i file di intestazione che vuoi usare, ma non devi cambiare i flag di collegamento, né i percorsi di ricerca dell'intestazione.Esterà solo:

(qualsiasi feedback apprezzato) o si prega di modificare il mio post per migliorare la chiarezza.

** PUNTI BONUS *** Installare VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode e utilizzarlo per documentare qualsiasi file header.h che condividerai con la libreria.

Ora chiunque stia utilizzando la libreria può scegliere + clic per visualizzare l'aiuto contestuale per le classi.

Context Aware Help based on header file

+1

Questo è fantastico! Xcode e Apple hanno fatto molta strada da quando ho fatto la mia domanda iniziale e questo è il modo in cui lo faccio ora. http://cocoapods.org/ sembra anche promettente se sei nel modo di fare rubino. – Alex

+1

Risposta stupenda. Grazie molto! – CalZone

12

Alla fine ho trovato this tutorial e in realtà ha funzionato davvero bene. Se qualcuno vorrebbe ancora offrire assistenza, si prega di farlo e molto probabilmente lo inviterò e contrassegnarlo come risposta accettata.

+2

Puoi semplicemente contrassegnarlo come risposta accettata? – FreeAsInBeer

+0

Qualcuno può fare riferimento a un tutorial più recente? – Stavash

+0

http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial È quello che sto usando. Fine 2013 quindi più attuale. –

11

(utilizzando il tutorial come punto di partenza)

ora creare un secondo obiettivo nel xcodeproj libreria per l'altro sistema operativo.

configurare le impostazioni sdk di ogni target utilizzando un file xcconfig (uno per ciascun sistema operativo). riutilizzare questi file xcconfig nelle altre librerie. questo consente anche un facile controllo globale delle impostazioni di costruzione.

configurare i riferimenti di collegamento e dipendenza nelle destinazioni (app) come al solito, ma selezionare la libreria di destinazione corretta.

aggiungere un obiettivo aggregato al progetto di libreria per la semplice meta-compilazione/manutenzione facile.

- o -

fare tutto con l'introduzione di uno strato di scripting o la creazione di uno strumento di generazione personalizzata.

+1

+1, pensieri interessanti. – Alex

2

Ho trovato anche questo "Building a Static Library with Jenkins" che è veramente buono. Parla di come configurare correttamente una lib statica, come ottenere da Jenkins la creazione automatica e quindi posizionare i file .a e .h risultanti in un punto da cui puoi prelevarli.

Combina quello con CocoaPods o Maven (non l'ho ancora fatto) e potresti avere un piccolo ecosistema piuttosto carino.

Problemi correlati