Cihazda çatısı olan iOS uygulaması, dyld: Kütüphane yüklü değil, Xcode 6 Beta


573

Bu çökme engelleme sorunu oldu Sorunu yeniden oluşturmak için aşağıdaki adımları kullandım:

  • Kakao Dokunmatik Çerçeve projesi oluşturma
  • Hızlı bir dosya ve bir sınıf Köpek ekleyin
  • Cihaz için bir çerçeve oluşturun
  • Swift'te Tek Görünüm uygulaması oluşturma
  • Çerçeveyi uygulama projesine aktar
  • ViewController'daki çerçeveden swift sınıfını örnekleme
  • Cihazda bir uygulama oluşturun ve çalıştırın

Uygulama başlatıldıktan hemen sonra çöktü, işte konsol günlüğü:

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

İOS 7.1 ve 8.0 cihazlarını oluşturmaya çalıştım, ikisi de aynı çökmeye sahip. Ancak, bir uygulama oluşturabilir ve simülatör para cezası ile çalışabilirim. Ayrıca, ben oluşturmak üzere bir çerçeve değiştirebilir farkındayım Gerekli için İsteğe içinde bağlantı İkili ile Kütüphaneleri , ancak, uygulama çöktü ben bir örneğini oluştururken sorunu tamamen çözmedi Dog . Cihaz ve simülatördeki davranış farklıdır, Xcode'un beta sürümünü kullanarak cihaz için bir çerçeve dağıtamayacağımızdan şüpheleniyorum. Herkes buna ışık tutabilir mi?


1
Anlamadığım şey, diğer tüm üçüncü taraf çerçevelerinin neden kutunun dışında çalıştığı ve kolayca sürüklenip bırakılabileceğidir Link Binary with Librariesve Xcode bunları bir şekilde uygulama paketinize kopyalamayı biliyor, oysa özel çerçeveler için bu gerçekleşmez.
fatuhoku

sazzad hissain khan'ın cevabı burada stackoverflow.com/questions/26024100/… en iyi cevaptır ..
Ankit Kumar


şişman bir kütüphane yapabilirsiniz, şu bağlantıyı görebilirsiniz: stackoverflow.com/a/54977145/3992606
mohsen

Xcode sürümü eşleşmiyor , stackoverflow.com/a/55738882/5443510 ile çözüldü .
Jimmy Yin

Yanıtlar:


975

Hedefin Genel sekmesinde Gömülü İkililer var alanı bulunur. Çerçeveyi eklediğinizde çökme çözülür.

Apple Geliştirici Forumlarında referans burada .


73
Gömülü İkili Sistemlerde çerçeveye sahibim ve Kopyalama Aşaması'nı da "Çerçeveler" olarak ayarladım. Zaten çöküyor.
loretoparisi

11
Bu sadece hata ayıklama modunda çözüldü. Bir projeyi arşivlediğinizde veya oluşturduğunuzda tekrar hata
oluşuyor

13
'Runpath Arama Yoluna' @ executable_path / Frameworks eklemek bu sorunu çözdü, yani 'Gömülü İkili
Sistemler

14
Herkes POD'lardan Gömülü İkili Sistemlere nasıl çerçeve eklenebilir?
Bonnke

3
Aynen. Bana verilen XCode 6.4 bulunacak hayır "Genel> Gömülü Binaries" var, PODs eklemek için bilmek gibi de olur çıkıntıları kullanarak
ded

259

8'den büyük veya 8'e eşit iOS için

Hedefin Genel sekmesi altında, Gömülü İkililer bölümüne çerçeveyi ekleyin. Bu, çalışma zamanında bağlanabilmesi için çerçeveyi derlenmiş olarak kopyalar.

resim açıklamasını buraya girin

Bu neden oluyor? : bağlandığınız çerçeve dinamik olarak bağlı bir çerçeve olarak derlendiğinden ve çalışma zamanında bağlı olduğu için.

