2015-05-15 18 views
16

Ho un framework Cocoa Touch realizzato con XCode 6 rivolto a iOS> = iOS8. Le impostazioni dell'architettura di destinazione di questo framework sono predefinite, ovvero non ho cambiato nulla. Le architetture sono impostate su standard (che non include x86_64, ne parleremo più avanti). Il framework stesso contiene sia il codice Swift che il codice Objective-C, quindi la sua creazione utilizzando la soluzione di libreria statica di Ray Wenderlich non funzionerà.Cocoa Touch Framework non riesce a eseguire il debug sul simulatore nel progetto di incorporamento

Ora, se creo un nuovo progetto e aggiungo il progetto framework, il progetto si basa sia sul dispositivo che sul simulatore, il che va bene.

Tuttavia, se prendo il file .framework e lo aggiungo a un progetto diverso proprio come si aggiungerebbe qualsiasi altro framework, il progetto non verrà creato per il simulatore. Bene, lo fa, ma si blocca perché non riesce a trovare le classi rilevanti. Funziona perfettamente sul dispositivo e l'archiviazione funziona esattamente come previsto.

Il progetto quadro stesso mi dà già un avvertimento; "Apple Mach-O Linker Warning - Directory non trovata per opzione .... (Debug-ophoneos)".

Qualsiasi aiuto sarebbe molto apprezzato!

risposta

7

Ho finalmente trovato la soluzione a questo problema. Come risulta, XCode non crea più binari grassi fuori dalla scatola. Non ho idea di quale potrebbe essere il ragionamento di Apple, mi sembra che a volte i ragazzi responsabili di XCode amano prendere in giro gli sviluppatori usando il loro prodotto ...

In ogni caso, puoi trovare la guida definitiva su come per creare un binario grasso per il simulatore e tutti i dispositivi iOS (sì, hai anche bisogno di lipo architetture diverse per ottenere un framework che funzioni su dispositivi nuovi e più vecchi): https://kodmunki.wordpress.com/2015/03/04/cocoa-touch-frameworks-for-ios8-remix/

In breve;

  • Creare un tocco framework Cocoa
  • Impostare le Architetture per arm64, ARMv7 e armv7s
  • Set "Costruire Active Architecture" a "no"
  • Set "Architetture validi" per arm64, armv1, e armv7s
  • Aggiungere il seguente script allo Schema di generazione del framework come Post-Azione archivio;

    set -e

    DEVICE_BIN = "$ {} OBJROOT/UninstalledProducts/$ {} TARGET_NAME .framework" SIMULATOR_BIN = "$ {} SYMROOT /../../../../ Prodotti/Debug-iphonesimulator/$ {TARGET_NAME}.quadro"

    ARCHIVE_PATH = "$ {SRCROOT}/_ Archive" rm-rf "$ {ARCHIVE_PATH}" mkdir "$ {ARCHIVE_PATH}"

    if [ "$ {Configurazione}"= "Release" ], poi

    if [-d "$ {} DEVICE_BIN"]; quindi DEVICE_PATH = "$ {} ARCHIVE_PATH/uscita" mkdir "$ {} DEVICE_PATH" cp -r "$ {} DEVICE_BIN" " $ {DEVICE_PATH} " fi se [-d" $ {SIMULATOR_BIN} "]; quindi SIMULATOR_PATH =" $ {ARCHIVE_PATH}/Debug " mkdir "$ {SIMULATOR_PATH}" cp -r "$ {DEVICE_BIN}" "$ {SIMULATOR_PATH}" lipo -create "$ {DEVICE_BIN}/$ {TARGET_NAME}" "$ {SIMULATOR_BIN}/$ {TARGET_NAME}" -Output "$ {} SIMULATOR_PATH/$ {} TARGET_NAME .framework/$ {} TARGET_NAME"

    fi

    fi

    exit 0;

Ciò creerà una directory _Archive nella directory del progetto in cui è possibile trovare i framework sia per il debug che per il rilascio.

Importante: A partire da oggi (22 maggio 2015) è necessario prima creare il progetto con il simulatore, quindi archiviare con un dispositivo. Altrimenti non otterrai un binario universale!

Questo post è stato creato al fine di evitare errori di collegamento morti, per gli aggiornamenti riguardanti il ​​processo di imballaggio, si prega SEMPRE di provare i passaggi pubblicati sul sito kodmunki che ho collegato sopra prima come i passaggi in questo post potrebbero essere obsoleti già!

+0

"Come risulta, XCode non crea più binari grassi fuori dalla scatola." Xcode non ha mai funzionato sia per il simulatore che per il dispositivo. Questi sono due SDK diversi. – quellish