.framework类型的静态库和.a类型的静态库的优缺点及.framework类型的静态库zip压缩后解压后头文件丢失问题

简介: .framework类型的静态库和.a类型的静态库的优缺点及.framework类型的静态库zip压缩后解压后头文件丢失问题

.framework类型的静态库和.a类型的静态库各有优缺点。.framework类型的静态库使用方便,一包在手万事我有,但是会出现zip压缩后解压头文件丢失。.a类型的静态的有点是zip压缩不失真,可以按照你的需要要提供给用户头文件,不需要删除含安全信息的头文件。缺点是它不包含头文件和bundle资源文件,bundle资源文件要自己另外制作,需要你另外提供给用户。

注意:WinRAR是一个32位的程序,当mac升级到64位最新操作系统后,WinRAR无法使用。

上周我发布了一个SDK测试.framework的包,压缩为.zip后发到微信群里,结果别人解决后发现头文件的文件夹为无法识别的二禁止文件。对外接口文件不翼而飞。

强制打开是这个样子:

而压缩为zip格式前的文件夹是这样的:

真是伤心的悲剧了。分析他们的文件结构

打包的TELock.framework文件把所有头文件都给包含进来了,这是不安全,使用SDK的可能通过引入你头文件调试出你的函数逻辑。所以我只能给用户提供指定的头文件,其它头文件要删除。所以我们只保留ELockSDKSingleObject.h,BLSErrorCodeKeys.h文件和ELSBaseEntity.h头文件,其它文件都要删除。并且发现Headers,Resources,ELock和Versions下的Current等为超链接文件或文件。删除Headers的头文件,Versions下的A文件下的Headers文件夹下的文件也同时减少,Versions下的Current文件下的Headers文件夹下的文件也同时减少。说明三者下的文件实际只有一份物理文件,他们是超链接。

当采用zip压缩时,它是有损压缩,就把这种超链接结构破坏了。

如何解决呢?就是采用无损的.rar格式压缩。而mac电脑默认是zip压缩,只有rar解压缩,没有.rar压缩工具。所以要我们自己安装WinRAR,见Mac电脑如何使用WinRAR。当然你也可以采用丁丁或qq进行文件夹传送发给windows电脑,在windows电脑上进行rar压缩。

能不能有更彻底的解决办法啊?当然有了。

你打包成.a格式的包,把这个.a格式的包和你想公开的头文件发给用户,用户就能用了。.a格式的包是二进制文件不存在压缩失真问题。

.framework类型的静态库和.a类型的静态库的优缺点

1.a包需要你提供.a包,头文件,资源文件,使用这需要同时导入.a包,头文件和资源文件,就是使用者稍微麻烦些,不存在经过windows电脑采用zip压缩后发给别人解压不会出现问题。

2…framework包需要你手动删除不想让看到的头文件,使用者只需要导入.framework包就能看到头文件,正常使用。当然你忘记删除敏感的头文件就是严重的信息泄漏了。简言之就是发布包的做的事情多些,使用包的人只需要它拖入一个包就可以了。.framework因为存超链接,所以在windows用zip压缩再在其它电脑解压,这种超链接被破坏不能使用。当然你可以压缩无损的.rar包规避这个问题。

.a与.framework的区别:

一、库:

库是共享程序代码的方式,一般分为静态库和动态库

二、静态库与动态库的区别:

静态库:连接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

动态库:连接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

三、iOS静态库形式和动态库形式:

静态库:.a和.framework

动态库:.dylib和.framework

四、framework静态库和动态库的区分:

系统的.framework是动态库,我们自己建立的.framework是静态库

五、.a和.framwork的区别:

.a是一个纯二进制文件,.framework中除了有二进制文件外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

.a + .h + sourceFile = .framework

你的SDK想生成那种类型的包,自己衡量利弊字节决定。福兮祸所伏,祸兮福所倚!


目录
相关文章
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
476 2
|
3月前
|
存储 Web App开发 监控
在AlmaLinux或CentOS 8上编译安装ZLMediaKit流媒体服务器
以上就是在AlmaLinux或CentOS 8上从头开始手动构建和部署 ZLMeida Kit 流媒体服务器框架所需执行一系列命令与步骤概览。务必注意,在实际部署时还需要考虑网络配置(如防火墙规则)、持久化存储(用于存放日志和用户数据)以及服务监控与管理策略等因素。
246 10
|
容器
给aac音频添加adts头,函数实现
给aac音频添加adts头,函数实现
456 0
给aac音频添加adts头,函数实现
|
存储 安全 Linux
调整 core dump 的存储位置或限制
【10月更文挑战第1天】
1129 2
|
存储 算法 Java
深入解析Java虚拟机(JVM):技术原理与性能优化
深入解析Java虚拟机(JVM):技术原理与性能优化
725 1
|
监控 Android开发 开发者
GB/T28181规范之Subject头域定义浅析
部分开发者在实现GB28181设备接入或国标平台侧的时候,容易忽略Subject头域信息,本文就Subject头域定义,做个简单的回顾。
247 0
|
Ubuntu Linux
ZYNQ - 嵌入式Linux开发 -07- petalinux工程配置解析(一)
ZYNQ - 嵌入式Linux开发 -07- petalinux工程配置解析
2157 0
ZYNQ - 嵌入式Linux开发 -07- petalinux工程配置解析(一)
|
机器学习/深度学习 算法 计算机视觉
实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你
本次将借助于 dlib 程序包实现人脸区域检测、特征点提取等功能, dlib 封装了许多优秀的机器学习算法, 可实现人脸识别、检测、识别,视频目标追逐等功能,是由由 C++开发的一个开源程序库,目前也提供了 Python 接口,可供我们直接调用。
实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你
|
6天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。