OS X Çerçeve Kitaplığı yüklenmedi: 'Görüntü bulunamadı'


279

Temel bir OS X Framework oluşturmaya çalışıyorum, şu anda sadece bir test çerçevesi oluşturdum: TestMacFramework.frameworkve yepyeni bir OS X Uygulama projesine aktarmaya çalışıyorum.

.Framework dosyasını oluşturdum ve yeni projeye aktardım, Çerçeve iyi bağlanıyor gibi görünüyor ve çerçeve oluşturma aşamaları bölümüne eklediğim genel başlık dosyasına başvurabilirim.

Ancak, kapsayıcı uygulamasını çalıştırmayı denediğimde aşağıdaki hatayı alıyorum:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Biraz googling yaptıktan sonra, Copy Fileskonteyner uygulama oluşturma aşamalarıma bir bölüm eklemem gerektiğini fark ettim , bu yüzden bunu yaptım ve öyle ayarladım ...

resim açıklamasını buraya girin

Ancak, hala çalışma zamanı hatası alıyorum. Açıkçası burada yanlış bir şey yapıyorum, ama bu Xcode 2 referansları için Apple geliştirici kütüphane kaynağı, bu yüzden çok yararlı değil!

Neyi kaçırdım?

GÜNCELLEME:

Derleme günlüğünde TestMacFramework.framework, .app içerik / frameworks dizinine kopyalandığımı görebiliyorum, ancak HD'deki Kütüphane / Frameworks dizinine yüklenmiyor

resim açıklamasını buraya girin

GÜNCELLEME 2:

El ile kopyalarsanız inşa doğru bağlantılar TestMacFramework.frameworkiçine Library/Frameworksdizinde


1
otool -LUygulamanın çerçeveyi nerede bulmayı beklediğiyle ilgili ne anlatıyor?
trojanfoe

Tamam, bunu nasıl çalıştırılacağı anladım ... Bu (ben Vakfı gibi diğer bağımlılıklar hariç tuttuktan vs) benim kütüphanesi için olsun çıkışı/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
Sammio2

Benim düzeltmem ihtiyacım olan kütüphane (Alamofire) ikili olarak gömülüyordu. Bu kabul edilebilir mi?
Cmag

2
Bu sorunun OS X için açık bir şekilde etiketlenmesi çok kafa karıştırıcıdır ve kabul edilenler de dahil olmak üzere tüm cevaplar iOS içindir. Aynı hataya sahibim ve cevapların hiçbirini kullanamıyorum.
RenniePet

@RenniePet Xcode 7.3 sürümünden bu yana iOS ve macOS çerçeveleri için işlem aynıdır, kabul edilen cevap bunu yapmanın doğru yoludur. Hala sorun yaşıyorsanız, ilgisiz bir sorun olabilir mi?
Sammio2

Yanıtlar:


553

[Xcode 11+]

Yapılacak tek şey, çerçeveyi uygulama hedefinizin sekmesindeki General->Frameworks, Libraries And Embedded Contentbölüme eklemektir General.

'Yerleştir ve İmzala' seçeneğini seçtiğinizden emin olun.

resim açıklamasını buraya girin

[Xcode v6 -> Xcode v10]

Yapılacak tek şey, çerçeveyi uygulama hedefinizin sekmesindeki Embedded binariesbölüme eklemektir General.

Xcode'dan ekran görüntüsü


32
Bu, iOS için gerekli olan tek adımdır.
nikolovski

7
Teşekkürler! İOS'ta benim için çözdüm.
user1244109 23:15

6
Teşekkür ederim!
İOS

4
Storyboard'da içe aktarılan çerçevemden bir sınıf kullanıyorum ve bu hatayla karşılaşıyordum. Sadece Storyboard'da Özel SINIF ayarlamaya ek olarak, MODÜL alanını da ayarlamanız gerekir.
Ruben Martinez Jr.

8
@ZevsVU Embedded binariesmacOS projemde bölüm yok . Sorun nedir?
fnc12

56

Bu yüzden onu çalıştırmayı başardım, doğru talimatlara sahip olduğunuzda oldukça basit. Aradığım şey, sistem kitaplığı klasörüne yazılmak yerine Uygulama paketinde yaşayan bir 'özel' çerçeveydi.

