Aplikasi iOS dengan kerangka kerja mogok di perangkat, sedang: Perpustakaan tidak dimuat, Xcode 6 Beta


573

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?


1
Apa yang saya tidak mengerti adalah mengapa semua kerangka kerja pihak ketiga lainnya bekerja di luar kotak dan dapat dengan mudah diseret dan jatuh ke Link Binary with Librariesdan entah bagaimana Xcode tahu untuk menyalinnya ke dalam bundel aplikasi Anda, sedangkan untuk kerangka kerja kustom ini tidak terjadi.
fatuhoku

sazzad jawaban hissain khan di sini stackoverflow.com/questions/26024100/... adalah jawaban terbaik ..
Ankit Kumar


Anda dapat membuat perpustakaan yang gemuk, Anda dapat melihat tautan ini: stackoverflow.com/a/54977145/3992606
mohsen

Versi Xcode tidak cocok , diselesaikan dengan stackoverflow.com/a/55738882/5443510 .
Jimmy Yin

Jawaban:


975

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.


73
Saya memiliki framework dalam Embedded Binaries dan saya memiliki Phase Copy juga diatur ke "Frameworks". Itu crash.
loretoparisi

11
Ini hanya diselesaikan pada mode debugging. Kesalahan akan terjadi lagi ketika Anda mengarsipkan atau membangun proyek
Saad Ur Rehman

13
Menambahkan @ executable_path / Frameworks ke 'Runpath Search Path' menyelesaikan masalah ini yaitu dengan menambahkan kerangka kerja ke 'Embedded Binaries'
ArdenDev

14
Adakah yang bisa membantu cara menambahkan framework dalam Embedded Binaries, dari PODs?
Bonnke

3
Dito. Saya juga ingin tahu cara menambahkan dari POD, mengingat tidak ada "General> Embedded Binaries" yang dapat ditemukan di XCode 6.4 menggunakan PODS
ded

259

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.

masukkan deskripsi gambar di sini

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.

Kerangka Statis

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.


1
Bagaimana saya bisa menambahkan kerangka kerja ke binari tertanam, jika kerangka kerja di Pods?
TomazStoiljkovic

Apa yang Anda maksud dengan "framework is in Pods"? Bahwa kerangka kerja kustom Anda didistribusikan melalui CocoaPods?
Dawson

2
Ini harus "Lebih besar dari atau sama dengan 8". Saya harus melakukan ini di iOS 8 juga.
Cruinh

errorSwift is not supported for static libraries
jose920405

@TomazStoiljkovic apakah Anda mengetahui hal ini? Saya memiliki masalah yang sama, saya memiliki kerangka kerja yang ingin saya bangun sebagai biner, tetapi itu tergantung pada kerangka kerja lain melalui buah kakao.
MegaManX

125

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

  • Kembangkan kerangka kerja Anda.
  • Setelah pengembangan Anda selesai, COMMAND+ Bbangun kerangka kerja Anda dan pastikan Anda menerima "Bangun Berhasil".

masukkan deskripsi gambar di sini

2) Akses kerangka kerja Anda

  • Setelah proyek kerangka kerja Anda berhasil dibangun, maka akan siap untuk Anda akses di Productsfolder Anda di proyek Anda.

masukkan deskripsi gambar di sini

  • Klik kanan pada Anda .frameworkdan pilih "Show in Finder".

masukkan deskripsi gambar di sini

3) Tempatkan kerangka kerja dalam proyek Anda

  • Seret dan jatuhkan .frameworkjendela Finder Anda ke folder "Kerangka" proyek aplikasi Anda.

masukkan deskripsi gambar di sini

4) Konfigurasikan proyek aplikasi untuk kerangka kerja

  • Pilih level teratas dalam proyek Anda

masukkan deskripsi gambar di sini

  • Pilih target Anda

masukkan deskripsi gambar di sini

  • Pergi ke "Bangun Fase", lalu "Tautkan Biner dengan Perpustakaan", dan pastikan bahwa kerangka kerja Anda disertakan dengan opsi yang dipilih .

masukkan deskripsi gambar di sini

  • Masih di "Build Phases", pergi ke kiri atas dan pilih +tombol. Dalam drop down pilih "Fase Salin File Baru".

masukkan deskripsi gambar di sini

  • Gulir ke bawah ke bagian "Salin File" yang baru dan pastikan Anda mengatur Destinationke "Kerangka Kerja". Biarkan subpath kosong. Kemudian klik +tombol di kiri bawah.

masukkan deskripsi gambar di sini

  • Anda akan disajikan dengan hierarki proyek Anda. Gulir ke bawah ke folder "Kerangka" yang Anda tambahkan kerangka kerja pada langkah 3, atau cari di bilah pencarian di bagian atas. Pilih kerangka kerja Anda dan klik "Tambah".

masukkan deskripsi gambar di sini

  • Pastikan kerangka kerja Anda disertakan dengan "Code Sign On Copy" dipilih.

masukkan deskripsi gambar di sini

5) Bersihkan, lalu jalankan proyek Anda

  • COMMAND+ SHIFT+K
  • COMMAND+R

5
Poin yang bagus. Itu hampir berhasil untuk saya. Saya membuat kerangka kerja A, yang mencakup Alamofire. Aplikasi host saya (embedded framework A) berfungsi dalam simulator. Tetapi ketika saya mencoba menjalankannya di iPhone asli, crash dengan kesalahan: Alamofire: dyld: Library tidak dimuat: @ rpath / Alamofire.framework / Alamofire Alasan: tidak ada gambar yang cocok ditemukan. Apakah menemukan: xxx / ddcdemo.app / Frameworks / iddc.framework / Frameworks / Alamofire.framework / Alamofire: mach-o, tetapi arsitektur salah
DàChún

1
@Brandon Making opsional untuk framework menyelesaikan masalah saya. Tetapi bisakah Anda menjelaskan kepada saya apa perilaku membuat kerangka kerja opsional?
Mitesh Dobareeya

2
Terima kasih! Pada langkah 5 Anda, saya telah mencentang "Salin hanya saat memasang" dan itu adalah masalah saya.
Andi

48

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 Librariesopsi di bawah Build Options.

Lihatlah tangkapan layar ini:

masukkan deskripsi gambar di sini


3
Ini sekarang bekerja untuk saya di. Solusi untuk masalah ini adalah dengan membuka BuildPhases -> Copy Files -> pilih Framework di bawah Destination dan tambahkan framework Anda. Kemungkinan perpustakaan Anda hilang di sini.
Harish

@ Harish, Solusi yang Anda sarankan sudah disarankan oleh beberapa dan pasti saya urus itu pada poin pertama. Dalam kasus saya, kerangka ditambahkan di sana tetapi masih masalah yang sama muncul Lalu aku menggali sendiri. Jika Anda memilih solusi ini, saya tidak tahu mengapa Anda cukup yakin tentang cara Anda ketika itu tidak berhasil dalam kasus saya: S
NeverHopeless

@Harish, terima kasih. Jawaban Anda banyak membantu saya dan tentu saja NeverHopeless juga :) Terima kasih semuanya
Mohsin Khubaib Ahmed

Ini adalah satu-satunya hal yang bekerja untuk saya .. tapi saya sudah "menanamkan" kerangka kerja di Embedded Binariesbagian target saya . Jadi mengapa ini membuatnya bekerja?
guptron

Mengagumkan hal ini bekerja karena jika menggunakan pustaka cepat atau pod untuk menanamkan dalam proyek C. Tujuan Proyek Objektif C sering memiliki bendera ini ke No.
Swaroop S

47

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.

masukkan deskripsi gambar di sini


3
Ini akan membuat runtime untuk tidak mengenali kelas dari framework
tesla

@azimov benar. Saya menghadapi dilema ini saat ini. Diperlukan menyebabkan kesalahan "gambar tidak ditemukan" dan jika kami mencoba mengaturnya ke opsional, itu akan macet saat runtime dengan "pemilih tidak dikenal"
Adam Mendoza

1
Meskipun kerangka kerja saya sudah ada di Tautan Binari dan Embed, saya masih harus menambahkan Fase Salin. dyld: Perpustakaan tidak dimuat: @ rpath / AFNetworking.framework / AFNetworking Dirujuk dari: / Pengguna / {Pengguna} / Perpustakaan / Pengembang / CoreSimulator / Perangkat / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / wadah / bundel / Aplikasi / B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / MyApp Alasan: gambar tidak ditemukan (lldb) Solusi: Proyek -> Target -> Build Phases -> + di atas untuk menambahkan fase Copy File baru Destination = Frameworks Pilih Kerangka Kerja yang perlu disalin
Adam Mendoza

