2009-06-17 9 views

risposta

0

Ho pensato alla stessa cosa. Finora tutto ciò che sono stato in grado di fare è creare un progetto nel modo in cui lo voglio e copiarlo in un'altra cartella per iniziare un nuovo progetto. Quindi rinominare il file .xcodeproj e aprirlo. Quindi personalizzo le basi (icone, default.png, il target, l'eseguibile) prima di costruire la nuova app.

È goffo, e NON il modo in cui il riutilizzo del codice dovrebbe funzionare. Sono sicuro che ci sono soluzioni migliori. Forse un uso intelligente del controllo del codice sorgente/controllo della versione? Forse qualcosa incorporato in XCode? Altre idee? Non vedo l'ora di vedere altri post qui.

9

Apple impedisce l'utilizzo di framework personalizzati su iPhone. Ma puoi usare buone vecchie librerie statiche. Nel 3.0 GM SDK c'è persino un modello di progetto per questo, ma puoi anche semplicemente impostare un target di libreria statico tu stesso.

+0

risposta di vedere Michael sotto. La creazione di framework è possibile, richiede solo un po 'di approccio manuale. – DougW

0

@Nikolai Ruhe - dove esattamente Apple vieta l'uso di framework personalizzati su iPhone? Ho letto sia la iOS Developer Program License Agreement che le linee guida per la revisione dell'App Store e non riesco a trovare alcun riferimento a tale divieto.

Non vedo perché Apple consentirebbe l'uso di librerie statiche personalizzate e vieterebbe l'uso di framework personalizzati. Forse mi manca qualche altro documento legale?

+0

forse è di arte tecnica, come è difficile/impossibile creare iphone-plugins all'interfaccia builder – hfossli

+0

Nessun codice può essere collegato agli eseguibili iOS in fase di esecuzione. Questo è ciò che accade con dylibs, framework e plugin; gli archivi statici sono collegati in fase di compilazione. Questo è presumibilmente fatto per impedire alle applicazioni di essere subdoli e violare i termini dell'SDK, o di essere sfruttati non intenzionalmente e mettendo a rischio i dati dell'utente. (Come la tua rubrica, ad esempio.) –

+0

"Nota: la creazione di framework personalizzati non è supportata in iOS." http://developer.apple.com/library/ios/#documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1 –

5

Ho creato modelli per Xcode 4 che consentono di creare framework iOS universali (che funzionano sia su dispositivo che su simulatore).

Una volta installati i modelli, è sufficiente selezionare "Statico iOS Framework" quando si crea un nuovo progetto e fa il resto. Funziona anche con i test unitari.

https://github.com/kstenerud/iOS-Universal-Framework

+0

Molto bello. Grazie per averlo condiviso! –

0

vedi questo link, si può assolutamente creare un quadro e utilizzarlo. Perché Apple rifiuterà la tua app se strutturi il tuo programma. see this link

Il framework non è altro che l'organizzazione strutturale del codice. Non esiste un approccio diretto per farlo. ma puoi ottenerlo usando un fascio e un bersaglio aggraziato. Aggiungi un nuovo pacchetto al tuo progetto e fai il seguente SDK di base: ultimo iOS (iOS X.X) (nella X.X apparirà il numero dell'ultimo SDK iOS installato sulla tua macchina). Architetture: $ (ARCHS_STANDARD_32_BIT) armv6 (è molto importante essere esattamente questo valore compreso lo spazio prima di "armv6") Questa impostazione è valida per Xcode 4.2, se si utilizza una versione precedente, utilizzare "Standard (armv6 armv7)" opzione. (i valori per questa proprietà dipendono dal valore dell'oggetto sotto, quindi impostalo per primo). Costruisci solo architettura attiva: NO (altrimenti non possiamo compilare armv6 e armv7 allo stesso tempo). Architettura valida: $ (ARCHS_STANDARD_32_BIT) (è molto importante essere esattamente questo valore). Se il tuo Xcode mostra due linee con armv6 e armv7, cancella e inserisci questo valore in una sola riga. Dead Code Stripping: NO. Collegamento con librerie standard: NO. Tipo Mach-O: file oggetto rilocabile. Questo è il cambiamento più importante. Qui, chiediamo al compilatore di trattare il Bundle come un file rilocabile, in questo modo possiamo trasformarlo in un framework con l'impostazione wrapper. Altri linker flag: questa impostazione non è obbligatoria, ma se si prevede di utilizzare qualsiasi tipo di codice C++ (.cpp o.mm) in questo contesto, Chris Moore (nei commenti) consiglia di utilizzare l'opzione "-lstdC++". In questo caso potrebbe essere una buona idea usare anche "-ObjC" per evitare conflitti nei vecchi compilatori. Estensione del wrapper: quadro. Qui cambiamo il pacchetto in un framework. Per Xcode, frameworks è solo una cartella con estensione .framework, che ha all'interno di una o più fonti binarie compilate, risorse e alcune cartelle, una cartella, solitamente chiamata Intestazioni, contiene tutte le intestazioni pubbliche. Genera simboli debug: NO (questa è un'impostazione molto importante, altrimenti il ​​framework non funzionerà su altri computer/profili). Prefix Preble Header: NO.

creare un obiettivo aggrigated e copiare

# Sets the target folders and the final framework product. 
FMK_NAME=FI 
FMK_VERSION=A 

# Install dir will be the final output to the framework. 
# The following line create it in the root folder of the current project. 
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework 

# Working dir will be deleted after the framework creation. 
WRK_DIR=build 
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework 
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework 

# Building both architectures. 
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos 
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator 

# Cleaning the oldest. 
if [ -d "${INSTALL_DIR}" ] 
then 
rm -rf "${INSTALL_DIR}" 
fi 

# Creates and renews the final product folder. 
mkdir -p "${INSTALL_DIR}" 
mkdir -p "${INSTALL_DIR}/Versions" 
mkdir -p "${INSTALL_DIR}/Versions/${FMK_VERSION}" 
mkdir -p "${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources" 
mkdir -p "${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers" 

# Creates the internal links. 
# It MUST uses relative path, otherwise will not work when the folder is copied/moved. 
ln -s "${FMK_VERSION}" "${INSTALL_DIR}/Versions/Current" 
ln -s "Versions/Current/Headers" "${INSTALL_DIR}/Headers" 
ln -s "Versions/Current/Resources" "${INSTALL_DIR}/Resources" 
ln -s "Versions/Current/${FMK_NAME}" "${INSTALL_DIR}/${FMK_NAME}" 

# Copies the headers and resources files to the final product folder. 
cp -R "${DEVICE_DIR}/Headers/" "${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers/" 
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/" 

# Removes the binary and header from the resources folder. 
rm -r "${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/Headers" "${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/${FMK_NAME}" 

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product. 
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}" 

rm -r "${WRK_DIR}" 

questo nello script ed esecuzione del target aggrigate per ottenere il quadro

+0

Si prega di interrompere solo lo spamming link al tuo sito web. –

+0

@AndrewBarber Pensi che sia il mio sito web? se rispondo semplicemente alla domanda? Sarei molto più felice se questo fosse il mio sito web :) –

+0

Si prega di notare che è necessario inserire i punti utili di una risposta qui, su questo sito, o il tuo post rischia di essere cancellato come ["Non è una risposta"] (http: //meta.stackexchange.com/q/8259). Puoi ancora includere il link se lo desideri, ma solo come un "riferimento". La risposta dovrebbe essere autonoma senza bisogno del collegamento. –