iOS Bundle文件使用

温故而知新, 记录下

Settings Bundle

  1. 在Xcode上command+n, 选择创建Settings Bundle, 名字Test.bundle;

  2. Test.bundle上右键New Folder新建文件夹images, 把一个图片文件laowen.png拖进去;

  3. 把bundle内laowen.png图片拿出使用:

NSString *strResourcesBundle = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"bundle"];
NSString *strC = [[NSBundle bundleWithPath:strResourcesBundle] pathForResource:@"laowen" ofType:@"png" inDirectory:@"images"];
UIImage *imgC = [UIImage imageWithContentsOfFile:strC];
self.iv.image = imgC;
```

macOS下的Bundle

  1. 在项目的TARGETS下点+号添加一个bundle, 选macOS下的Bundle创建一个MyBundle;

  2. MyBundleBuild SettingBase SDK改成Latest iOS;

  3. MyBundle内新建images文件夹并添加图片laowen.png;

  4. images拖入项目,要选Create groups;

  5. 选择MyBundle项目, Command+B编译;

  6. 在项目的Build Phases添加一个Run Script, 加入下面脚本:

    cp -R ${BUILT_PRODUCTS_DIR}/MyBundle.bundle ${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app
    
  7. 在项目中使用这个Bundle内的资源:

    #define MyLibBUNDLE_NAME @ "MyBundle.bundle"
    #define MyLibBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:MyLibBUNDLE_NAME]
    #define MyLibBUNDLE [NSBundle bundleWithPath: MyLibBUNDLE_PATH]
    
    UIImage *img = [UIImage imageWithContentsOfFile:[[MyLibBUNDLE resourcePath] stringByAppendingPathComponent:@"test.png"]];
    

其实, 直接建一个Bundle项目打包一个.bundle文件出来, 复制到需要的项目中使用, 这样比建一个Bundle附加在项目中这种做法更方便.

  • 如果遇到错误: pngcrush caught libpng error:,
    • 原因:该文件不是真正的png文件,可能是个jpg文件,实际的文件头信息是不一样的,造成不能识别
    • 解决方法有两种:
      1. 重新把图片文件处理成png文件
      2. 修改文件名后缀,比如改成.jpg

Mac检测图片格式的方法

Mac检测图片格式并不是使用后缀名,而是使用文件头信息来判断识别.可以通过UltraEdit来打开图片,16进制查看。

  • JPEG/JPG - 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识) - 文件结束标识 (2 bytes): $ff, $d9 (EOI)
  • TGA - 未压缩的前5字节 00 00 02 00 00 - RLE压缩的前5字节 00 00 10 00 00
  • PNG - 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
  • GIF - 文件头标识 (6 bytes) 47 49 46 38 39(37) 61 G I F 8 9 (7) a
  • BMP - 文件头标识 (2 bytes) 42 4D B M
  • PCX - 文件头标识 (1 bytes) 0A
  • TIFF - 文件头标识 (2 bytes) 4D 4D 或 49 49
  • ICO - 文件头标识 (8 bytes) 00 00 01 00 01 00 20 20
  • CUR - 文件头标识 (8 bytes) 00 00 02 00 01 00 20 20
  • IFF - 文件头标识 (4 bytes) 46 4F 52 4D F O R M
  • ANI - 文件头标识 (4 bytes) 52 49 46 46 R I F F

你可能感兴趣的:(iOS Bundle文件使用)