Kecelakaan ini telah menjadi masalah pemblokiran, saya menggunakan langkah-langkah berikut untuk mereproduksi masalah:
- Buat proyek Kerangka Sentuhan Kakao
- Tambahkan file cepat dan Anjing kelas
- Membangun kerangka kerja untuk perangkat
- Buat aplikasi Tampilan Tunggal di Swift
- Impor kerangka kerja ke dalam proyek aplikasi
- Instantiate kelas cepat dari kerangka kerja di ViewController
- Bangun dan jalankan aplikasi di perangkat
Aplikasi langsung macet saat diluncurkan, berikut adalah log konsol:
dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
Reason: image not found
Saya telah mencoba membangun perangkat iOS 7.1 dan 8.0, keduanya mengalami kerusakan yang sama. Namun, saya dapat membuat aplikasi dan menjalankannya dengan baik di simulator. Juga, saya sadar bahwa saya dapat mengubah kerangka kerja untuk membentuk Diperlukan untuk Opsional di Biner Link Dengan Perpustakaan , tetapi itu tidak sepenuhnya menyelesaikan masalah, aplikasi macet ketika saya membuat turunan Dog . Perilaku ini berbeda pada perangkat dan simulator, saya menduga kami tidak dapat mendistribusikan kerangka kerja untuk perangkat menggunakan Xcode versi beta. Adakah yang bisa menjelaskan ini?
Link Binary with Libraries
dan entah bagaimana Xcode tahu untuk menyalinnya ke dalam bundel aplikasi Anda, sedangkan untuk kerangka kerja kustom ini tidak terjadi.Jawaban:
Di tab Umum target , ada bidang Binatu Tertanam . Ketika Anda menambahkan kerangka kerja di sana crash itu diselesaikan.
Referensi ada di sini di Forum Pengembang Apple.
sumber
Untuk iOS lebih besar dari atau sama dengan 8
Di bawah tab General target, di bagian Embedded Binaries tambahkan framework. Ini akan menyalin kerangka kerja ke dalam dikompilasi sehingga dapat ditautkan ke saat runtime.
Mengapa ini terjadi? : karena kerangka yang Anda tautkan dikompilasi sebagai kerangka kerja yang terhubung secara dinamis dan karenanya terhubung ke saat runtime.
** Catatan: ** Menanamkan kerangka kerja khusus hanya didukung di iOS> 8 dan karenanya solusi alternatif yang bekerja pada versi iOS yang lebih lama mengikuti.
Untuk iOS kurang dari 8
Jika Anda memengaruhi kerangka kerja ini (memiliki akses ke kode sumber / proses pembuatan), Anda dapat mengubah kerangka kerja ini untuk ditautkan secara statis daripada ditautkan secara dinamis. Ini akan menyebabkan kode dimasukkan dalam aplikasi yang dikompilasi alih-alih ditautkan pada saat runtime sehingga kerangka kerja tidak harus disematkan.
** Bagaimana: ** Di bawah tab Pengaturan Bangun kerangka kerja, di bagian Menghubungkan, ubah Jenis Mach-O ke Perpustakaan Statis. Anda sekarang seharusnya tidak perlu memasukkan kerangka kerja di bawah binari tertanam.
Termasuk Aset: Untuk memasukkan hal-hal seperti file gambar, audio, atau xib / nib, saya sarankan untuk membuat bundel (pada dasarnya direktori, info lebih lanjut di sini bit.ly/ios_bundle) dan kemudian muat aset dari bundel menggunakan NSBundle.
sumber
Swift is not supported for static libraries
Hanya dengan menarik kerangka kerja ke proyek Anda tidak akan cukup baik. Itu seperti berada di stadion baseball yang sama tetapi tidak dapat menemukan anak-anak Anda. Ikuti langkah ini:
1) Buat kerangka kerja Anda
COMMAND
+B
bangun kerangka kerja Anda dan pastikan Anda menerima "Bangun Berhasil".2) Akses kerangka kerja Anda
Products
folder Anda di proyek Anda..framework
dan pilih "Show in Finder".3) Tempatkan kerangka kerja dalam proyek Anda
.framework
jendela Finder Anda ke folder "Kerangka" proyek aplikasi Anda.4) Konfigurasikan proyek aplikasi untuk kerangka kerja
+
tombol. Dalam drop down pilih "Fase Salin File Baru".Destination
ke "Kerangka Kerja". Biarkan subpath kosong. Kemudian klik+
tombol di kiri bawah.5) Bersihkan, lalu jalankan proyek Anda
COMMAND
+SHIFT
+K
COMMAND
+R
sumber
Saya membuat kerangka kerja menggunakan Swift3 / Xcode 8.1 dan menggunakannya dalam proyek Objective-C / Xcode 8.1. Untuk memperbaiki masalah ini, saya harus mengaktifkan
Always Embed Swift Standard Libraries
opsi di bawahBuild Options
.Lihatlah tangkapan layar ini:
sumber
Embedded Binaries
bagian target saya . Jadi mengapa ini membuatnya bekerja?Pertama Cobalah untuk membangun setelah Command + Option + Shift + K. Jika masih gagal maka lakukan langkah-langkah di bawah ini.
Jika ada yang menghadapi kesalahan ini di Xcode 8 maka ubah status kerangka kerja Anda menjadi Opsional alih-alih Dibutuhkan di bawah Tab Umum target Anda.
sumber
Saya mendapat masalah yang sama di versi iOS 9.x
Saya telah mengatasi masalah ini dengan mengubah
Required
keOptional
dalamLinked Frameworks and Libraries
untukUserNotifications.framework
kerangka kerja.sumber
Saya harus (di atas apa yang disebutkan di sini) menambahkan baris berikut ke Jalur Pencarian Runpath di bawah tab Pengaturan Bangun :
@executable_path/Frameworks
sumber
Anda perlu menambahkan kerangka kerja ke Fase Pembuatan File Salin baru untuk memastikan bahwa kerangka kerja tersebut disalin ke dalam bundel aplikasi saat runtime ..
Lihat Cara menambahkan 'Salin fase pembuatan file' ke Target saya untuk informasi lebih lanjut.
Apple Documents Resmi: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html
sumber
Jika Anda menggunakan Xcode 11 atau lebih baru :
Gulir ke bawah ke Frameworks, Libraries dan Embedded Content .
Pastikan nilai Embed & Sign atau Embed Tanpa Signing dipilih untuk opsi Embed jika perlu.
sumber
Tambahkan kerangka kerja di Binari Tertanam
Kemudian Bersihkan dan Bangun.
sumber
Anehnya, tidak semua bagian yang diperlukan didokumentasikan di sini, setidaknya untuk Xcode 8.
Kasing saya adalah kerangka kerja yang dibuat khusus sebagai bagian dari ruang kerja yang sama. Ternyata itu dibangun dengan tidak benar. Berdasarkan tanggapan terakhir jeremyhu untuk utas ini:
https://forums.developer.apple.com/thread/4687
Aku harus set
Dynamic Library Install Name Base
(DYLIB_INSTALL_NAME_BASE
) di bawahBuild Settings
dari Kerangka Kerja Proyek dan kemudian membangunnya kembali. Itu salah diatur ke$(LOCAL_LIBRARY_DIR)
dan saya harus mengubahnya@rpath
.Jadi pada tahap pemrosesan tautan di App Project, ia menginstruksikan App host untuk memuat kerangka secara dinamis saat runtime dari
/Library/Frameworks/fw.Framework/fw
(seperti pada, root dari sistem file runtime) daripada path-to-App/Frameworks/fw.Framework/fw
Mengenai semua pengaturan lain: memang harus di 3 tempat
Build Phases
, tetapi ini semua diatur sekaligus ketika Anda hanya menambahkannya keEmbedded Binaries
pengaturanGeneral
tab Aplikasi hosting.Saya tidak perlu mengatur
Copy Files
fase tambahan , yang tampaknya secara intuisi redundan sehubungan dengan tahap penyematan. Dengan memeriksa ujung ekor transkrip build, kami dapat memastikan bahwa itu tidak perlu.[Banyak baris verbose dihapus, tetapi jelas dari transkrip yang disederhanakan di UI Xcode.]
Saya masih tidak tahu mengapa Xcode menetapkan
DYLIB_INSTALL_NAME_BASE
nilai yang salah pada saya.sumber
Dalam kasus saya, solusinya adalah menghapus kerangka kerja yang dikompilasi dari Embedded Binaries, yang merupakan proyek mandiri di ruang kerja, membersihkan dan membangunnya kembali, dan akhirnya menambahkan kembali ke Embedded Binaries.
sumber
Lingkungan saya: Cocos2d 2.0, Box2d, Objective C
Selain melakukan jawaban lain di atas, saya akhirnya pergi ke tab Umum dan menjadikan WatchKit Opsional.
sumber
Jika Anda menggunakan kerangka kerja pihak ketiga, dan menggunakan Cocoapods sebagai manajer dependensi Anda, coba lakukan
pod install
untuk menyegarkan pod Anda.Kecelakaan ini terjadi di perpustakaan pihak ketiga yang saya gunakan, sangat senang solusi di atas berhasil untuk saya, semoga berhasil untuk Anda!
sumber
Diatasi untuk saya dengan tidak memilih "Salin saja saat diinstal" pada Build Phases-> Embed Frameworks
sumber
Ini adalah kesalahan runtime yang disebabkan oleh
Dynamic Linker
Kesalahan
Library not loaded
dengan@rpath
menunjukkan bahwaDynamic Linker
tidak dapat menemukan biner.Periksa apakah kerangka dinamis telah ditambahkan
General -> Embedded Binaries
Periksa
@rpath
pengaturan antara konsumen (aplikasi) dan produsen (kerangka kerja dinamis):Build Settings -> Dynamic Library Install Name
Build Settings -> Runpath Search Paths
Build Phases -> Embed Frameworks -> Destination, Subpath
Tautan dinamis
Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)
yang digunakan olehloadable bundle
(Dynamic framework
sebagai turunan) di manadyld
menjadi playDynamic Library Install Name
- path ke file binary (bukan .framework). Ya, mereka memiliki nama yang sama, tetapiMyFramework.framework
adalahpackaged bundle
denganMyFramework
file biner dan sumber daya dalam.Path ini ke direktori dapat absolut atau relatif (misalnya
@executable_path
,@loader_path
,@rpath
). Jalur relatif lebih disukai karena diubah bersama dengan jangkar yang berguna ketika Anda mendistribusikan bundel Anda sebagai direktori tunggalpath absolut - contoh Framework1
@executable_path
@executable_path - relatif ke entri biner - Contoh kasus penggunaan Framework2
: menanamkan
Dynamic framework
ke dalam aplikasi@loader_path
@loader_path - relatif terhadap bundel yang merupakan pemilik
kasus penggunaan biner ini: framework dengan embedded framework - Framework3_1 dengan Framework3_2 di dalamnya
@rpath - Jalur Pencarian Runpath
Contoh framework2
Sebelumnya kami harus menyiapkan Kerangka untuk bekerja dengan dyld. Itu tidak nyaman karena Kerangka yang sama tidak dapat digunakan dengan konfigurasi yang berbeda
@rpath
adalah konsep gabungan yang bergantung pada bagian luar (Aplikasi) dan bersarang (kerangka kerja dinamis):Aplikasi:
Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)
- Menentukan daftar templat yang diganti dengan@rpath
.Build Phases -> Embed Frameworks -> Destination, Subpath
untuk shire di mana tepatnya kerangka embed beradaKerangka Kerja Dinamis:
Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)
- titik yang@rpath
digunakan bersama dengan jalur bundel lokal ke biner*
../
- pergi ke induk dari direktori saat iniotool
- Alat penampil file objekinstall_name_tool
ubah nama instal shared library dinamis menggunakan-rpath
CocoaPods
menggunakanuse_frameworks!
[Tentang] untuk mengatur aDynamic Linker
[Kosa kata]
sumber
Baru-baru ini mengalami masalah dengan mengimpor CoreNFC pada iPhone lama (mis. IPhone 6) dan Xcode (11.3.1). Saya bisa membuatnya bekerja
Ini memungkinkan saya untuk mengkompilasi iPhone lama / baru tanpa membuat perubahan kode. Saya harap ini membantu yang lain.
sumber
Saya memiliki masalah yang sama. Saya mencoba membangun proyek saya dengan iPhone yang tidak pernah saya gunakan sebelumnya dan saya tidak menambahkan kerangka kerja baru. Bagi saya, pembersihan bekerja dengan baik ( Shift + Command + K ). Mungkin itu karena saya menggunakan beta 5 Xcode 7 dan iPhone 6 dengan iOS 9 Beta, tetapi berhasil.
sumber
Dalam kasus saya, proyek saya ditulis oleh objektif-c dan di perpustakaan ada file Swift. Jadi saya mengubah "Always Embed Swift Standard Libraries" di tab Build Settings proyek saya menjadi Ya dan itu menjadi sangat oke.
sumber
Untuk setiap proyek atau proyek Kerangka kerja di Xcode yang menggunakan pod, salah satu cara mudah untuk menghindari perpustakaan dinamis (dylb) untuk tidak memuat adalah dengan mengatur file pod Anda menjadi tinta dalam mode statis. Untuk melakukannya, pastikan untuk tidak menulis baris berikut di file pod Anda.
Setelah baris dihapus dari file yang Anda simpan, jalankan saja bentuk konsol:
sumber
Jika ada pod pengembangan Hapus aplikasi Anda dari instal simulator dari pod -> bersih -> jalankan lagi ...
sumber
Hal yang sama adalah ketika saya membuat Skema Konfigurasi dan Bangun baru.
Jadi solusi bagi saya adalah berlari
untuk Konfigurasi yang baru dibuat ini.
sumber
Setelah mencoba semua metode yang tersedia di internet dan percobaan dan kesalahan saya sendiri 100 kali. Akhirnya saya bisa menyelesaikannya. - Apeksha Sahu 6 mnt yang lalu
Goto iTunes di Mac -> akun -> Otorisasi komputer ini - Apeksha Sahu 5 mnt yang lalu
langkah kedua .... Pengembang goto dalam pengaturan di iPad dan iPhone dan mengindeks kembali dengan pengidentifikasi dan mempercayai komputer semuanya. Ini bekerja untuk saya ........ ....... Setelah menginstal ulang versi Mac OSHigh seria 10.13.15 dari Mac OS seirra beta versi terbaru, untuk menginstal ulang Xcode versi terbaru, setelah memperbarui semua sertifikat. etc etc etc ... sebanyak metode yang Anda bisa pikirkan saya lakukan. -
sumber
Coba dengan mengubah bendera
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
(dalam versi xcode sebelumnya:)Embedded Content Contains Swift Code
di Pengaturan Bangun dari TIDAK ke YA.sumber
Xcode 11
sumber
Dalam Xcode 11
Saya menghadapi masalah yang sama
Mengubah "Jangan Disematkan " di Tab Umum > "Kerangka Kerja, Perpustakaan, dan Konten Tertanam" masih menghasilkan kesalahan yang sama.
Apa yang dipecahkan bagi saya adalah menambahkan Framework di Build Phases Tab > Embed Frameworks bagian
- Diperbarui ---
Saya mengamati bahwa dalam proyek yang dibangun di versi sebelumnya dari Xcode Embed Frameworks Section tidak tersedia ketika berjalan di Xcode 11, Temukan langkah-langkah di bawah ini untuk mencapai solusi:
1: Pertama perlu menambahkan Fase File Salin Baru di bawah tab Bangun Fase .
2: Kedua, ubah nama fase yang ditambahkan ke Kerangka Sematan
3: Ubah tujuan menjadi Kerangka .
4: Tambahkan kerangka kerja untuk mana kesalahan terjadi.
sumber
Meskipun semua orang mengatakan untuk menanamkan kerangka kerja di bawah Embedded Binaries tapi tetap saja tidak berfungsi, karena kami kehilangan satu langkah penting di sini.
Berikut adalah dua langkah tepat untuk menambahkan binari di bawah tab Binari Tertanam:
Hapus kerangka kerja yang memberikan kesalahan dari "Framework dan Perpustakaan Tertaut" di bawah tab Umum.
Sekarang tambahkan framework yang dihapus hanya di bawah tab Embedded Binaries dan hanya itu yang perlu dilakukan.
Jalankan di perangkat dan pertahankan senyuman itu;)
sumber
Langkah-langkah di atas menyelesaikan masalah saya.
sumber
Solusi sederhana adalah ikuti tangkapan layar ini maka crash akan hilang:
Tercatat: Ini Xcode 11.5
sumber
Jika ada yang masih mengalami masalah ini, meskipun mengikuti semua langkah yang diuraikan dalam banyak jawaban lain, Anda mungkin perlu mencabut dan membuat ulang sertifikat penandatanganan kode Anda , seperti berikut:
https://developer.apple.com/library/ios/qa/qa1886/_index.html
sumber