Cu Xcode 6 avem capacitatea de a crea propriile noastre cadre dinamice de cacao .

touch

Simulatorul utilizează în continuare biblioteca pe 32 de biți

începând cu 1 iunie 2015, actualizările aplicației trimise în App Store trebuie să includă suport pe 64 de biți și să fie construite cu SDK-ul iOS 8 (developer.apple.com)

Trebuie să facem o bibliotecă grasă pentru a rula proiectul pe dispozitive și simulatoare. adică acceptă atât 32 cât și 64 de biți în Frameworks.

Dar nu am găsit manuale, cum să export cadru universal universal pentru integrarea viitoare cu alte proiecte (și partajați această bibliotecă cu cineva).

Iată pașii mei de reproducere:

Setați ONLY_ACTIVE_ARCH = NO în Setările de compilare

Adăugați suport armv7 armv7s arm64 i386 x86_64 la Architectures (sigur)

  1. Construiți Framework și deschideți-l în Finder:

  1. Adăugați acest cadru la un alt proiect

Rezultatul actual:

Dar până la urmă am încă o problemă cu executarea proiectului cu acest cadru pe dispozitive și simulator simultan.

dacă iau cadru din folderul Debug-iphoneos - funcționează pe dispozitive și primește erori la simulatoare: ld: simbol (uri) nu au fost găsite pentru arhitectura i386

Arhitecturile din fișierul de grăsime: CoreActionSheetPicker sunt: ​​armv7 armv7s arm64

dacă iau cadru din folderul Debug-iphonesimulator - funcționează pe simulatoare. și am o eroare pe dispozitiv: ld: simbolul (simbolurile) nu a fost găsit pentru arhitectura arm64

Arhitecturile din fișierul fat: CoreActionSheetPicker sunt: ​​i386 x86_64

Deci, cum să creați un cadru dinamic care să funcționeze pe dispozitive și simulatoare?

Actualizați:

Am găsit un „hack murdar” pentru acest caz. Vezi răspunsul meu de mai jos. Dacă cineva cunoaște un mod mai convenabil - vă rog, anunțați-mă!

6 Răspunsuri 6

Actualitatea acestui răspuns este: iulie 2015. Cel mai probabil lucrurile se vor schimba.

TLDR;

În prezent, Xcode nu are instrumente pentru exportul automat al cadrului universal de grăsime, astfel încât dezvoltatorul trebuie să recurgă la utilizarea manuală a instrumentului lipo. De asemenea, conform acestui radar înainte de a fi trimis către dezvoltatorul AppStore, care este consumatorul cadrului, trebuie să folosească și lipo pentru a scoate feliile de simulator dintr-un cadru.

Urmează un răspuns mai lung

Am făcut cercetări similare în subiect (linkul din partea de jos a răspunsului).

Nu găsisem nicio documentație oficială despre distribuția acestora, așa că cercetarea mea s-a bazat pe explorarea proiectelor Apple Developer Forums, Carthage și Realm și propriile experimente cu instrumente xcodebuild, lipo, de codificare.

Iată un citat lung (cu un pic de markup de la mine) din firul Apple Developer Forums Exportarea aplicației cu cadru încorporat:

Care este modalitatea corectă de a exporta un cadru dintr-un proiect cadru?

În prezent, singura modalitate este exact ceea ce ați făcut:

  • Construiți ținta atât pentru simulator, cât și pentru dispozitivul iOS.
  • Navigați la folderul DerivedData al Xcode pentru acel proiect și lipiți împreună cele două binare într-un singur cadru. Cu toate acestea, atunci când creați cadrul țintă în Xcode, asigurați-vă că reglați setarea țintă „Construiți doar arhitectură activă” la „NU”. Aceasta va permite Xcode să construiască ținta pentru mai multe tipuri de binarty (arm64, armv7 etc.). Acesta ar fi motivul pentru care funcționează din Xcode, dar nu ca un binar independent.

  • De asemenea, veți dori să vă asigurați că schema este setată la o versiune de versiune și să construiți ținta cadru împotriva versiunii. Dacă primiți în continuare o eroare de bibliotecă care nu este încărcată, verificați feliile de cod din cadru.

  • Utilizați lipo -info MyFramworkBinary și examinați rezultatul.

lipo -info MyFrameworkBinary

Rezultatul este i386 x86_64 armv7 arm64

  • Cadrele universale moderne vor include 4 felii, dar ar putea include mai multe: i386 x86_64 armv7 arm64 Dacă nu vedeți cel puțin acest 4, ar putea fi din cauza setării Arhitectură activă.

Aceasta descrie procesul cam la fel cum a făcut-o @skywinder în răspunsul său.

DETALII IMPORTANTE

înainte de trimiterea la AppStore iOS, binarele cadrului trebuie să fie eliminate din feliile simulatorului

Carthage are un cod special: CopyFrameworks și documentația corespunzătoare:

Acest script funcționează în jurul unei erori de trimitere din App Store declanșată de binare universale.

Realm are un script special: strip-frameworks.sh și documentația corespunzătoare:

Acest pas este necesar pentru a rezolva o eroare de trimitere în App Store atunci când arhivați binare universale.

Eu însumi am folosit Realm's strip-frameworks.sh care a funcționat perfect pentru mine fără modificări, deși, desigur, oricine este liber să scrie una de la zero.

Link-ul către subiectul meu pe care vă recomand să-l citesc deoarece conține un alt aspect al acestei întrebări: semnarea codului - Crearea cadrelor iOS/OSX: este necesar să le codați înainte de a le distribui altor dezvoltatori?