Çerçeveyi Oluşturmak

  1. Kakao Çerçevesi oluşturmak için hedef ekleme
  2. Bu hedefler dahilinde 'Derleme Ayarları', 'Kurulum Dizini'ni' @executable_path /../ Frameworks 'olarak yapılandırın
  3. Kitaplık oluşturun ve .framework dosyasına arşivden veya ürünler dizininden erişin

Çerçeve Dahil

  1. Oluşturulan .framework dosyasını Xcode Projesi'ne sürükleyin, 'Dosyaları Dizine Kopyala' seçeneğini işaretlediğinizden emin olun.
  2. İçeren uygulamalar hedefine yeni bir 'Dosya Oluşturma Aşamasını Kopyala' ekleyin
  3. 'Hedef' i 'Çerçeveler' olarak ayarlayın
  4. Oluşturulan .framework içinde sürükleyin

1
Bu, iOS çerçeveleri için de geçerlidir. Özel çerçeveyi onunla birlikte oluşturmak için çalışma alanına eklerken. Cihazda hata ayıklama yaparken bu hatayı çözmek için bu çözümün Çerçeve Dahil bölümünü eklemelisiniz!
cynistersix

1
Teşekkürler, iOS için çalıştı. Çerçeveler zaten türetilmiş veri klasörümde oluşturulduğu için ilk adımlarınızı takip
etmedim

Müthiş! Freakin günümü kurtardım! 2017 - Xcode 8.3.2 Teşekkürler!
Glenn

Bazı garip nedenlerden dolayı, çerçeveyi varsayılan "Kütüphanelere İkili Bağla" bölümünden "Gömülü Çerçeveler" bölümüne sürükleyemezsiniz, ancak çerçeveyi soldaki Projeler listesinden sürükleyebilirsiniz. Çerçeveyi "İkili Kütüphanelere Bağla" bölümünden "-" düğmesiyle el ile silmeniz gerekir.
William Cerniuk

18

Benim için oldukça basitti, sadece uygulama hedefleri altında gömülü ikili dosyalarıma çerçevemi ekledim


15

Yukarıdaki seçenekleri dahil etmek benim için mümkün değil. Runpath Arama Yolunu belirterek çözdüm

Bu, ' Oluşturma Ayarları ' sekmesindedir. ' Bağlama ' bölümünde. ' Çalışma Yolu Arama Yolları'nı ' olarak değiştirin$(inherited) @executable_path/Frameworks


Ben her iki adımda, bu adım ve daha önce çerçeve ile yeni bir 'Dosya Oluşturma Aşaması' eklemek için gerekli.
user23

Kademeli olarak güncellenen eski bir Xcode projem vardı ve bu ayarlar benim için eksikti. Eklendi ve şimdi beklendiği gibi çalışıyor.
Mattio

Bu işe yaradı tüm bu çözümler dışında, sorun yaklaşımı "Tamam, tüm bu yığın akışı akışları listesi aşağı gitmek istiyorum, çünkü kök nedeni belirsiz" gibi rahatsız edici APPLEEEEE
Ryan

9

Aynı sorunla karşılaştım ama kabul edilen çözüm benim için işe yaramadı. Bunun yerine çözüm, çerçevenin yükleme adını değiştirmekti.

Orijinal yayındaki hata:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Kitaplık yüklenmediğinde ilk yolu not alın . Çerçeve mutlak bir yoldan yükleniyor. Bu yol, aşağıdakiler kullanılarak incelenebilen çerçevenin yükleme adından (bazen rpath olarak da adlandırılır) gelir:

otool -D MyFramework.framework/MyFramework

Bir çerçeve bir uygulamaya gömüldüğünde, bu yol göreceli ve şu biçimde olmalıdır: @ rpath / MyFramework.framework / MyFramework . Çerçevenizin yükleme adı mutlak bir yolsa, çalışma zamanında yüklenmeyebilir ve yukarıdakine benzer bir hata üretilir.

Çözüm, yükleme adını değiştirmektir:

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

Bu değişiklikle artık hatayı almıyorum



7

