Dengan Xcode 6 kita mendapatkan kemampuan untuk membuat Dynamic sendiri Cocoa Frameworks
.
Karena:
Simulator masih menggunakan
32-bit
perpustakaan-
mulai 1 Juni 2015, pembaruan aplikasi yang dikirimkan ke App Store harus menyertakan dukungan 64-bit dan dibuat dengan iOS 8 SDK ( developer.apple.com )
Kita harus membuat perpustakaan besar untuk menjalankan proyek pada perangkat dan simulator. yaitu mendukung 32 dan 64 bit di Frameworks.
Tetapi saya tidak menemukan manual apa pun, cara mengekspor Kerangka lemak universal untuk integrasi di masa mendatang dengan proyek lain (dan membagikan pustaka ini dengan seseorang).
Inilah langkah saya untuk mereproduksi:
Diatur
ONLY_ACTIVE_ARCH=NO
diBuild Settings
Tambahkan dukungan
armv7 armv7s arm64 i386 x86_64
keArchitectures
(pasti)
- Bangun Kerangka dan buka di Finder:
- Tambahkan kerangka kerja ini ke proyek lain
Hasil sebenarnya:
Namun pada akhirnya saya masih menemui kendala dalam menjalankan project dengan framework ini pada perangkat dan simulator sekaligus.
jika saya mengambil kerangka kerja dari
Debug-iphoneos
folder - ini berfungsi pada perangkat dan mendapat kesalahan pada simulator:ld: symbol(s) not found for architecture i386
xcrun lipo -info CoreActionSheetPicker
Arsitektur dalam file lemak: CoreActionSheetPicker adalah: armv7 armv7s arm64
jika saya mengambil kerangka kerja dari
Debug-iphonesimulator
folder - ini berfungsi pada simulator. dan saya mengalami kesalahan pada perangkat:ld: symbol(s) not found for architecture arm64
xcrun lipo -info CoreActionSheetPicker
Arsitektur dalam file lemak: CoreActionSheetPicker adalah: i386 x86_64
Jadi, bagaimana cara membuat kerangka kerja dinamis yang berfungsi pada perangkat dan simulator?
Jawaban ini terkait dengan Xcode 6 iOS Membuat Kerangka Kerja Cocoa Touch - Masalah arsitektur tetapi tidak duplikat.
Memperbarui:
Saya menemukan "peretasan kotor" untuk kasus ini. Lihat jawaban saya di bawah . Jika seseorang tahu cara yang lebih nyaman - tolong beri tahu saya!
sumber
Jawaban:
Kenyataan dari jawaban ini adalah: Juli 2015. Kemungkinan besar segalanya akan berubah.
TLDR;
Saat ini Xcode tidak memiliki alat untuk ekspor otomatis kerangka lemak universal sehingga pengembang harus menggunakan
lipo
alat secara manual . Juga menurut radar ini sebelum diserahkan ke pengembang AppStore yang merupakan konsumen framework juga harus menggunakanlipo
untuk melepaskan potongan simulator dari suatu framework.Jawaban yang lebih panjang mengikuti
Saya melakukan penelitian serupa dalam topik (tautan di bagian bawah jawaban).
Aku tidak menemukan dokumentasi resmi tentang distribusi sehingga penelitian saya didasarkan pada eksplorasi Apple Developer Forum, proyek Carthage dan Realm dan percobaan saya sendiri dengan
xcodebuild
,lipo
,codesign
alat-alat.Berikut kutipan panjang (dengan sedikit markup dari saya) dari utas Forum Pengembang Apple Mengekspor aplikasi dengan kerangka kerja tersemat :
Ini menggambarkan proses yang kurang lebih sama seperti yang dilakukan @skywinder dalam jawabannya.
Beginilah cara Carthage menggunakan lipo dan Realm menggunakan lipo .
DETAIL PENTING
Ada radar: Xcode 6.1.1 & 6.2: kerangka kerja iOS yang berisi irisan simulator tidak dapat dikirimkan ke App Store dan diskusi panjang seputar itu di Realm # 1163 dan Carthage # 188 yang berakhir dengan solusi khusus:
sebelum dikirimkan ke AppStore kerangka kerja iOS, biner harus dilepaskan dari irisan simulator
Carthage memiliki kode khusus: CopyFrameworks dan bagian dokumentasi yang sesuai:
Realm memiliki skrip khusus: strip-frameworks.sh dan bagian dokumentasi yang sesuai:
Juga ada artikel bagus: Melucuti Arsitektur Yang Tidak Diinginkan Dari Perpustakaan Dinamis Di Xcode .
Saya sendiri menggunakan Realm
strip-frameworks.sh
yang bekerja untuk saya dengan sempurna tanpa modifikasi apapun meskipun tentu saja siapa pun bebas untuk menulis satu dari awal.Tautan ke topik saya yang saya sarankan untuk dibaca karena mengandung aspek lain dari pertanyaan ini: penandatanganan kode - Membuat Kerangka Kerja iOS / OSX: apakah perlu menandatanganinya sebelum didistribusikan ke pengembang lain?
sumber
Ini bukan solusi yang begitu jelas, tetapi hanya ada cara, yang saya temukan:
Diatur
ONLY_ACTIVE_ARCH=NO
diBuild Settings
Buka di
Products
folder konsol untuk kerangka Anda (Anda dapat membukanya dengan folder kerangka terbuka dancd ..
dari sana)Products
folder. Ini menciptakan Kerangka lemak di folder ini. (atau lakukan secara manual seperti yang dijelaskan di bawah pada 3. 4. )Atau:
Gabungkan 2 Kerangka ini menggunakan lipo dengan skrip ini (ganti
YourFrameworkName
ke nama Kerangka Anda)Ganti dengan biner baru salah satu kerangka kerja yang ada:
./YourFrameworkName.framework
- adalah biner lemak siap pakai! Anda dapat mengimpornya ke proyek Anda!Untuk proyek, yang tidak ada di Workspaces:
Anda juga dapat mencoba menggunakan inti ini seperti yang dijelaskan di sini . Tapi tampaknya, itu tidak berfungsi untuk proyek di ruang kerja.
sumber
Debug-
folder yang digunakan denganlipo -create
? Bisakah kerangka ini digunakan untukRelease
konfigurasi dan mengapa? Terima kasih.Jawaban @Stainlav sangat membantu tetapi yang saya lakukan adalah mengkompilasi dua versi kerangka kerja (satu untuk perangkat dan satu untuk simulator) dan kemudian menambahkan yang berikut ini
Run Script Phase
untuk secara otomatis menyalin kerangka kerja yang telah dikompilasi yang diperlukan untuk arsitektur yang sedang berjalanDengan cara ini saya tidak memiliki penggunaan
lipo
untuk membuat kerangka yang gemuk dan juga Realmstrip-frameworks.sh
untuk menghapus irisan yang tidak perlu saat mengirimkan ke App Store.sumber
${SRCROOT}/Frameworks/Active
folder. Mereka diganti untuk kerangka prakompilasi yang tepat untuk arsitektur aktif pada waktu kompilasi.lipo
.pada dasarnya untuk ini saya menemukan solusi yang sangat bagus. Anda hanya perlu mengikuti langkah-langkah sederhana ini.
dan hanya itu. Di sini kami menggabungkan simulator dan versi perangkat dari biner MyFramework yang ada di dalam MyFramework.framework. Kami mendapatkan kerangka kerja universal yang dibangun untuk semua arsitektur termasuk simulator dan perangkat.
sumber
Saya hanya ingin memperbarui jawaban hebat ini oleh @odm. Sejak Xcode 10,
CURRENT_ARCH
variabel tidak lagi mencerminkan arsitektur build. Jadi saya mengubah skrip untuk memeriksa platform sebagai gantinya:Saya juga menambahkan baris untuk menghapus direktori target sebelum menyalin, karena saya perhatikan bahwa file tambahan di subdirektori tidak akan ditimpa sebaliknya.
sumber
Jawaban Saya mencakup poin-poin di bawah ini:
Buat kerangka kerja yang berfungsi untuk simulator dan Perangkat
Bagaimana cara mengekspor Kerangka Sentuh Kakao "gemuk" (untuk Simulator dan Perangkat keduanya)?
Simbol tak terdefinisi untuk arsitektur x86_64
ld: simbol tidak ditemukan untuk arsitektur x86_64
Langkah 1: Pertama, bangun kerangka kerja Anda dengan target Simulator
Langkah 2: Setelah proses pembuatan simulator berhasil, sekarang buat kerangka kerja Anda dengan pemilihan target perangkat atau pemilihan Perangkat iOS Umum
Langkah 3: Sekarang pilih target kerangka kerja Anda dan untuk itu Di bawah "Build Phases" pilih "Add Run Script" dan salin kode skrip di bawah ini)
Langkah4: Sekarang akhirnya, buat lagi dan kerangka Anda siap untuk simulator dan kompatibilitas perangkat. Hore!!!!
[Catatan: Kita harus menyiapkan kedua kerangka kerja yang kompatibel sebelum langkah terakhir4 (simulator dan arsitektur perangkat kompatibel, jika tidak, ikuti langkah 1 dan 2 di atas dengan benar)
Lihat gambar referensi:
Masukkan kode di bawah ini ke dalam area shell:
sumber