** Not: ** Özel çerçevelerin gömülmesi yalnızca iOS> 8'de desteklenir ve bu nedenle iOS'un eski sürümlerinde çalışan alternatif bir çözüm gelir.

8'den az iOS için

Bu çerçeveyi etkilerseniz (kaynak koduna / derleme işlemine erişiminiz varsa) bu çerçeveyi dinamik olarak bağlı olmak yerine statik olarak bağlı olacak şekilde değiştirebilirsiniz. Bu, kodun çalışma zamanında bağlantılı olmak yerine derlenmiş uygulamanıza eklenmesine neden olur ve bu nedenle çerçevenin gömülmesi gerekmez.

** Nasıl: ** Çerçevenin Yapı Ayarı sekmesinde, Bağlama bölümünde Mach-O Türünü Statik Kitaplık olarak değiştirin. Şimdi çerçeveyi katıştırılmış ikili dosyalara dahil etmeniz gerekmez.

Statik Çerçeve

Varlıklar Dahil Etme: Görüntü, ses veya xib / nib dosyaları gibi şeyleri dahil etmek için bir paket (aslında bir dizin, burada daha fazla bilgi bit.ly/ios_bundle) oluşturmanızı ve ardından varlıkları NSBundle kullanarak paketten yüklemenizi öneririm.


1
Çerçeve Pod'lardaysa, gömülü ikili dosyalara nasıl çerçeve ekleyebilirim?
TomazStoiljkovic

"Çerçeve Pod'lardadır" ile ne demek istiyorsun? Özel çerçevenizin CocoaPods üzerinden dağıtıldığını?
Dawson

2
Bu "8'den büyük veya 8'e eşit" olmalıdır. Bunu iOS 8'de de yapmak zorunda kaldım.
Cruinh

hatasıSwift is not supported for static libraries
jose920405

@TomazStoiljkovic bunu anladın mı? Ben aynı sorun var, ben ikili olarak inşa etmek istiyorum çerçeve var, ama kakao bakla yoluyla diğer çerçevelere bağlıdır.
MegaManX

125

Çerçeveyi projenize sürüklemek yeterli olmayacaktır. Bu aynı balo parkında olmak ama çocuklarınızı bulamamak gibidir. Bu adımları takip et:

1) Çerçevenizi oluşturun

  • Çerçevenizi geliştirin.
  • Geliştirme tamamlandıktan sonra, COMMAND+ Bçerçevenizi oluşturun ve "Başarılı Yapıldı" iletisini aldığınızdan emin olun.

resim açıklamasını buraya girin

2) Çerçevenize erişin

  • Çerçeve projeniz başarıyla oluşturulduktan sonra Productsprojenizdeki klasörünüze erişmeniz için hazır olacaktır .

resim açıklamasını buraya girin

  • Üzerine sağ tıklayın .frameworkve "Finder'da Göster" i seçin.

resim açıklamasını buraya girin

3) Projenize çerçeve yerleştirin

  • Öğesini .frameworkFinder pencerenizden uygulama projenizin "Çerçeve" klasörüne sürükleyip bırakın .

resim açıklamasını buraya girin

4) Uygulama projesini çerçeve için yapılandırın

  • Projenizin en üst seviyesini seçin

resim açıklamasını buraya girin

  • Hedefinizi seçin

resim açıklamasını buraya girin

  • "Derleme Aşamaları" na, ardından "İkili Kitaplıklarıyla Bağlantılandır" a gidin ve çerçevenizin isteğe bağlı olarak seçili olduğundan emin olun .

resim açıklamasını buraya girin

  • Yine de "Yapı Aşamaları" nda, sol üst tarafa gidin ve +düğmeyi seçin . Açılır menüden "Yeni Kopya Dosyaları Aşaması" nı seçin.