Bu sorunların hiçbiri bunu benim için çözmedi. Sonunda sorun oldukça kolaydı. Görünüşe göre, Apple bug altında 29820370 sorununu çözdüm ve düzelttim oldukça büyük bir Xcode hatası. hata raportöründe bir hata oluşturun: https://bugreport.apple.com/ ve görünürlük elde etmek için yükselttiğim hatayı referans alın. Xcode'u daha önce olduğu gibi zevk haline getirmek istiyorum - ve bu Xcode'un kendisinin düzeltmesi gerektiğine eminim.

İşte düzeltme: 1. Açık Anahtarlık - Apple Worldwide Geliştirici Sertifikasına gidin. 2. Üzerine çift tıklayın 3. Sistem Varsayılanlarını kullanmak için izin düzeyini "her zaman güven" olarak değiştirin 4. Kaydedip kapatın 5. Xcode'u yeniden başlatın, Projenizi temizleyin ve oluşturun;

Aşağıdaki doğru ayarların ekran görüntüsü: Anahtarlık erişimi düzeltildi Umarım bu yardımcı olur!


2
"Sistem Varsayılanlarını Kullan" standart ayar gibi görünmektedir.
Raphael

Her zaman değil - bir şey onu değiştiriyor gibi görünüyor bu
hata

Teşekkürler bu da benim sorunumu çözdü! Maalesef biletinizi ek izleyici sağlamak için hata izleyicide göremiyorum. Neden olduğundan emin değilim, orada herhangi bir hata göstermiyor.
Jim

7

Xcode 11:

Xcode 11'de çerçeve ekle General->Frameworks, Libraries And Embedded Content

ekledikten sonra Embed & Signseçeneği seçtiğinizden emin olun

resim açıklamasını buraya girin


2
Bunu yaparsanız, uygulamanızı uygulama mağazasına yükleyemezsiniz
Mahendra

@Mahendra, bu durumda kullandığınız alternatif nedir? Benzer bir sorunum vardı.
Derryl Thomas

@DerrylThomas, Uygulama hala geliştirme modunda bu yüzden bu davayı test etmedi
Mahendra

1
@Mahendra, bunun için bir alternatif bulursanız lütfen paylaşın. Çok minnettar olurum.
Derryl Thomas

@DerrylThomas Arşiv oluştururken, Gömme seçeneğine geri dönün ve uygulama mağazasına yüklemek için yürütülebilir dosya oluşturun.
BlackPearl12

6

Özel bir çerçeveyi Xcode 10.1 altındaki bir projeye sürüklediğinizde , çerçevenin bir sistem çerçevesi olduğunu varsayar ve çerçeveyi, hedefinizi altında "Yapılandırma Aşamaları" nın "Kütüphanelere İkili Bağlantı Oluştur" bölümüne yerleştirir.

