iOS之如何创建.framework静态库

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

一、创建framework项目

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

二、配置framework

1. Build Settings 配置
  1. Product Name: 最终编译出来的Framework文件的名称
  2. Mach_O Type: 选中static Library(静态库)
  3. Architectures :支持的CPU指令集
  4. Build Active Architecture Only: 设置为NO
  5. Base SDK: 选择iOS
  6. iOS Deployment target:framework支持的最低iOS版本
2. Build Phases 配置
  1. Link Binary With Libraries中添加项目的依赖库
  2. Compile Sources:framework 中包含的实现代码
  3. Copy Bundle Resources:项目中使用到的资源文件,图片,XIB文件,plist文件等 (建议将资源文件放到新建的Bundle中,下面会介绍Bundle的创建和使用)
  4. 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中的资源不能直接通过资源的名称来获取。

[UIImage imageNamed:@"logo.png"];

这种方法获取不到logo.png图片。
正确的方式是:先获取到bundle的路径,然后再将资源文件的路径拼接到bundle路径后面才能获取到资源。如下

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"PrintFramework.bundle" ofType:@"bundle"];
NSString *imagePath = [bundlePath stringByAppendingString:@"/logo.png"];
UIImage *image = [UIImage imageNamed:imagePath];

六、编译项目

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

编译真机项目
  1. 在设备列表中选中Generic Device
  2. 使用快捷键 CMD + B 编译项目
编译模拟器项目
  1. 在设备列表中选择一个模拟器
  2. 使用快捷键 CMD + B 编译项目

之后会看到在products 分组下的PrintFramework.framework变成黑色。
选中PrintFramework.framework右键,选择Open In Finder 可以看到编译好的两个bundle文件。

七、合成模拟器和真机通用的framework静态库

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

lipo -create path1/PrintFramework.bundle/PrintFramework path2/PrintFramework.bundle/PrintFramework -output path3/PrintFramework

path1和path2分别是模拟器和真机的静态库的路径。path3是合成之后的文件的存放路径。

八、framework 的使用

  1. 将framework拖入到要使用framework的工程,并在项目的Build Phases 的 Link Binary Resources中添加framework。

  2. framework使用到的Bundle要添加到工程的Copy Bundle Resources中。不然项目是找不到Bundle中的资源文件的,那么Bundle也就无法正常使用资源文件。

  3. 如果framework中使用到了Category 那么在使用framework的工程中要设置 Build Settings中的Other Link Flag 为 -ObjC或者-all_load

  4. 如果framework有使用系统库,那么也要在使用framework的工程中将这些系统库添加到工程中。不然会报编译错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CID引流电商:传统电商破局的新动力

摘要:CID引流电商为传统电商带来破局新机遇,通过跨平台引流、精准定位和高效转化,解决了流量获取难、成本高的问题,提升了销售业绩和市场竞争力。CID引流电商助力传统电商在激烈竞争中保持领先,推动行业持续发展。 随…

WEB攻防【5】——JS项目/Node.js框架安全/识别审计/验证绕过

1、test.php和test.html对比 #知识点: 1、原生JS&开发框架-安全条件 2、常见安全问题-前端验证&未授权 #详细点: 1、什么是Js渗透测试? 在Javascript中也存在变量和函数,当存在可控变量及函数调用即可参数漏洞 JS开发的WEB应用和PHP、java.NET…

学习笔记——动态路由——RIP(RIP路由汇总介绍)

四、RIP路由汇总介绍 当网络中路由器的路由条目非常多时,可以通过路由汇总(又称路由汇聚或路由聚合)来减少路由条目数,加快路由收敛时间和增强网络稳定性。 路由汇总的原理是,同一个自然网段内的不同子网的路由在向外…

recogito-js:用于文本注释/图像注释的前端插件

创建批注: 继续批注: 右侧批注列表: 1、功能与应用: 文本注释:recogito-js可以将注释功能添加到网页上,或者作为构建完全自定义注释应用程序的工具箱。图像注释:除了文本注释外,它还…

WITS核心价值观【创新】篇|从财务中来,到业务中去

「客尊」、「诚信」、「创新」 与「卓越」 是纬创软件的核心价值观。我们秉持诚信态度,致力于成为客户长期且值得信赖的合作伙伴。持续提升服务厚度,透过数字创新实践多市场的跨境交付,助客户保持市场领先地位。以追求卓越的不懈精神&#xf…

腾讯云点播VOD(sprintboot后端+vue前端)

1. 腾讯云点播 官网文档入口: 云点播简介_云点播购买指南_云点播操作指南-腾讯云 2. 业务需求 2.1.上传视频 2.2.浏览视频 2.3.删除视频 3. 腾讯云提供服务器上传和客户端上传。我使用springboot后端实现客户端上传视频。 3.1 后端要求 生成签名,前端拿着签名凭证,才能上…