resim açıklamasını buraya girin

  • Yeni "Dosyaları Kopyala" bölümüne gidin ve Destination"Çerçeveler" olarak ayarladığınızdan emin olun . Alt yolu boş bırakın. Ardından +sol alttaki düğmeyi tıklayın .

resim açıklamasını buraya girin

  • Size proje hiyerarşiniz sunulacaktır. 3. adımda çerçeveyi eklediğiniz "Çerçeveler" klasörüne gidin veya üstteki arama çubuğunda arayın. Çerçevenizi seçin ve "Ekle" yi tıklayın.

resim açıklamasını buraya girin

  • Çerçevenizin "Kod Oturum Açma Kopyası" seçili olarak dahil edildiğinden emin olun.

resim açıklamasını buraya girin

5) Temizleyin, sonra projenizi çalıştırın

  • COMMAND+ SHIFT+K
  • COMMAND+R

5
İyi bir nokta. Neredeyse benim için çalışıyor. Alamofire'ı içeren bir A çerçevesi yaptım. Ana makinem Uygulaması (gömülü çerçeve A) simülatörlerde çalışır. Ama gerçek bir iPhone'da çalıştırmayı denediğimde, hata ile çöküyor: Alamofire: dyld: Kütüphane yüklenmedi: @ rpath / Alamofire.framework / Alamofire Sebep: uygun resim bulunamadı. Şunu buldunuz: xxx / ddcdemo.app / Frameworks / iddc.framework / Frameworks / Alamofire.framework / Alamofire: mach-o, ancak yanlış mimari
DàChún 11:17

1
@Brandon Çerçeveye isteğe bağlı olmak sorunumu çözdü. Ama lütfen çerçeveyi isteğe bağlı yapma davranışının ne olduğunu açıklayabilir misiniz?
Mitesh Dobareeya

2
Teşekkür ederim! 5. adımınızda, "Yalnızca yüklerken kopyala" seçeneğini işaretledim ve sorunum buydu.
Andi

48

Swift3 / Xcode 8.1 kullanarak bir çerçeve oluşturdum ve bunu Objective-C / Xcode 8.1 projesinde tüketiyordum. Bu sorunu gidermek için aşağıdaki Always Embed Swift Standard Librariesseçeneği etkinleştirmem gerekiyordu.Build Options .

Bu ekran görüntüsüne bir göz atın:

resim açıklamasını buraya girin


3
Bu şu anda benim için işe yaradı. Bu sorunun çözümü, BuildPhases -> Dosyaları Kopyala -> Hedef altında Çerçeve'yi seçip çerçevenizi eklemektir. Muhtemelen kütüphaneniz burada eksik.
Harish

@Harish, Önerdiğiniz çözüm zaten birkaç kişi tarafından öneriliyor ve kesinlikle ilk noktada bununla ilgileniyorum. Benim durumumda çerçeve eklendi, ancak yine de aynı sorun ortaya çıktı. Sonra kendim kazarım. Bu çözüme oy
verdiyseniz

@Harish Thanks. Cevabınız bana çok daha fazla yardımcı oldu ve elbette NeverHopeless's da yaptı :) Teşekkürler çocuklar
Mohsin Khubaib Ahmed

Benim için işe yarayan tek şey buydu .. ama zaten çerçeveyi hedefimin Embedded Binariesbölümüne "yerleştiriyorum" . Peki bu neden işe yarıyor?
guptron

Bu şey harika çünkü objektif C projesine gömmek için hızlı bir kütüphane veya bir bölme kullanıyorsanız. Hedef C projesi genellikle bu bayrağa Hayır.
Swaroop S

47

Öncelikle Command + Option + Shift + K'den sonra oluşturmaya çalışın. Hala başarısız olursa aşağıdaki adımları uygulayın.

Xcode 8'de bu hatayla karşılaşan herkes, hedefinizin Genel Sekmesi altında çerçeve durumunuzu Zorunlu yerine İsteğe bağlı olarak değiştirin .