@AdamMendoza Saya menolak aplikasi saya karena melakukan itu.
jbouaziz

@ jbouaziz, ya, kesalahan yang mungkin Anda temui adalah karena .framework menjadi gemuk, artinya ada arsitektur yang tidak didukung di iOS seperti i386 x86_64 selain armv7 arm64 yang diperlukan. Toko akan memberi Anda kesalahan, tetapi Anda mungkin tidak melihat kesalahan dalam Xcode. Gunakan loader di bawah Xcode -> Open Developer Tool -> Application Loader. SolutionL membuatnya kurus, lihat -> ikennd.ac/blog/2015/02/...
Adam Mendoza

28

Saya mendapat masalah yang sama di versi iOS 9.x

MASALAH IS: Aplikasi mogok segera setelah saya membuka aplikasi dengan kesalahan di bawah ini.

dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Dirujuk dari: /var/containers/Bundle/Application/######/TestApp.app/TestApp Alasan: gambar tidak ditemukan

Saya telah mengatasi masalah ini dengan mengubah Requiredke Optionaldalam Linked Frameworks and Librariesuntuk UserNotifications.frameworkkerangka kerja.


Ini bekerja. Adakah yang tahu mengapa? Karena beberapa perangkat memerlukan pengaturan ini, yang lain tidak.
NEO

Saya mendapatkan "peringatan: tidak dapat menjalankan kode dukungan untuk membaca data kelas Objective-C dalam proses. Ini dapat mengurangi kualitas informasi jenis yang tersedia." ketika menandai lib saya sebagai opsional
BergP

itu berhasil mungkin alasannya adalah beberapa kerangka kerja tidak berjalan di simulator itu sebabnya
Gowtham Sooryaraj

@ redent84 Jawaban ini, bersama dengan komentar Anda, menyelamatkan saya dari menjadi gila.
Mengalami

26

Saya harus (di atas apa yang disebutkan di sini) menambahkan baris berikut ke Jalur Pencarian Runpath di bawah tab Pengaturan Bangun :
@executable_path/Frameworks

masukkan deskripsi gambar di sini


Ini memperbaiki masalah bagi saya. Saya mulai mengalami masalah setelah menambahkan ekstensi aplikasi ke aplikasi iOS 9 saya. Sebelum menambahkan ekstensi, kerangka kerja saya ditemukan dengan baik. Menambahkan fase pembuatan Salin File tidak membantu, dan saya sudah memasukkan kerangka kerja.
Greg

Sangat aneh ini tidak termasuk secara default. Jika Anda unzip dan melihat IPA Anda, Anda harus menemukan kerangka kerja Anda di Payloads / appname.app / Frameworks /. Namun, menambahkan jalur pencarian ini harus ada di sana agar aplikasi dapat melihat di folder ini selama runtime. Aneh.
mattv123

25

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


Setelah mencoba banyak hal, inilah yang menyelesaikannya untuk saya. Saya sudah memiliki framework di Link Binary and Embed Framework. Saya tidak berpikir saya juga harus menambahkan Fase Salin tetapi ini memperbaikinya.
Adam Mendoza

14

Jika Anda menggunakan Xcode 11 atau lebih baru :

  1. Arahkan ke pengaturan target Anda dan pilih Umum .

Pengaturan Target / Umum

  1. Gulir ke bawah ke Frameworks, Libraries dan Embedded Content .

  2. Pastikan nilai Embed & Sign atau Embed Tanpa Signing dipilih untuk opsi Embed jika perlu.

Bagian Kerangka Kerja, Perpustakaan dan Konten Tertanam


13

Tambahkan kerangka kerja di Binari Tertanam masukkan deskripsi gambar di sini

Kemudian Bersihkan dan Bangun.


11

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 bawah Build Settingsdari 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 ke Embedded Binariespengaturan Generaltab Aplikasi hosting.