Sistem çerçeveleri zaten cihazda olduğundan cihaza kopyalanmıyor ve bu nedenle çalışma zamanında yürütülemiyor, bu yüzden KABOOM (__abort_with_payload'da çökme ve dezenfekte etme hatası: "Neden: resim bulunamadı"). Bunun nedeni, çerçeve kodunun aygıta kopyalanmamasıdır ...

Gerçekte, Xcode'un hem özel çerçeveyi birbirine bağlaması hem de kodunuzla birlikte iOS aygıtına (gerçek veya simülatör) kopyalandığından emin olmak için özel çerçevenin "Paket Kaynaklarını Kopyala" ya taşınması gerekir. Bu, sonuçta çerçeveyi, aygıtta birlikte kullanılabilecek kod yürütülebilir ile birlikte paketler.

Bir projeye özel bir çerçeve eklemek ve Apple çökmesini önlemek için:

  1. Özel çerçeveyi iOS proje dosya listenize sürükleyin
  2. Gezgin'de ProjectName -> TargetName -> "Aşama Oluşturma" -> İkili Kitaplıklarıyla Bağla açıklama üçgeni
  3. Özel çerçeveyi aşağıdaki "Paket Kaynaklarını Kopyala" bölümüne sürükleyip bırakın (Xcode, şimdi Xcode 10'da düzeltilen çerçeve referansını taşır )
  4. Simülatör veya cihazda çalıştırın

Böylece özel çerçeve, kodunuzla birlikte hedef cihazınıza kopyalanır ve çalışma zamanında kullanılabilir.

resim açıklamasını buraya girin

[editöryal: Xcode'un, cihaza kopyalanması gerekmeyen sistem çerçeveleri ile proje kök dizin hiyerarşisinde özel bir çerçeve arasındaki farkı anlayacak kadar akıllı olacağını düşünürdünüz. ... 🙄]


5

Şu aşamada 'Derleme Aşamaları'nda bir' Komut Dosyası Çalıştır 'olmalıdır:' / usr / local / bin / carthage kopya çerçeveleri '

Bu 'Run Script'in' Giriş Dosyaları'nda, yolu kitaplıklarınıza eklemelisiniz. Bunun gibi:

Derleme Aşamaları Çalıştırma Komut Dosyası


4

Anahtarlığınızı yanlışlıkla sıfırlarsanız, bunun nedeni anahtarlıktaki eksik Apple sertifikaları olabilir. Ben takip bu benim sorunu çözmek için.

Aynı sorunu yaşadım ve WWDR'yi (Apple Worldwide Geliştirici İlişkileri Sertifika Yetkilisi) yeniden indirerek çözebildim. Buradan indirin: http://developer.apple.com/certificationauthority/AppleWWDRCA.cer


Bu benim sorunumu da çözdü. Derlemeden önce derleme klasörünü temizlemeyi unutmayın.
Justin Milo

4

Xcode 11 kullanıyorsanız , çerçeveyi Hedef ayarlar - Genel altında Çerçeveler, Kütüphaneler ve Gömme İçeriği'ne eklediğinizden emin olun. Gömme durumunu - 'Gömme' olarak 'Göm ve İmzala' olarak değiştirin


Ancak bu, App Store'a dağıtırken ITMS-90206 Geçersiz Swift Desteği hatası verir. Sadece Geliştirme'de çalışır.
Raptor

2

Ne benim için çözülmesi değişen oldu abstract_targetiçin targetbenim Podfile ana hedef için. Daha önce ayarlamıştım abstract_targetve bu açıklanan hataya neden oldu. Şimdi bir cazibe gibi çalışıyor


1

Xcode 8 için, bazı eski ürünler türetilmiş veri klasöründen kaldırılacaktır bu çözüme bakın .

Apple: macOS 10.12 ve sonraki sürümlerinde, Xcode eski türetilen verileri, önceden derlenmiş başlıkları ve modül önbelleklerini temizler. (23282174)

Xcode derleme sistemi, bir önceki derlemede üretilen ancak o zamandan bu yana projeden kaldırılan bazı derleme yapılarının eski dosya kaldırılmasını destekler.

Yazarın düşüncesine dayanarak, bu derleme günlüğünü davamdan buldum.

Remove stale build products

/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks

Yeni bir kopya dosyası aşaması oluşturduktan ve hedef eski çerçeveyi Frameworks hedefine kopyaladıktan sonra , yukarıdaki kaldırma günlüğü yeniden oluşturulduktan sonra kaybolur.

Sadece durumumu ve nedenimi açıklığa kavuşturun, umarım birisi için yararlıdır.


1

Benim için bu çözüm, arama saatler sonra !!

Herhangi bir nedenle, bir Swift 2.3 özel Çerçevesinin geliştirilmesinde, Xcode 8 DYLIB_INSTALL_NAME_BASEayarı project.pbxprojdosyadan kaldırmıştı . Build Settings / Dynamic Library Install Name BaseAyarı geri düzeltmek için küçük bir yürüyüş @rpath.

( https://forums.developer.apple.com/thread/4687 adresinden )


0

Bu sorun sadece kod imzalama ve kodlar kendisi ile ilgili olduğunu bulundu. Bunu doğrulamak için temel tek görünüm uygulamasını oluşturun ve cihazınızda herhangi bir değişiklik yapmadan çalıştırmayı deneyin. Aynı hata türünü görüyorsanız, bu kodunuzun iyi olduğunu gösterir. Benim gibi sertifikalarınızın geçersiz olduğunu göreceksiniz. Tümünü tekrar indirin ve süresi dolmuş olanları düzeltin. Daha sonra hatayı bildirmemek için temel uygulamayı aldığınızda, Xcode'dan çıktıktan ve belki de mac'inizi iyi bir ölçü için yeniden başlattıktan sonra uygulamanızı tekrar deneyin. Sonunda bu kabusu sona erdirdi. Büyük olasılıkla bunun özellikle kodunuzu çalıştırmayı denediğinizde Build Başarılı mesajı alırsanız kodunuzla ilgisi yoktur. Bilginize


0

Xcode 9 beta'yı denerken ve Xcode 8'e geri giderken sorunu çözdüm. Hedefe basit bir temizlik sorunu çözdü.


0

Farklı bir nedenden dolayı aynı sorunu yaşadım. Hata Ayıkla ve Bırak için yeni bir yapılandırma oluşturdum (PROJE -> Bilgi sekmesi -> Yapılandırma altında). Ve çalışmasını sağlamak için pod frameworks kabuk betiğimi (Pods- "appName" -frameworks.sh, Hedefler Destek Dosyaları altında) değiştirmek zorunda kaldım.

[Xcode 9]


0

Benim için işe yarayan tek şey:

Hedef> Derleme Aşamaları> [CP] Bölmeleri Gömme Çerçeveler "Derleme günlüğünde ortam değişkenlerini göster" ve "Betiği yalnızca yüklerken çalıştır" seçeneğinin işaretini kaldırın


0

Birçok düzeltme denedim, ancak benim için işe yarayan şey, yapı şemasının oluşturma sekmesinde listelenen eksik bir hedefi silmekti. Geçerli şemanın düzenleme penceresini açarak buna ulaşabilirsiniz.

Düzenleme: Benim UI test hedefim de işe yaramadı ve bulduğum çözüm onu ​​silmek ve tekrar oluşturmaktı.


0

xcode'u açın -> genel -> Gömülü İkili Dosyalar -> QBImagepicker.framework ve RSKImageCropper ekleyin -> temiz proje

sadece benim için çalıştı gömülü ikili QBImagePicker.framework ve RSKImageCropper.framework ekleyin


0

Farklı bir nedenden kaynaklanabileceğinden, bu sorunu çözmenin sabit bir yolu olmadığını düşünüyorum. Ayrıca geçen hafta bu sorunu yaşadım, bu soruna ne zaman ve tam olarak neyin neden olduğunu bilmiyorum, sadece Xcode ile simülatörde çalıştırdığımda veya telefona yüklemeye çalıştığımda, bu tür bir hata bildiriyor, Ama ne zaman terminal ile reaktif-doğal run-ios ile çalıştırın, sorun yok.

İnternette yayınlanan sertifikaları yenile, Xcode'daki ayarları değiştir (yukarıdaki tüm yollardan bahsediyor) gibi aslında tüm yolları kontrol ettim, aslında Xcode'daki tüm ayarlar daha önce istendiği gibi ayarlanmış, hiçbir şekilde benim için çalışmıyor. Bu sabaha kadar bölmeleri sildiğim ve yeniden yüklediğimde, hata sonunda bir hafta sonra olacak. Ayrıca cocoapod kullanıyorsanız ve sonra hata sadece belirli bir sebep olmadan ortaya çıktıysa, belki de benim yolumu deneyebilirsiniz.

  1. Cocoapods versiyonumu kontrol et.
  2. Yeni sürüm mevcutsa güncelleyin.
  3. Proje klasörünüze gidin, Podfile.lock, Pods dosyanızı, proje xcworkspace'inizi silin.
  4. Kapsül yüklemesini çalıştır

0

Bu sorunu yalnızca gerçek cihazda (iPhone SE) çalışırken yaşadım. Simülatör projesinde beklendiği gibi çalıştı.

Ben bu çok iplik ve buradan tüm düzeltmeleri denedin mi . Bunların hiçbiri benim için çalışmadı.

Benim için sorun iPhone (sic!) Yeniden başlatıldıktan sonra çözüldü.

Yaptım:

  • temiz inşa klasörü,
  • temiz türetilmiş veri,
  • uygulamayı cihazdan sil,
  • cihazı yeniden başlat

Ve sonunda işe yarıyor. :)

Her çözüm başarısız olursa denemeyi unutmayın.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.