resim açıklamasını buraya girin


3
Bu, çalışma zamanının sınıfları çerçeveden tanımamasını sağlayacaktır
tesla

@azimov doğrudur. Şu anda bu ikilemle karşı karşıyayım. Gerekli "görüntü bulunamadı" hatasına neden olur ve isteğe bağlı olarak ayarlamaya çalışırsak, "tanınmayan seçici" ile çalışma zamanında kilitlenir
Adam Mendoza

1
Çerçevem ​​zaten Link Binaries ve Embed'de olmasına rağmen, yine de bir Kopyalama Safhası eklemek zorunda kaldım. dyld: Kütüphane yüklenmedi: @ rpath / AFNetworking.framework / AFNetworking Başvuru sahibi: / Users / {User} / Library / Developer / CoreSimulator / Devices / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / Containers / Bundle / Application / B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / Uygulamam Nedeni: görüntü bulunamadı (lldb) Çözüm: Proje -> Hedef -> Aşama Oluştur -> + üstte Yeni Kopya Dosyaları eklemek için faz Hedef = Çerçeveler Çerçeveyi seçin kopyalanması gereken
Adam Mendoza

@AdamMendoza Bunu yaptığım için uygulamam reddedildi.
jbouaziz

@jbouaziz, evet. Mağaza size bir hata verecektir, ancak Xcode'da hatayı göremeyebilirsiniz. Xcode -> Geliştirici Yazılımını Aç -> Uygulama Yükleyici altındaki yükleyiciyi kullanın. SolutionL inceltmek bkz: -> ikennd.ac/blog/2015/02/…
Adam Mendoza

28

İOS 9.x sürümünde de aynı sorunla karşılaştım

SORUN: Uygulamayı aşağıdaki hata ile açtığımda uygulama kilitleniyor.

dyld: Kütüphane yüklenmedi: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Gönderen: /var/containers/Bundle/Application/######/TestApp.app/TestApp Sebep: resim bulunamadı

Ben değiştirerek bu sorunu çözmüş bulunuyoruz Requirediçin Optionalde Linked Frameworks and Librariesiçin UserNotifications.frameworkçerçeve.


Bu çalışıyor. Nedenini bilen var mı? Çünkü bazı cihazlar bu ayara ihtiyaç duyar, diğerleri buna gerek duymaz.
NEO

"Uyarı: süreçte Objective-C sınıfı verilerini okumak için destek kodu yürütülemedi. Bu tür bilgi bilgilerinin kalitesini düşürebilir."
libimi

belki çalıştı bazı neden simülatörde çalışmadı bu yüzden
Gowtham Sooryaraj

@ redent84 Bu cevap, yorumunuzla birlikte beni delirmekten kurtardı. İOS 12 gerektiren AuthenticationServices.framework ile bu sorunla karşılaştım
Tamás Sengel

26

Oluşturma Ayarları sekmesi altında Runpath Arama Yollarına aşağıdaki satırı eklemek zorunda kaldım :
@executable_path/Frameworks

resim açıklamasını buraya girin


Bu benim için sorunu düzeltti. İOS 9 uygulamama bir uygulama uzantısı ekledikten sonra sorunu yaşamaya başladım. Uzantıyı eklemeden önce, çerçevem ​​gayet iyi bulundu. Bir Kopya Dosyaları oluşturma aşaması eklemek yardımcı olmadı ve zaten çerçeveyi katıştırıyordum.
Greg

Bu, varsayılan olarak dahil edilmemesi çok garip. IPA'nızı açıp bakarsanız, çerçevelerinizi Payloads / appname.app / Frameworks / içinde bulabilirsiniz. Ancak, uygulamanın çalışma zamanı sırasında bu klasöre bakması için bu arama yolunun eklenmesi gerekir. Tuhaf.
mattv123

25

