Saya harus mengakui bahwa dengan dirilisnya iOS 8 saya agak bingung tentang kerangka kerja dinamis dan statis di iOS.
Saya mencari cara untuk mendistribusikan pustaka yang saya buat, dan saya perlu mendukung iOS 7 ke atas. (Catatan: Ini akan menjadi kerangka kerja berpemilik. Saya tidak dapat menggunakan buah kakao, dan saya juga tidak dapat mendistribusikan sumbernya). Inilah yang sudah saya ketahui:
- iOS 8 memperkenalkan "kerangka kerja tertanam" untuk iOS, tetapi, seperti yang saya pahami, kerangka tersebut tidak berfungsi untuk iOS 7, hanya untuk iOS 8 dan yang lebih baru.
- Saya memiliki opsi untuk mendistribusikan perpustakaan saya sebagai perpustakaan statis (file .a) dan juga mendistribusikan header. Saya tahu bahwa ini adalah cara umum untuk menghadapi situasi tersebut, tetapi saya ingin menemukan sesuatu yang lebih sederhana dari itu (dan juga menggabungkan beberapa sumber dengannya, jika memungkinkan).
- Saya juga menemukan bahwa iOS 7 tidak mendukung pustaka .framework dinamis (hanya statis) karena tidak mendukung penautan dinamis. Tetapi iOS 8 melakukannya, serta tautan statis.
Dan inilah pertanyaan saya tentang informasi ini:
- Saya melihat bahwa saya dapat membuat target .framework, dan membuatnya statis, dengan mengubah tipe Mach-O menjadi "pustaka statis. Apakah itu cukup untuk mendukung iOS 7 tanpa masalah, dan juga mendistribusikan pustaka saya sebagai .framework bundle? Jika demikian, mengapa "kerangka kerja yang disematkan" di iOS 8 menjadi masalah besar, seperti yang disarankan oleh banyak sumber daya di internet? Apakah saya melewatkan sesuatu?
- Apakah perlu untuk membuat kode .framework seperti yang saya lakukan dengan aplikasi lain yang saya buat?
- Bagaimana jika saya perlu menyertakan sumber daya lain (seperti Data Inti atau Gambar) dengan file .framework saya? Apakah saya perlu membuat file .bundle terpisah untuk itu?
ios
frameworks
static-libraries
static-linking
ios-frameworks
csotiriou.dll
sumber
sumber
Jawaban:
Sebelum iOS8, Xcode hanya mengizinkan opsi untuk membuat pustaka statis untuk iOS. Masalah umum yang terjadi adalah kami harus mengirimkan biner dan header secara terpisah.
Kemudian, beberapa pengembang datang dengan ide untuk membuat 'kerangka kerja statis'. [.framework hanyalah folder dengan tautan simbolis ke lib dan header]. Salah satu contohnya adalah https://github.com/jverkoey/iOS-Framework
Opsi ini akan berfungsi untuk iOS 7 atau 8 atau sebelumnya. Karena mereka hanyalah pustaka statis dengan kemudahan memaketkan file header.
Adapun pertanyaan Anda tentang sumber daya, kami perlu menggabungkannya dalam '.bundle' .. Untuk pengirimannya, saya tidak yakin apakah kami dapat menyertakannya di folder .framework .. Dulu saya biasa mengirimkan libs saya sebagai kerangka statis dan bundel ...
Namun opsi di atas tidak akan berfungsi untuk Anda jika Anda menggunakan Swift. Xcode tidak mendukung pembuatan pustaka statis yang menyertakan kode swift.
Anda harus menggunakan kerangka kerja Dinamis jika ada penggunaan yang cepat. Secara teori, kerangka kerja Dinamis berfungsi di iOS7 .. Tapi, saya pikir iTunes Connect akan menolak jika aplikasi menargetkan iOS7 dan menggunakan kerangka kerja Dinamis :-).
Semoga ini membantu
sumber
Dengan Xcode 9 dan seterusnya, Anda juga dapat membuat kerangka statis untuk Swift. Ini dimungkinkan karena kompatibilitas sumber ABI. Yang perlu Anda lakukan hanyalah mengubah pengaturan yang
Mach-O type
sedang dibangun dari target kerangka kerja. Teknik ini juga berlaku untuk Hybrid Frameworks (kerangka kerja dengan kode Swift dan Objective-C).sumber
static
ataudynamic
nama biasanya poin menjadiLinking
[Tentang] jenisKerangka kerja bisa
static
ataudynamic
[Periksa statis atau dinamis]Anda dapat mengubah format pustaka yang akan berdampak pada a
Linker
dengan mengubahFramework target -> Build Settings -> Mach-O Type
[About] menjadiStatic Library
atauDynamic Library
. Secara default Xcode memilikiDynamic Library
nilai.Bergantung pada pengaturan ini, berbagai jenis biner akan dihasilkan
Setelah Anda berhasil mengonfigurasi konsumen [Link vs Embed]
Static Linker
ld : pada waktu kompilasi akan memasukkan semua kode daristatic library
ke dalam file objek yang dapat dieksekusi.Dynamic Linker
dyld : pada waktu muat / jalankan akan mencoba menemukan kerangka tertanam menggunakan@rpath
[About] dan menautkannya[Kosa kata]
sumber
Swift tidak berfungsi di lib statis. Jika Anda harus menggunakan kerangka dinamis, Anda harus mengatur min iOS ke 8.0 karena AppStore menolak ios 7 dengan kerangka dinamis
sumber
Saya tidak memiliki semua jawaban tetapi saya akan mencoba menjawab beberapa pertanyaan Anda di sini.
Anda akan mendapatkan peringatan untuk menggunakan kerangka kerja ini di iOS 7, namun hanya itu, peringatan. Lihat jawaban ini .
Anda dapat memasukkan sumber daya lain seperti CoreData namun Anda harus membuatnya dalam kode secara manual. Berikut tutorial yang menunjukkan cara membuat model data inti.
Anda harus membuat kode pustaka dinamis untuk iOS.
Anda perlu memastikan framework Anda mendukung simulator dan arsitektur perangkat jika Anda berencana untuk mendistribusikannya.
sumber