iOS之怎样创建.framework静态库

打印 上一主题 下一主题

主题 768|帖子 768|积分 2304

番外:想要查看怎样创建.a静态库可前往看我iOS之怎样创建.a静态库-CSDN博客这篇文章。

一、创建framework项目

   

  • 创建framework工程要选择iOS --> Cocoa Touch Framework
  • 输入项目名称PrintFramework也是编译生成的framework的名称。
  • framework的名称也可以以后在项目中更改
  • 将需要打包成framework静态库的文件资源等拖拽进该项目。
  

二、配置framework

1. Build Settings 配置

   

  • Product Name: 最终编译出来的Framework文件的名称
  • Mach_O Type: 选中static Library(静态库)
  • Architectures :支持的CPU指令集
  • Build Active Architecture Only: 设置为NO
  • Base SDK: 选择iOS
  • iOS Deployment target:framework支持的最低iOS版本
  2. Build Phases 配置

   

  • 在Link Binary With Libraries中添加项目的依赖库
  • Compile Sources:framework 中包罗的实现代码
  • Copy Bundle Resources:项目中使用到的资源文件,图片,XIB文件,plist文件等 (发起将资源文件放到新建的Bundle中,下面会介绍Bundle的创建和使用)
  • headers:将需要袒露出来的头文件添加到public分组下,需要隐藏的头文件添加到project分组下
  三、创建Bundle

如果项目中用到了图片、Xib等资源时需要创建一个Bundle:File - New - Target - macOS - Bundle。

   温馨提示
在创建Bundle时的名称不能和framework的名称一样,一样会导致失败。 
    配置Bundle
  

  • 选中BundleTarget,Product Name - 修改Bundle名称,博主这里叫PrintFramework。

  • Base SDK:修改为iOS。
  • Supported Platforms:修改为iOS。
  • Enable Bitcode:设置为NO。
  • COMBILE_HIDPI_IMAGES:设置为NO。(避免Bundle中的图片变成tiff格式而无法使用)
    将创建好的Bundle添加到framework项目的依赖中去。 
  

五、使用Bundle

在framework中使用bundle中的资源不能直接通过资源的名称来获取。
  1. [UIImage imageNamed:@"logo.png"];
复制代码
这种方法获取不到logo.png图片。
正确的方式是:先获取到bundle的路径,然后再将资源文件的路径拼接到bundle路径背面才气获取到资源。如下
  1. NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"PrintFramework.bundle" ofType:@"bundle"];
  2. NSString *imagePath = [bundlePath stringByAppendingString:@"/logo.png"];
  3. UIImage *image = [UIImage imageNamed:imagePath];
复制代码
六、编译项目

   编译生成framework静态库之前先将framework对应的scheme中的run 的值改成 Release
  编译真机项目


  • 在设备列表中选中Generic Device
  • 使用快捷键 CMD + B 编译项目
编译模拟器项目


  • 在设备列表中选择一个模拟器
  • 使用快捷键 CMD + B 编译项目
之后会看到在products 分组下的PrintFramework.framework变成黑色。
选中PrintFramework.framework右键,选择Open In Finder 可以看到编译好的两个bundle文件。
七、合成模拟器和真机通用的framework静态库

之前编译生成的两个静态库分别支持模拟器和真机的使用。但是在实际开发中需要即支持模拟器又支持真机使用的静态库怎么办?这个问题当然可以办理,那就是将两个静态库合并生成一个通用的静态库。可以在mac终端中使用下面的下令合成

  1. lipo -create path1/PrintFramework.bundle/PrintFramework path2/PrintFramework.bundle/PrintFramework -output path3/PrintFramework
复制代码
path1和path2分别是模拟器和真机的静态库的路径。path3是合成之后的文件的存放路径。
八、framework 的使用


  • 将framework拖入到要使用framework的工程,并在项目的Build Phases 的 Link Binary Resources中添加framework。
  • framework使用到的Bundle要添加到工程的Copy Bundle Resources中。不然项目是找不到Bundle中的资源文件的,那么Bundle也就无法正常使用资源文件。
  • 如果framework中使用到了Category 那么在使用framework的工程中要设置 Build Settings中的Other Link Flag 为 -ObjC或者-all_load
  • 如果framework有使用系统库,那么也要在使用framework的工程中将这些系统库添加到工程中。不然会报编译错误

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表