Çerçevenin çalışma zamanında uygulama paketine kopyalandığından emin olmak için çerçeveyi yeni bir Kopya Dosyaları Oluşturma Aşamasına eklemeniz gerekir.

Daha fazla bilgi için Hedefime 'Dosyaları Kopyala oluşturma aşaması' ekleme konusuna bakın .

Resmi Apple Dokümanları: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html


Birçok şeyi denedikten sonra, benim için çözen bu oldu. Çerçeveyi zaten Link Binary ve Embed Framework içinde buldum. Ben de bir Kopyalama Aşaması eklemek zorunda olduğunu düşünmüyordu ama bu düzeltti.
Adam Mendoza

14

Xcode 11 veya daha yenisini kullanıyorsanız :

  1. Hedefinizin ayarlarına gidin ve Genel'i seçin .

Hedef Ayarları / Genel

  1. Aşağı kaydırarak Çerçeveler, Kütüphaneler ve Katıştırılmış İçerik'e gidin .

  2. Gerekirse Yerleştir seçeneği için Yerleştir ve İmzala veya İmzasız Yerleştir değerinin seçili olduğundan emin olun .

Çerçeveler, Kütüphaneler ve Gömülü İçerik bölümü


13

Çerçeveyi Gömülü İkililer'e ekleyin resim açıklamasını buraya girin

Sonra temizleyin ve oluşturun.


11

Şaşırtıcı bir şekilde, en azından Xcode 8 için gerekli tüm parçalar burada belgelenmemiştir.

Benim durumum, aynı çalışma alanının bir parçası olarak özel olarak oluşturulmuş bir çerçeveydi. Yanlış inşa edildiği ortaya çıktı. Jeremyhu'nun bu konuya son yanıtına dayanarak:

https://forums.developer.apple.com/thread/4687

Altına Dynamic Library Install Name Base( DYLIB_INSTALL_NAME_BASE) koymak zorunda kaldımBuild Settings arasında Çerçeve Projesi ve sonra da yeniden. Yanlış olarak ayarlanmış $(LOCAL_LIBRARY_DIR)ve bunu değiştirmek zorunda kaldım @rpath.

Yani bağlantı işleme aşamasında Uygulama Projesi'ndeki , ana bilgisayara Uygulamaya, uygulama yolundan/Library/Frameworks/fw.Framework/fw ziyade çerçeveyi çalışma zamanında dinamik olarak yüklemesi talimatı verildi (çalışma zamanı dosya sisteminin kökü gibi)/Frameworks/fw.Framework/fw

Diğer tüm ayarlarla ilgili olarak: gelmez içinde 3 yerde olmak zorunda Build Phases, ama bunlar sadece eklediğinizde kerede tüm ayarlanır Embedded Binariesayarına Generalbarındıran App sekmesine.

Yaptığım değilCopy FilesZaten gömme aşamasına göre sezgisel olarak gereksiz görünen ekstra bir faz . Derleme transkriptinin kuyruk ucunu kontrol ederek bunun gerekli olmadığından emin olabiliriz.

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

[Birçok ayrıntılı satır kaldırıldı, ancak Xcode kullanıcı arayüzündeki basitleştirilmiş transkriptten anlaşılıyor.]

Hala Xcode neden değeri yanlış bana ayarlamak hiçbir fikrim yokDYLIB_INSTALL_NAME_BASE .


1
Teşekkürler, bu Xcode 11 benim sorunum ortaya çıktı. Daha önce çalıştı, ancak "dyld: Kütüphane yüklenmedi" hatası vermeye başladı kendi çerçevelerimden birini ithal edildi. Açık olmak gerekirse, size, ithalat için çalışıyoruz çerçevenin projesinde "@rpath" "Dinamik Kütüphane Adı Base yükle" inşa ayarını ayarlamak istediğiniz değil içine ithal ediyoruz projede. Her nasılsa "/ Library / Frameworks" olarak ayarlandı.
Ben Stahl

