設備上的iOS應用程序崩潰,dyld:Library未加載,Xcode 6 Beta


Answers

對於iOS大於或等於8

在目標的常規選項卡下,在嵌入式二進製文件部分添加框架。 這會將框架複製到編譯過程中,以便在運行時鏈接到框架。

這是為什麼發生? 因為你鏈接的框架被編譯為一個動態鏈接的框架,因此在運行時被鏈接。

注意:嵌入自定義框架僅在iOS> 8中受支持,因此可以在較早版本的iOS上使用替代解決方案。

對於iOS少於8

如果你對這個框架有影響(可以訪問源代碼/構建過程),你可以將這個框架改為靜態鏈接而不是動態鏈接。 這將導致代碼被包含在編譯的應用程序中,而不是鏈接到運行時,因此框架不必被嵌入。

如何:在框架的構建設置選項卡的鏈接部分中,將Mach-O類型更改為靜態庫。 您現在不需要在嵌入式二進製文件中包含框架。

包括資產:為了包括圖像,音頻或xib / nib文件等內容,我建議創建一個包(本質上是一個目錄,更多信息請參閱bit.ly/ios_bundle),然後使用NSBundle從包中加載資源。

Question

這次崩潰是一個阻塞問題,基本上我使用以下步驟來重現問題:

  • 創建一個Cocoa Touch框架項目
  • 添加一個swift文件和一個類Dog
  • 為設備構建框架
  • 在Swift中創建一個單一視圖應用程序
  • 將框架導入應用程序項目
  • 在ViewController框架中實例化swift類
  • 在設備上構建並運行應用程序

該應用立即崩潰啟動時,這裡是控制台日誌:

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

我試圖在iOS 7.1和8.0設備上構建,它們都具有相同的崩潰。 不過,我可以構建應用程序並在模擬器上運行。 另外我知道我可以將框架從“ 必需”更改為“ 可選” ,但它並未完全解決問題,應用程序在創建Dog實例時崩潰。 在設備和模擬器上的行為是不同的,我懷疑我們不能使用Xcode的beta版本為設備分發框架。 任何人都可以闡明這一點嗎?




我在iOS 9.x版本中遇到了同樣的問題

ISSUE IS: App crashes as soon as I open the app with below error.

dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Referenced from: /var/containers/Bundle/Application/######/TestApp.app/TestApp Reason: image not found

我通過將Linked Frameworks and Libraries for UserNotifications.framework框架中的Required更改為Optional來解決了此問題。




如果有開發pod從模擬器安裝從pod刪除你的應用程序 - >清理 - >再次運行...




對於那些修復程序無法正常工作的人,請嘗試將操作系統更新到Yosemite。 它為我工作!




  1. 轉到xcode中的文件 - >工作區設置
  2. 單擊出現/ Users / apple / Library / Developer / Xcode / DerivedData旁邊的箭頭
  3. 選擇派生數據並將其移至廢紙簍。
  4. 很好的Xcode並重新打開它。
  5. 清理項目並再次運行。

上述步驟解決了我的問題。




首先嘗試在Command + Option + Shift + K之後構建。如果仍然失敗,請執行以下步驟。

如果任何人在Xcode 8中遇到這個錯誤,那麼在你的目標的常規標籤下將你的框架狀態改為可選,而不是必須的。




我的環境:Cocos2d 2.0,Box2d,Objective C

除了做上面的其他答案,我終於去了常規選項卡,並使WatchKit可選。




令人驚訝的是,並非所有必要的部分都在這裡記錄,至少對於Xcode 8來說。

我的情況是一個定制的框架作為同一工作區的一部分。 原來它正在被錯誤地構建。 根據傑里米胡對此主題的最後回應:

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

我必須在框架的 Build Settings下設置Dynamic Library Install Name BaseDYLIB_INSTALL_NAME_BASE ),然後重新Build Settings它。 它被錯誤地設置為$(LOCAL_LIBRARY_DIR) ,我必須將其更改為@rpath

因此,在鏈接處理階段,它指示主機應用程序在運行時從/Library/Frameworks/fw.Framework/fw (如文件系統的根目錄)動態加載它,而不是路徑到應用程序 /Frameworks/fw.Framework/fw

關於所有其他設置:它必須位於Build Phases 3個位置,但只需將它們添加到託管應用的General選項卡的Embedded Binaries設置中即可。

不必設置額外的“ Copy Files階段,無論如何,這在嵌入階段看起來直覺上是多餘的。 通過檢查構建記錄的尾部,我們可以確保沒有必要。

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

[刪除了許多冗長的內容,但Xcode UI中簡化的腳本很明顯。]

我仍然知道為什麼Xcode在我身上錯誤地設置了DYLIB_INSTALL_NAME_BASE值。




我必須(在此處提到的之上) 將以下行添加到 生成設置”選項卡下的 Runpath搜索路徑 ”中
@executable_path/Frameworks




Related