iOS之如何创建.a静态库

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

一、创建静态库项目

  • ①、打开 Xcode 并创建一个新的 Xcode 项目。

  • ②、选择 "macOS" -> "Framework & Library" -> "Cocoa Touch Static Library"。

  • ③、命名你的项目,例如 "StaticLibrary"。

  • ④、选择合适的语言 (Swift 或 Objective-C)。

如下图:

 二、添加你的代码

  • ①、删除项目创建后默认的文件,在项目中添加你想要包含在静态库中的代码文件。

  • ②、你可以在项目中添加新的类或头文件。

  • ③、确保你的代码经过测试并且没有错误。 

三、 配置静态库目标

①、修改BuildSetting配置,将Build Active Architeture Only 设置为NO

②、添加需要暴露在外面的.h文件,.m文件会自动编译到.a文件中。
添加New Headers Phase目录


Mark:这里需要暴露的.h文件需要放在Public列表栏里面。


③、Edit Scheme - 模式改为release模式。 

 四、构建静态库

分别在真机和模拟器上都要Command+B编译,编译之后我们可以看到如下内容:

其中,Release-iphoneos代表的是真机下的静态库文件,Release-iphonesimulator表示的是模拟器下的静态文库文件。

五、合并静态库

①、新建一个文件夹用来存放真机和模拟器下打包出来的静态库,博主这里新建一个“合并静态库”的文件夹(不新建在原目录也一样)。

​​​​​​​

②、打开终端,在终端输入lipo -create 模拟器下的.a 真机下的.a -output 新合并的静态库的存放路径,如下:

温馨提示:如果在合并的过程中有人碰到跟博主一样的错误的话,请按照下面的方式修改Xcode配置,然后重新编译生成新的.a静态库:

①、选择模拟器,此时可以看到模拟器支持arm64

出现错误的原因在于:在Xcode12之后编译的模拟器静态库也支持arm64,会导致真机和模拟器有相同的支持架构arm64,这也就导致模拟器和真机不能合并的问题,上面Xcode设置就是将arm64架构移除。

记得设置好编译完模拟器静态库后重新选择真机应把配置更改回去

合并之后,可以在目标文件夹下看到我们刚合并的静态库:

③、可以使用lipo -info看一下我们打出来的这个静态库支持的架构是哪些:

此时.a静态库算是完全制作完成​​​​​​​

六、Mark注意点:

温馨提示:如果项目里找不到.a的文件,如下图:

项目目录里没有Products文件以及.a静态库
打开StaticLibrary.xcodeproj的包内容
打开project.pbxproj
将mainGroup的值复制到productRefGroup,保存
重新打开项目可以看到项目目录里有Products文件以及.a静态库

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

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

相关文章

Nginx基础概念和常用操作

文章目录 1. 安装、启动、连接2. 快速尝试部署网站3. 配置文件1. nginx.conf全局配置事件模块HTTP 模块性能优化建议 2. default.confserver 块基本设置日志设置根路径设置 4. 反向代理1. 模拟3个Web2. 链接 5. 负载均衡1. 加权轮询,Weighted Round Robin2. 最少连接…

搭建SqlServer-数据库集群