Bu 3 yıl sonra yardımcı oldu sevindim. Buna göre düzenlendi.
BaseZen

9

Benim durumumda çözüm, derlenmiş çerçeveyi çalışma alanındaki bağımsız bir proje olan Gömülü İkililer'den kaldırmak, temizleyip yeniden oluşturmak ve nihayetinde Gömülü İkililer'e yeniden eklemekti.


8

Çevrem: Cocos2d 2.0, Box2d, Amaç C

Yukarıdaki diğer yanıtları yapmanın yanı sıra sonunda Genel sekmesine gittim ve WatchKit'i İsteğe Bağlı hale getirdim.

Hedef Genel Bağlantılı Çerçeveler ve Kütüphaneler Watchkit.framework İsteğe bağlı


8

Üçüncü taraf bir çerçeve kullanıyorsanız ve bağımlılık yöneticiniz olarak Cocoapod'ları kullanıyorsanız, pod install , kapsüllerinizi yenilemek için .

Bu çökme kullandığım üçüncü taraf bir kütüphanede meydana geliyordu, yukarıdaki çözüm benim için çalıştı, umarım sizin için çalışıyor!


1
Harika! sorunumu çözdü. Ama benim ana App pod bağımlılıkları yüklemek kaçınmanın bir yolu var mı?
DàChún

8

resim açıklamasını buraya girin

Derleme Aşamaları-> Çerçeveleri Yerleştir'deki "Yalnızca yüklendiğinde kopyala" seçimini kaldırarak benim için çözüldü


1
Sistem "hata ayıklama kurulumu" nun "kurulum" olmadığına inanmazsa, bu onay kutusunun noktasını bilmek iyi olurdu. Ne olursa olsun, bir uyarı ile uygulamanın çalışmasını yasaklamak yerine donanımda uygulamanın çökmesine neden oluyorsa, temiz bir başka Xcode hatası
William Cerniuk

8

Neden olduğu bir çalışma zamanı hatasıdır Dynamic Linker

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

Hata Library not loadedile @rpathgösterir Dynamic Linkerikili bulamıyorum.

  1. Dinamik çerçevenin eklenip eklenmediğini kontrol edin General -> Embedded Binaries

  2. @rpathTüketici (uygulama) ve üretici (dinamik çerçeve) arasındaki kurulumu kontrol edin :

    • Dinamik çerçeve:
      • Build Settings -> Dynamic Library Install Name
    • Uygulama:
      • Build Settings -> Runpath Search Paths
      • Build Phases -> Embed Frameworks -> Destination, Subpath

Dinamik bağlayıcı

Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)tarafından kullanılan loadable bundle( Dynamic frameworkburada bir türevi gibi) dylddevreye girer
Dynamic Library Install Nameikili dosyasının yolunu (değil .framework) -. Evet, onlar aynı isme sahip olabilir ama MyFramework.frameworkbir olduğunu packaged bundleile MyFrameworkiç ikili dosya ve kaynakların.
Dizinin Bu yol mutlak veya göreceli olabilir (örneğin @executable_path, @loader_path, @rpath). Göreli yol daha çok tercih edilir, çünkü paketinizi tek bir dizin olarak dağıttığınızda yararlı olan bir çapa ile birlikte değişir

mutlak yol - Framework1 örneği

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

@executable_path

@executable_path - giriş ikili dosyasına göre - Framework2 örnek
kullanım örneği: a Dynamic frameworkbir uygulamaya gömme

//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 - bu ikili
kullanım örneğinin sahibi olan pakete göre : gömülü çerçeveli çerçeve - içinde Framework3_2 içeren Framework3_1

//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 - Runpath Arama Yolu

Framework2 örneği

Daha önce dyld ile çalışmak için bir Çerçeve kurmalıydık. Bu uygun değildir, çünkü aynı Çerçeve farklı konfigürasyonlarla kullanılamaz

@rpath dış (Uygulama) ve iç içe (Dinamik çerçeve) parçalara dayanan bileşik bir kavramdır:

  • Uygulama:

    • Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)- ile değiştirilecek şablonların bir listesini tanımlar @rpath.
       @executable_path/../Frameworks
    • İnceleme Build Phases -> Embed Frameworks -> Destination, Subpathtam embed çerçevesi bulunduğu shire olmak
  • Dinamik Çerçeve:

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- @rpathbir ikilinin yerel paket yolu ile birlikte kullanılan nokta
      @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

* ../- geçerli dizinin üst dizinine git

otool - nesne dosyası görüntüleme aracı

//-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 kullanarak dinamik paylaşılan kitaplık yükleme adlarını değiştirme -rpath

CocoaPodskullanımları use_frameworks![Hakkında] bir düzenlemeyeDynamic Linker

[Kelime]


6

Son zamanlarda eski iPhone'larda (örn. İPhone 6) ve Xcode'da (11.3.1) CoreNFC'yi içe aktarmada bu sorunla karşılaştık. Tarafından çalışmasını sağlayabildim

  1. Senin içinde Projeler , hedefi seçin.
  2. Üstteki Genel sekmesine git .
  3. ' Çerçeveler, Kütüphaneler ve Gömülü İçerik ' bölümünün altına çerçeveyi ekleyin (benim için CoreNFC idi). Diğer hedefler için tekrarlayın.
  4. Üstte Aşama Oluştur'a tıklayın ve ' İkili Kütüphanelere Bağlayın ' .
  5. Sorunlu çerçeveyi isteğe bağlı yapın (gerekliyse).

Bu, herhangi bir kod değişikliği yapmadan daha eski / daha yeni iPhone'lar için derlememi sağladı. Umarım bu başkalarına yardımcı olur.


1
TEŞEKKÜR EDERİM. İsteğe bağlı yapmak eksik bağlantı oldu ...
fl034

çalışmıyor, uygulama kilitleniyor ve bazı montaj kodlarında bir kesme noktası yerine kilitlenme türünü gösteren bir mesaj yok.
Newsonic

bu isteğe bağlı olmak için neden gereklidir?
rohitwtbs

5

Aynı sorunu yaşadım. Projemi daha önce hiç kullanmadığım bir iPhone ile oluşturmaya çalıştım ve yeni bir çerçeve eklemedim. Benim için temizlik iyi çalıştı ( Shift + Command + K ). Belki de Xcode 7'nin beta 5'ini ve iOS 9 Beta ile bir iPhone 6'yı kullandığım için işe yaradı, ancak işe yaradı.


Ve belki de Temiz bir Yapı Klasörü (CMD + Shift + Alt + K)
Grifas

4

Benim durumumda, projem obj-c tarafından yazılmış ve kütüphanede Swift dosyaları var. Değiştim Yani "Her zaman Göm Swift Standart Kütüphaneler" Benim projenin içinde inşa Ayarları için sekmede Evet ve bunda bir şey yok oldu.


4

Xcode'da pod kullanan herhangi bir proje veya Framework projesi için, dinamik kitaplığın (dylb) yüklenmemesini önlemenin kolay bir yolu, pod dosyasını mürekkeple statik modda ayarlamaktır. Bunu yapmak için, pod dosyanıza aşağıdaki satırı yazmadığınızdan emin olun.

use_frameworks!

Kaydettiğiniz satır dosyadan silindikten sonra, konsoldan çalıştırmanız yeterlidir:

$ pod update

2

Geliştirme kapsülü varsa Uygulamanızı simülatör kurulumundan bölmeden silin -> temizle -> tekrar çalıştır ...


2

Aynı şey yeni bir Yapılandırma ve Derleme Düzeni oluşturduğumda da oldu .

Benim için çözüm koşmaktı

pod install