easyui的topjui前端框架使用指南

博主今天也是第一次点开easyui的商业搜权页面,之前虽然一直在使用easyui前端框架(easyui是我最喜欢的前端ui框架),但是都是使用的免费版。 然后就发现了easyui的开发公司居然基于easyui开发出了一个新的前端框架,于是我…

AppFlow无代码轻松搭建模型Agent

随着大语言模型发展至今,如何深度开发和使用模型也有了各种各样的答案,在这些答案当中,Agent无疑是一个热点回答。 通过模型也各种插件的组合,可以让你的模型应用具备各种能力,例如,通过天气查询插件机票查…

解决卸载TabX explorer软件后导致系统文件资源管理器无法正常使用问题

最近安装了最新版本的鲁大师,安装过程中不小心同时安装了捆绑软件TabX explorer。这个软件和系统自带的文件资源管理器很像,最后弹出会员到期才发现,这个不是系统文件资源管理器,是第三方的文件资源管理器,就按正常流程…

服务器机柜和网络机柜有什么区别

服务器机柜和网络机柜虽然在外观上可能相似,都遵循19英寸的标准,但它们的设计目的、功能、结构和特性存在明显的区别。下面是两者的主要区别: 1. 用途 服务器机柜:主要用于承载和组织服务器设备,包括主机、存储设备、交…

智能化物业服务:楼层动态一目了然

通过图扑先进的可视化技术,实现对物业楼层的实时监控与高效管理。全面掌握楼层动态,优化资源配置,提升响应速度和服务质量,为业主提供智能化、便捷化的物业管理体验。

智慧校园-就业管理系统总体概述

在当代教育与信息技术深度融合的背景下,智慧校园就业管理系统成为了连接学生、高校与企业的重要纽带,它以创新的服务理念和技术手段,重塑了职业规划与就业服务的传统模式。这一系统致力于为即将步入社会的学生们提供全面、个性化的支持&#…

酒店民宿预订小程序:高效管理,便捷入住

目前,我国旅游业发展非常旺盛,同时也带动了酒店民宿的快速发展。随着互联网科技的快速发展,酒店民宿小程序层出不穷。一个高效的小程序目前已经成为了各大服务业中必不可少的环节,对于酒店民宿商家来说,线上小程序不仅…

2024年6月大众点评广州餐饮店铺POI分析20万家

2024年6月大众点评广州餐饮店铺POI共有199175家 店铺POI点位示例: 店铺id k9uiFADtAvs9EdPC 店铺名称 点都德(聚福楼店) 十分制服务评分 8.6 十分制环境评分 8.3 十分制划算评分 8.5 人均价格 77 评价数量 41673 店铺地址 惠福东路470号(富临食府对面) 大…

2024年6月17日~2024年6月26日周报

一、前言 在上周主要完成了可变形卷积的学习的部署。 本周,结合前段时间的工作与闵老师的讨论,思考了接下来的一些尝试方向。本周重新在之前的网络上尝试添加可变形卷积v4,或者将可变形卷积v2修改为可变形卷积v4。另外,继续学习了…

入职必备-Git安装(为什么Git安装包无法直接安装)

1.首先下载Mac Git应用,打开Git官网https://git-scm.com/download,执行以下操作(见下图一和下图二),然后会打开页面(见下图三),向上滑动一下会见到页面(见下图四&#xf…

逆变器使用手册:类型详解、安装要点与维护须知

逆变器随着可再生能源的兴起和移动电源需求的激增已成为连接直流电与交流电世界的桥梁,其重要性不言而喻。无论是太阳能发电系统的高效利用,还是汽车、游艇等移动设备的电力供应,逆变器都扮演着关键角色。然而,正确的使用方法是确…

ELK日志集成

https://www.bilibili.com/video/BV1x94y1674x/?buvidXY705117E90F73A790429C9CFBD5F70F22168&vd_source939ea718db29535a3847d861e5fe37ef

期货日内交易口诀

1、向下差价法 前提:要判断准确后市是向下行情走势。被套后,等反弹到一定的高度,估计见短线高点了,先卖出,待其下跌一段后再买回。通过这样不断地高卖低买来降低成本,最后等总资金补回了亏损,完…

第1章 基础知识

第1章 基础知识 1.1 机器语言 机器语言就是机器指令的集合,机器指令展开来讲就是一台机器可以正确执行的命令 1.2 汇编语言的产生 汇编语言的主题是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上,汇编指令是机器指令便于记忆的书写格式。…