要搭建 SQL Server 数据库集群,可以使用故障转移群集(Failover Cluster Instance, FCI)或 Always On 可用性组(Always On Availability Group, AG)。以下是一般的实现步骤简述: 故障转移群集(F…

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include"CommunityToolkit.Mvvm" Version"8.2.2" /><PackageReference Include"Microsoft.Extensions.Hosting" Version"8.0.0" /><PackageReference Include&q…

一张顶20张H100,速度10倍于B200:史上最快AI芯片,华人制造

在谈到 AI、大模型、算力等关键词时&#xff0c;如果要提及硬件产品&#xff0c;很多人应该会不假思索的说出英伟达。的确&#xff0c;在全球都缺算力的环境下&#xff0c;英伟达的地位是独特又难以撼动的。然而就在近日&#xff0c;有一家公司带着自己的 AI 芯片来叫板了。昨天…

吴恩达机器学习 第三课 week1 无监督学习算法(下)

目录 01 学习目标 02 异常检测算法 2.1 异常检测算法的概念 2.2 基于高斯模型的异常检测 03 利用异常检测算法检测网络服务器的故障 3.1 问题描述 3.2 算法实现 3.3 问题升级 04 总结 01 学习目标 &#xff08;1&#xff09;理解异常检测算法&#xff08;Anomaly Det…

Android Settings值和SystemProperties值的使用

android源码开发中 常常要用到一些全局标志或者说变量 这时候我们可以给android系统添加自己想要的属性 Settings的使用方法 导入import android.provider.Settings; Settings.Global 写入值方法&#xff1a; Settings.Global.putString(getContentResolver(),"sys.s…

服务器上并行提交任务

实用场景 1你的任务是相互独立的 2你本来使用的是for循环&#xff0c;你想提高时间想要把全部这些独立的文件&#xff0c;一起提交一起跑 3你的任务数量很多并且任务同时用一个脚本&#xff0c;只是不同任务的参数不易呀&#xff0c;本质上你一个个提交也可以&#xff0c;但是…

lvgl v8.3 windows仿真

1&#xff0c;下载安装codeblocks20.03 https://zenlayer.dl.sourceforge.net/project/codeblocks/Binaries/20.03/Windows/codeblocks-20.03mingw-setup.exe?viasf1 2&#xff0c;下载代码 git clone --recurse-submodules https://github.com/lvgl/lv_port_win_codeblock…

双指针算法——滑动窗口

前言&#xff1a; 滑动窗口本质上也是利用双指针来解决特定情况下的问题。滑动窗口算法思想是通过俩个指针&#xff0c;定义在左边和右边&#xff0c;俩指针同向运动&#xff0c;保持着一个像“窗口”一样的双指针来不停的压缩或者扩展来移动“窗口”&#xff0c;从而找到特定…

DigitalOcean Droplet 云主机新增内置第五代 Xeon CPU 机型

DigitalOcean 近期宣布&#xff0c;在其高级 CPU 服务器&#xff08;Premium CPU-Optimized Droplet&#xff09;队列中引入英特尔第五代Xeon可扩展处理器&#xff08;代号为 Emerald Rapids&#xff09;。作为英特尔产品线中的最新一代用于数据中心工作负载的处理器&#xff0…

深入探索PostgreSQL的复制功能:原理、配置与实践

PostgreSQL是一个高度可扩展的开源对象关系数据库系统&#xff0c;它提供了强大的数据复制功能&#xff0c;以确保数据的高可用性和容错性。PostgreSQL的复制功能允许多个数据库服务器之间同步数据&#xff0c;从而支持读写分离、负载均衡和备份等多种应用场景。本文将详细介绍…

Java接口、抽象类、继承运用练习

按以下要求编写一个完整的 Java 程序&#xff1a; &#xff08;1&#xff09;编写抽象类 GeometricObject 类&#xff1b; • 该类包括 String型的变量 color 和 boolean 型的 filled 变量&#xff1b; •该类有一个默认的构造方法&#xff1b; •两个抽象方法&#xff0c;计算…

【C/C++】静态函数调用类中成员函数方法 -- 最快捷之一

背景 注册回调函数中&#xff0c;回调函数是一个静态函数。需要调用类对象中的一个成员函数进行后续通知逻辑。 方案 定义全局指针&#xff0c;用于指向类对象this指针 static void *s_this_obj;类构造函数中&#xff0c;将全局指针指向所需类的this指针 s_this_obj this…

golang string、byte[]以及rune的基本概念,用法以及区别

在 Go 语言中&#xff0c;string、byte[] 和 rune 是处理文本和字符的三种不同数据类型。它们有各自的用途和特点&#xff0c;下面将详细介绍它们的基本概念、用法以及区别。 1. string 基本概念 字符串类型&#xff1a;string 是 Go 语言中的一种基本类型&#xff0c;用于表…

LangCell:用于细胞注释的语言-细胞预训练模型

细胞身份包括细胞的各种语义&#xff0c;包括细胞类型、pathway信息、疾病信息等。从转录组数据中了解细胞身份&#xff0c;例如注释细胞类型&#xff0c;是一项基础任务。由于语义是由人类赋予的&#xff0c;如果没有cell-label pair提供监督信号&#xff0c;AI模型很难有效地…

小项目——MySQL集训(学生成绩录入)

ddl语句 -- 创建学生信息表 CREATE TABLE students (student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 学生ID,name VARCHAR(50) NOT NULL COMMENT 学生姓名,gender ENUM(男, 女) NOT NULL COMMENT 性别,class VARCHAR(50) NOT NULL COMMENT 班级,registration_date DATE CO…

【杂记-浅谈EBGP外部边界网关协议、IBGP内部边界网关协议】

一、EBGP概述 EBGP&#xff0c;External Border Gateway Protocol&#xff0c;即外部边界网关协议&#xff0c;EBGP主要用于在不同自治系统&#xff08;AS&#xff09;之间交换路由信息&#xff0c;每个AS都有一个独特的AS号码&#xff0c;用于区分不同的自治系统。EBGP通过AS…

Redis实战—基于setnx的分布式锁与Redisson

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于SETNX的分布式锁 SETNX锁代码实现 修改业务代码 SETNX锁误删问题 SETNX锁原子性问题 Lua脚本 编写脚本 代码优化 总结 Redisson 前言…

C++泛型编程之模板的使用

文章目录 1.模板的概念1.函数模板2.类模板3.模板特化4.模板元编程 2.模板的使用1.函数模板的使用2.类模板的使用3.模板特化4.模板参数推导5.普通函数和函数模板的调用规则1. 非模板函数优先2. 最佳匹配原则3. 显式模板参数指定4. 函数模板特化5. 重载决议示例 7.注意事项8.类模…

v-for中为什么要使用key

在Vue中&#xff0c;v-for指令用于循环遍历数组或对象&#xff0c;并为每个元素或属性生成相应的DOM元素或组件实例。当使用v-for循环渲染时&#xff0c;Vue会尽量复用已有的元素&#xff0c;而不是重新创建。为了实现这个复用机制&#xff0c;Vue会根据每个元素的key来跟踪它们…