CocoaPods 安裝SDK中找不到資源包.bundle

2019年06月20日16:07:30 記git

若是不是本身故意寫錯了,那就有可能問題出在Podfile,即,SDK安裝方式有關github

  • 先來介紹一下加載 Bundle 中圖片的兩種方法:
  1. 根據bundle及FilePath加載
NSString *path = [[NSBundle mainBundle] pathForResource:@"xxBundle" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];
NSString *file = [bundle pathForResource:@"xxx" ofType:@"png"];
UIImage *img = [UIImage imageWithContentsOfFile:file];
複製代碼

orswift

NSString *file2 = [[NSBundle mainBundle] pathForResource:@"xxxBundle.bundle/xxx" ofType:@"png"];
UIImage *img2 = [UIImage imageWithContentsOfFile:file2];
複製代碼
  1. .bundle/xxx 加載
UIImage *img3 = [UIImage imageNamed:@"xxxBundle.bundle/xxx"];
複製代碼
  • Podfile中的use_frameworks!

先來介紹幾個概念 bash

從iOS8/Xcode6開始,蘋果容許使用動態庫連接。 經過cocoapods管理應用程序時,在Podfile文件中,**use_frameworks!**的使用區別以下:

  1. 使用**use_frameworks!**時dynamic frameworks 方式 -> .framework cocoapods會生成對應的 frameworks 文件 在Link Binary With Libraries:會生成Pods_工程名.framework,包含了其它用cocoapods導入的第三方框架的.framework文件
  2. 不使用**use_frameworks!**時static libraries 方式 -> 生成.a文件 cocoapods會生成相應的 .a文件(靜態連接庫) Link Binary With Libraries: libPods-工程名.a 包含了其餘用cocoapods導入有第三庫的 .a 文件
  • 注意:(我通常都會使用use_frameworks!)
  1. 純OC項目中,經過cocoapods導入OC庫時,通常都不使用use_frameworks!
  2. 純swift項目中,經過cocoapods導入swift庫時,必須使用use_frameworks!
  3. 只要是經過cocoapods導入swift庫時,都必須使用use_frameworks!
  4. 使用動態連接庫dynamic frameworks時,必須使用use_frameworks!
  • 系統提供的庫都是 dylib 動態庫,可參考這裏,不作介紹

回過頭來再看Podfile中若使用use_frameworks!,資源包文件、二進制文件、頭文件打包成一個Framework,加載 Bundle只能加載.app/下的資源文件。 解決辦法:app

  1. 重寫SDK中資源文件的加載方法,xxx.framework/xxx.bundle/xx.png。參考:QMUIKit -> QMUIHelper
  2. 從SDK中拷貝資源包.bundle到工程中
  3. 不使用use_frameworks!
相關文章
相關標籤/搜索