Apakah perpustakaan dinamis didukung di iOS (iPhone / iPad)?
Di Xcode, saya mencoba membuat proyek baru -> Framework & Library -> Cocoa Library (dinamis) . Dalam pengaturan proyek, saya menetapkan Base SDK ke iOS device 4.1
dan menargetkan ke iOS4.1
, tetapi memiliki kesalahan pembuatan:
target menentukan jenis produk 'com.apple.product-type.library.dynamic', tetapi tidak ada jenis produk seperti itu untuk platform 'iphonesimulator' ".
Build yang saya pilih adalah Simulator -> Debug -> i386 .
Jawaban:
Pada saat pertanyaan ini diajukan, Perpustakaan dinamis tidak didukung oleh iOS dan akan mengakibatkan aplikasi Anda ditolak. Hanya pustaka statis yang diperbolehkan.
Namun, di iOS8 Anda dapat menggunakan pustaka dan kerangka kerja dinamis. Seharusnya "bekerja"
sumber
Saya tidak benar-benar setuju dengan jawaban DarkDust ini , tetapi jika aku bisa menyalurkan batin saya Bill Clinton, itu tergantung pada apa arti didukung adalah :)
Apple tidak ingin Anda melakukan ini untuk aplikasi App Store, tetapi sistem operasi pasti mengizinkannya. Aplikasi jailbreak menggunakan teknik ini setiap saat. Anda pada dasarnya menggunakan teknik UNIX standar untuk membuka kerangka kerja / pustaka secara dinamis, dan kemudian menggunakan barang-barang di dalamnya. Fungsi dlopen memungkinkan Anda untuk membuka pustaka dengan meneruskan jalur ke kerangka kerja itu , atau dylib. Dari beberapa dokumen untuk membuat aplikasi jailbreak , berikut adalah contoh pemanggilan
init()
fungsi yang diterapkan di dalam dylib Anda sendiri yang terpisah:Selain itu, batasan default yang melarang Anda membuat proyek perpustakaan dinamis untuk iOS adalah sesuatu di Xcode yang dapat Anda timpa dengan mengedit beberapa file XCode xml:
Buat dan gunakan dylib di iOS
Setelah melakukannya, Anda dapat membuat pustaka .dylib iOS normal , dan menggunakannya sesuai contoh kode di atas. (ya, Anda mungkin harus membuka kunci kemampuan ini lagi setiap kali Anda menginstal versi XCode baru).
Jadi, ini bukan batasan teknis, tetapi batasan kebijakan App Store. Jika Anda tidak terbatas pada App Store, maka Anda dapat melakukannya. Perhatikan bahwa teknik ini tidak memerlukan jailbreaking, meskipun jika aplikasi menggunakan sandbox, teknik ini dapat membatasi dari mana dylib dapat dimuat.
Sunting: untuk memastikan informasi ini tidak hilang karena pembusukan tautan di masa mendatang, berikut adalah konten tautan yang saya berikan tentang cara mengaktifkan dylib iOS di Xcode. ( Catatan: proses ini masih berfungsi di Xcode 4, tetapi lihat komentar di bawah untuk pembaruan jalur, dll.) Sumber adalah blog Tempat iOS :
Xcode tidak mengizinkan Anda membuat dylib untuk iOS. Aplikasi akan ditolak jika bukan biner tunggal. Tetapi saya memiliki aplikasi yang memiliki arsitektur plug-in untuk memuat modul opsional. Saya hanya ingin prototipe cepat untuk membuktikan konsep sebelum sepenuhnya mentransfernya ke iOS. Ini lebih cepat dilakukan jika dylib bisa bekerja dengan mudah. Jadi, posting ini menunjukkan cara membuat dan menggunakan dylib tetapi perlu diketahui itu tidak akan disetujui ke App Store. (Diuji dengan Xcode 3.2.4 pada 10.6.4)
1. Buka file ini di Editor Daftar Properti: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Jenis Produk.xcspec dan /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications / iPhone Simulator ProductTypes.xcspec
2. Cari item di " MacOSX Product Type.xcspec " yang memiliki jenis produk
com.apple.product-type.library.dynamic
dan seret ke " iPhone Simulator ProductTypes.xcspec ".3. Buka " MacOSX Package Type.xcspec " dan " iPhone Simulator PackageTypes.xcspec " yang ditemukan di tempat yang sama.
4. Cari item di " MacOSX Product Type.xcspec " yang memiliki jenis paket
com.apple.package-type.mach-o-dylib
dan seret ke " iPhone Simulator PackageTypes.xcspec ".5. Ulangi langkah-langkah untuk " iPhoneOS.platform " dan luncurkan kembali Xcode jika sudah berjalan.
Sekarang, mari membangun dylib. Mulailah dengan Template " Cocoa Touch Static Library ". Itu harus menyertakan kerangka Foundation.framework dalam proyek. Berikut adalah perubahan yang saya buat di atas template untuk membangun dylib.
1. Buka file project.pbxproj (ada di dalam bundel file proyek Xcode) di Editor Teks. Cari string “ producttype ”, ubah nilainya menjadi
com.apple.product-type.library.dynamic
;Sekarang, buka proyek dengan Xcode, buka Proyek-> Edit Pengaturan Proyek
2. " Direktori Instalasi " disetel ke
@executable_path/
karena saya berencana untuk meletakkan dylib di direktori yang sama dengan aplikasi yang dapat dieksekusi.3. " Jenis Mach-O " diatur ke Perpustakaan Dinamis
4. " Executable Extension " disetel ke dylib
5. " Executable Prefix " disetel ke kosong
6. Tambahkan satu atau dua metode sederhana ke pustaka dan bangun itu.
Sekarang, buat aplikasi untuk mengujinya. Kali ini, saya memilih Aplikasi berbasis Tampilan . Hubungkan UIButton dan UILabel untuk memanggil lib dan menampilkan pesan balasan. Anda dapat mengunduh proyek lengkap TestApp dan memainkannya.
sumber
Mulai dari perpustakaan dinamis Xcode 11.4.1 tidak diperbolehkan (proyek Anda tidak akan dikompilasi untuk semua tujuan). Cara baru untuk menggunakan libs / frameworks adalah create-xcframework dari xcodebuild.
sumber