Saya tidak perlu mengatur Copy Filesfase tambahan , yang tampaknya secara intuisi redundan sehubungan dengan tahap penyematan. Dengan memeriksa ujung ekor transkrip build, kami dapat memastikan bahwa itu tidak perlu.

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[Banyak baris verbose dihapus, tetapi jelas dari transkrip yang disederhanakan di UI Xcode.]

Saya masih tidak tahu mengapa Xcode menetapkan DYLIB_INSTALL_NAME_BASEnilai yang salah pada saya.


1
Terima kasih, ini ternyata menjadi masalah saya di Xcode 11. Saya mengimpor salah satu kerangka kerja saya sendiri, yang sebelumnya berfungsi, tetapi mulai mengeluarkan kesalahan "dyld: Library not loaded". Agar lebih jelas, Anda ingin mengatur pengaturan pembangunan "Basis Nama Instalasi Perpustakaan Dinamis" menjadi "@ jalur" dalam proyek kerangka kerja yang Anda coba impor, bukan dalam proyek yang Anda impor. Entah bagaimana itu bisa diatur ke "/ Library / Frameworks".
Ben Stahl

Senang ini membantu 3 tahun kemudian. Diedit sesuai.
BaseZen

9

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.


8

Lingkungan saya: Cocos2d 2.0, Box2d, Objective C

Selain melakukan jawaban lain di atas, saya akhirnya pergi ke tab Umum dan menjadikan WatchKit Opsional.

Target Kerangka Terkait Umum dan Perpustakaan Watchkit.framework Opsional


8

Jika Anda menggunakan kerangka kerja pihak ketiga, dan menggunakan Cocoapods sebagai manajer dependensi Anda, coba lakukan pod installuntuk 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!


1
Bagus! memperbaiki masalah saya. Tetapi apakah ada cara menghindari menginstal dependensi pod di App host saya?
DàChún

8

masukkan deskripsi gambar di sini

Diatasi untuk saya dengan tidak memilih "Salin saja saat diinstal" pada Build Phases-> Embed Frameworks


1
Akan menyenangkan untuk mengetahui titik kotak centang ini jika sistem tidak percaya bahwa "debug instal" bukan "install". Apapun itu, jika itu menyebabkan crash aplikasi pada perangkat keras alih-alih melarang jalannya aplikasi dengan peringatan, itu adalah cacat Xcode lain yang rapi
William Cerniuk

8

Ini adalah kesalahan runtime yang disebabkan oleh Dynamic Linker

dyld: Library not loaded: @rpath/...
...
Reason: image not found

Kesalahan Library not loadeddengan @rpathmenunjukkan bahwa Dynamic Linkertidak dapat menemukan biner.

  1. Periksa apakah kerangka dinamis telah ditambahkan General -> Embedded Binaries

  2. Periksa @rpathpengaturan antara konsumen (aplikasi) dan produsen (kerangka kerja dinamis):

    • Kerangka dinamis:
      • Build Settings -> Dynamic Library Install Name
    • Aplikasi:
      • Build Settings -> Runpath Search Paths
      • Build Phases -> Embed Frameworks -> Destination, Subpath

Tautan dinamis

Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)yang digunakan oleh loadable bundle( Dynamic frameworksebagai turunan) di mana dyldmenjadi play
Dynamic Library Install Name- path ke file binary (bukan .framework). Ya, mereka memiliki nama yang sama, tetapi MyFramework.frameworkadalah packaged bundledengan MyFrameworkfile 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 tunggal

path absolut - contoh Framework1

//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1

@executable_path

@executable_path - relatif ke entri biner - Contoh kasus penggunaan Framework2
: menanamkan Dynamic frameworkke dalam aplikasi

//Application bundle(`.app` package) absolute path
/some_path/Application.аpp

//Application binary absolute path 
/some_path/Application.аpp/subfolder1

//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework2 Dynamic Library Install Name 
@executable_path/../Frameworks/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

@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

//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1

//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 Dynamic Library Install Name 
@loader_path/../Frameworks/Framework3_2.framework/subfolder1

//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

@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.
       @executable_path/../Frameworks
    • Tinjau Build Phases -> Embed Frameworks -> Destination, Subpathuntuk shire di mana tepatnya kerangka embed berada
  • Kerangka Kerja Dinamis:

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- titik yang @rpathdigunakan bersama dengan jalur bundel lokal ke biner
      @rpath/Framework2.framework/subfolder1
