關於dyld: Library not loaded


在接入智凡迪的sdk過程中,遇到以下問題:

dyld: Library not loaded: @rpath/SDKFramework.framework/SDKFramework

  Referenced from: /private/var/mobile/Containers/Bundle/Application/107B34E6-F250-4511-9FA9-31526F8E7B84/TestSDKUI.app/TestSDKUI

  Reason: image not found

智凡迪使用了iOS8中的自定義動態包。在build setting的link library導入SDKFramework.framework后,無法讀取framework中的圖片資源。

以前iOS上用的framework,實際上都是static library打包成framework結構,圖片資源打包為bundle。直接在工程中導入framework和bundle資源即可。然而動態包直接將圖片資源編譯打包進framework,需要在導入的工程中做配置。

1.網上有一種辦法是講導入的framework設置為optional。

這里說明一下required和optional的區別:

強引用(Required)的framework是一定會被加載到內存的,但是弱引用(Optional)的framework只在需要時才會被載入內存,這對於比較大的framework來說,在最初加載的時候會省很多時間。例如,有一些庫如Social.framework 和 AdSupport.framework,是在iOS6之后才被引入的,還有一些更新了新特性的只能在iOS6+上可用。當你添加一個framework到你的工程里,他們被默認強引用(Required),然而,當你最終把程序配置在運行5.0的設備上時,你會發現它通不過最戶的加載,原因就在於這些庫是不被iOS5.0支持的,就需要我們把這些庫的引用改為Optional.

但是這里即便設置為optional,還是會報這個錯,表明並非因為加載多余,而是真的沒有加載進來。


2.這里如果要正確加載,需要兩處設置:

-將包含圖片的framework加載到bundle resource

-在build setting界面:target-〉Build Phases -〉左上角+號 -〉New Copy Files Phase 然后在Copy Files下 Destination選擇Frameworks -〉添加動態庫

這個操作似乎是要求運行時將動態庫copy加載到framework當中,供app運行使用(存疑)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM