Se pare că putem - teoretic - să construim o singură bibliotecă statică care să includă atât simulator, cât și iPhone și iPad.
Cu toate acestea, Apple nu are nicio documentație pe care să o găsesc, iar șabloanele implicite ale Xcode NU sunt configurate pentru a face acest lucru.
Caut o tehnică simplă, portabilă, reutilizabilă care poate fi realizată în Xcode.
- În 2008, am fost capabili să realizăm libere statice simple care includeau atât sim, cât și dispozitiv. Apple a dezactivat asta.
- De-a lungul anului 2009, am realizat perechi de lib-uri statice - una pentru sim, una pentru dispozitiv. Apple a dezactivat și asta.
Aceasta este o idee grozavă, este o abordare excelentă, dar nu funcționează: http://www.drobnik.com/touch/2010/04/universal-static-libraries/
- Există câteva erori în scriptul său, ceea ce înseamnă că funcționează doar pe mașina sa - ar trebui să folosească BUILT_PRODUCTS_DIR și/sau BUILD_DIR în loc să le „ghicimească”.
- Cel mai recent Xcode Apple vă împiedică să faceți ceea ce a făcut - pur și simplu nu va funcționa, datorită modificării (documentate) a modului în care Xcode procesează țintele)
Un alt întrebător SO a întrebat cum să o facă FĂRĂ xcode și cu răspunsuri care s-au concentrat pe partea arm6 vs arm7 - dar a ignorat partea i386: Cum compilez o bibliotecă statică (grăsime) pentru armv6, armv7 și i386
- De la ultimele modificări ale Apple, partea Simulator nu mai este aceeași cu diferența arm6/arm7 - este o problemă diferită, vezi mai sus)
10 Răspunsuri 10
Copiere/lipire ușoară a ultimei versiuni (dar instrucțiunile de instalare se pot modifica - vezi mai jos!)
Biblioteca lui Karl necesită mult mai mult efort pentru configurare, dar o soluție mult mai frumoasă pe termen lung (vă convertește biblioteca într-un Framework).
Utilizați acest lucru, apoi modificați-l pentru a adăuga suport pentru versiunile de arhive - c.f. Comentariul lui @ Frederik de mai jos cu privire la modificările pe care le folosește pentru a face acest lucru să funcționeze frumos cu modul Arhivă.
MODIFICĂRI RECENTE: 1. Adăugat suport pentru iOS 10.x (menținând în același timp suport pentru platforme mai vechi)
Informații despre cum să utilizați acest script cu un proiect încorporat-într-un alt-proiect (deși recomand cu tărie NU să faceți asta, vreodată - Apple are câteva erori show-stopper în Xcode dacă încorporați proiecte unul în celălalt, de la Xcode 3.x până la Xcode 4.6.x)
Script bonus pentru a vă permite să includeți automat pachete (adică să includeți fișiere PNG, fișiere PLIST etc. din biblioteca dvs.!) - consultați mai jos (derulați în jos)
acum acceptă iPhone5 (folosind soluția Apple la bug-urile din lipo). NOTĂ: instrucțiunile de instalare s-au schimbat (probabil că pot simplifica acest lucru schimbând scriptul în viitor, dar nu vreau să-l risc acum)
secțiunea „copiați antetele” respectă acum setările de construcție pentru locația antetelor publice (prin amabilitatea lui Frederik Wallner)
S-a adăugat setarea explicită a SYMROOT (poate că este nevoie și de OBJROOT să fie setat?), Mulțumită lui Doug Dickinson
SCRIPT (acesta este ceea ce trebuie să copiați/lipiți)
Pentru instrucțiuni de utilizare/instalare, consultați mai jos
- Creați un proiect lib static
- Selectați ținta
- În fila „Construiți setări”, setați „Construiți numai arhitectură activă” la „NU” (pentru toate articolele)
- În fila „Construiți fazele”, selectați „Adăugați. Fază de construire nouă. Fază de construire a scriptului de rulare nouă”
- Copiați/lipiți scriptul (de mai sus) în casetă
. UTILIZARE OPȚIONALĂ A BONUSULUI:
- OPȚIONAL: dacă aveți antete în bibliotecă, adăugați-le la faza „Copiere anteturi”
- OPȚIONAL:. și glisați-le/fixați-le din secțiunea „Proiect” în secțiunea „Public”
- OPȚIONAL:. și vor fi exportate AUTOMAT de fiecare dată când creați aplicația, într-un subdirector al directorului „debug-universal” (vor fi în usr/local/include)
- OPȚIONAL: NOTĂ: dacă încercați, de asemenea, să glisați/fixați proiectul într-un alt proiect Xcode, acesta expune o eroare în Xcode 4, unde nu poate crea un fișier .IPA dacă aveți anteturi publice în proiectul dvs. drag/drop. Soluția: nu încorporați proiecte xcode (prea multe erori în codul Apple!)
Dacă nu găsiți fișierul de ieșire, iată o soluție:
Adăugați următorul cod chiar la sfârșitul scriptului (prin amabilitatea lui Frederik Wallner): deschideți „$”
Apple șterge toate ieșirile după 200 de linii. Selectați-vă ținta și, în faza de executare a scriptului, TREBUIE să debifați: „Afișați variabilele de mediu în jurnalul de compilare”
dacă utilizați un director personalizat „build output” pentru XCode4, atunci XCode pune toate fișierele „neașteptate” în locul greșit.
- Construiește proiectul
- Faceți clic pe ultima pictogramă din dreapta, în zona din stânga sus a Xcode4.
- Selectați elementul de sus (aceasta este „cea mai recentă versiune” a dvs. Apple ar trebui să îl selecteze automat, dar nu s-au gândit la asta)
- în fereastra principală, derulați până jos. Ultima linie ar trebui să citească: lipo: pentru configurația curentă (Depanare) creând fișierul de ieșire: /Users/blah/Library/Developer/Xcode/DerivedData/AppName-ashwnbutvodmoleijzlncudsekyf/Build/Products/Debug-universal/libTargetName.a
. aceasta este locația construcției dvs. universale.
Cum să includeți fișiere „non-sourcecode” în proiectul dvs. (PNG, PLIST, XML etc.)
- Faceți totul de mai sus, verificați dacă funcționează
- Creați o nouă fază Run Script care vine DUPĂ PRIMA (copiați/lipiți codul de mai jos)
- Creați o nouă țintă în Xcode, de tip „pachet”
- În PROIECTUL PRINCIPAL, în „Construiți fazele”, adăugați noul pachet ca ceva de care „depinde” (secțiunea de sus, apăsați butonul plus, derulați în jos, găsiți fișierul „.bundle” în Produsele dvs.)
- În NOUA ȚINTĂ DE BUNLE, în „Construiți fazele”, adăugați o secțiune „Copiați resursele pachetului” și trageți/fixați toate fișierele PNG etc.
Script pentru copierea automată a pachetelor încorporate în același folder ca biblioteca statică FAT:
- Ios - Cum se exportă; gras; Cocoa Touch Framework (pentru Simulator și Dispozitiv) Overflow Stack
- Java - Conversia diferitelor tipuri de unități în biblioteca JScience - Stack Overflow
- Cum să schimbați imaginea subțire în imagine grasă în iPhone SDK Stack Overflow
- Javascript - Descărcare Eliminarea conținutului dintr-un iFrame - Stack Overflow
- Javascript - Cum fac un tabel de date v în dungi în Vuetify Stack Overflow