//Application Runpath Search Paths
@executable_path/../Frameworks

//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

* ../- pergi ke induk dari direktori saat ini

otool - Alat penampil file objek

//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

LC_RPATH
@executable_path/../Frameworks

//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

install_name_tool ubah nama instal shared library dinamis menggunakan -rpath

CocoaPodsmenggunakan use_frameworks![Tentang] untuk mengatur aDynamic Linker

[Kosa kata]


6

Baru-baru ini mengalami masalah dengan mengimpor CoreNFC pada iPhone lama (mis. IPhone 6) dan Xcode (11.3.1). Saya bisa membuatnya bekerja

  1. Di Proyek Anda , pilih target.
  2. Goto General tab di atas.
  3. Di bawah bagian ' Kerangka Kerja, Perpustakaan dan Konten Tertanam ', tambahkan kerangka kerja (bagi saya itu adalah CoreNFC). Ulangi untuk target lain.
  4. Klik Bangun Fase di atas dan perluas ' Tautkan Biner dengan Perpustakaan '.
  5. Jadikan kerangka kerja merepotkan opsional (dari yang diperlukan).

Ini memungkinkan saya untuk mengkompilasi iPhone lama / baru tanpa membuat perubahan kode. Saya harap ini membantu yang lain.


1
TERIMA KASIH. Membuatnya opsional adalah tautan yang hilang ...
fl034

tidak berfungsi, aplikasi mogok dan tidak ada pesan yang menunjukkan jenis kerusakan alih-alih breakpoint pada beberapa kode rakitan.
Newsonic

mengapa ini diperlukan untuk membuat opsional?
rohitwtbs

5

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.


Dan mungkin Clean Build Folder juga (CMD + Shift + Alt + K)
Grifas

4

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.


4

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.

use_frameworks!

Setelah baris dihapus dari file yang Anda simpan, jalankan saja bentuk konsol:

$ pod update

2

Jika ada pod pengembangan Hapus aplikasi Anda dari instal simulator dari pod -> bersih -> jalankan lagi ...


2

Hal yang sama adalah ketika saya membuat Skema Konfigurasi dan Bangun baru.

Jadi solusi bagi saya adalah berlari

pod install

untuk Konfigurasi yang baru dibuat ini.


1

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. -masukkan deskripsi gambar di sini


1

Coba dengan mengubah bendera ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES(dalam versi xcode sebelumnya:) Embedded Content Contains Swift Codedi Pengaturan Bangun dari TIDAK ke YA.


1

Xcode 11

  1. Arahkan ke pengaturan target Anda dan pilih Umum.
  2. Cari "Kerangka Kerja, Perpustakaan, dan Konten Tertanam"
  3. Tetap "Jangan Tanamkan" dan pastikan bahwa semua target Anda (jika Anda memiliki lebih dari satu) hanya menetapkan kerangka kerja sendiri dan bukan target orang lain.

1

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 .

masukkan deskripsi gambar di sini

2: Kedua, ubah nama fase yang ditambahkan ke Kerangka Sematan masukkan deskripsi gambar di sini

3: Ubah tujuan menjadi Kerangka .

masukkan deskripsi gambar di sini

4: Tambahkan kerangka kerja untuk mana kesalahan terjadi.

masukkan deskripsi gambar di sini


1

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:

  1. Hapus kerangka kerja yang memberikan kesalahan dari "Framework dan Perpustakaan Tertaut" di bawah tab Umum.

  2. Sekarang tambahkan framework yang dihapus hanya di bawah tab Embedded Binaries dan hanya itu yang perlu dilakukan.

Jalankan di perangkat dan pertahankan senyuman itu;)


0
  1. Buka file dalam xcode -> Pengaturan ruang kerja
  2. Klik panah di sebelah yang muncul / Users / apple / Library / Developer / Xcode / DerivedData
  3. Pilih data yang diturunkan dan pindahkan ke Sampah.
  4. Cukup xcode dan buka kembali.
  5. Bersihkan proyek dan jalankan lagi.

Langkah-langkah di atas menyelesaikan masalah saya.


0

Solusi sederhana adalah ikuti tangkapan layar ini maka crash akan hilang:

masukkan deskripsi gambar di sini

Tercatat: Ini Xcode 11.5


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.