Bu yeni oluşturulan Yapılandırma için.


1

İnternette mevcut tüm yöntemleri denedikten ve 100 kez kendi deneme ve hata hilelerim. Sonunda çözebildim. - Apeksha Sahu 6 dakika önce
Mac'te iTunes'a Git -> hesaplar -> Bu bilgisayarı yetkilendir - Apeksha Sahu 5 dakika önce
ikinci adım .... iPad ve iPhone ayarlarında geliştiriciye git ve tanımlayıcılarla yeniden oluştur ve güven bilgisayarları temizle her şey. Benim için çalıştı ........ ....... Mac OSHigh seria 10.13.15 sürümünü Mac OS seirra beta son sürümünden yükledikten sonra, tüm sertifikaları güncelledikten sonra Xcode'un en son sürümünü yeniden yüklemeye. vs vs vs ... düşündüğünüz kadar çok yöntem yaptım. -resim açıklamasını buraya girin


1

Oluşturma Ayarları'ndaki bayrağı ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES(önceki xcode sürümlerinde:) NO'dan Embedded Content Contains Swift CodeYES'e değiştirmeyi deneyin .


1

Xcode 11

  1. Hedefinizin ayarlarına gidin ve Genel'i seçin.
  2. "Çerçeveler, Kütüphaneler ve Gömülü İçerik" araması yapın
  3. "Yerleştirme" seçeneğini koruyun ve tüm hedeflerinizin (birden fazla varsa) başkalarının hedeflerini değil, yalnızca kendi çerçevesini oluşturduğundan emin olun.

1

In Xcode 11

Aynı sorunla karşı karşıyaydım

Değişen "Do Not yerleştir" in Genel Tab > "Çerçeveleri, Kütüphaneler ve Gömülü İçerik" hala aynı hatayı çıkan edildi.

Ne beni ekleyerek edilmiş çözüldü vermedi Framework içinde Yapı Aşamaları Tab > yerleştir Çerçeveleri bölüm

--Güncellenmiş---

Xcode 11'de Xcode Embed Frameworks Bölümü'nün önceki sürümlerinde oluşturulmuş projelerde mevcut olmadığını gözlemledim, Çözüme ulaşmak için aşağıdaki adımları bulun:

1: Öncelikle Derleme Aşamaları sekmesi altında Yeni Kopya Dosyaları Aşaması eklemeniz gerekir .

resim açıklamasını buraya girin

2: İkincisi eklenen fazın adını Çerçeveleri Göm olarak değiştirin resim açıklamasını buraya girin

3: Hedefi Çerçeveler olarak değiştirin .

resim açıklamasını buraya girin

4: Hatanın oluştuğu çerçeveyi ekleyin.

resim açıklamasını buraya girin


1

Herkes çerçeveyi Gömülü İkili Sistemler altına yerleştirmeyi söylüyor olsa da hala çalışmıyor, çünkü burada önemli bir adım eksik.

Yerleşik İkililer sekmesi altında ikili dosyaları eklemek için iki doğru adım şunlardır:

  1. Hata veren çerçeveyi Genel sekmesi altındaki "Bağlantılı Çerçeveler ve Kütüphaneler" den kaldırın.

  2. Şimdi kaldırılan çerçeveyi yalnızca Gömülü İkililer sekmesinin altına ekleyin ve tek yapmanız gereken budur.

Cihazda çalıştırın ve gülümsemeye devam edin;)


0
  1. Xcode -> Çalışma alanı ayarları içindeki dosyaya gidin
  2. Yanında görünen oku tıklayın / Users / apple / Library / Developer / Xcode / DerivedData
  3. Türetilmiş verileri seçin ve Çöp Kutusuna taşıyın.
  4. Xcode'u oldukça ve yeniden açın.
  5. Projeyi temizleyin ve tekrar çalıştırın.

Yukarıdaki adımlar benim durumlarımı çözdü.


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.