Mac 上「显示包内容」查看币安客户端结构
Mac 上的 .app 文件双击就启动 APP,但 macOS 实际上把它当文件夹处理。Finder 的「显示包内容」功能可以让你看到 APP 内部到底有什么东西。本笔记借此机会把币安 Mac 客户端的结构拆开看一看。下载客户端先去 币安官网 或 币安官方APP;iPhone 装机看 iOS安装教程。
.app 文件的本质
macOS 上 .app 后缀的「文件」并不是单一二进制,而是一个特殊的文件夹(叫 bundle),里面按苹果的规范放了若干子目录和文件。Finder 把它显示成一个图标,双击时调用其中的可执行文件。
这种设计的好处:
- 所有 APP 资源打包在一起,便于分发
- 用户拖一个文件就完成安装
- 不需要 Windows 那种到处散落的 DLL
「显示包内容」的入口
查看 .app 内部:
- Finder 里找到 Binance.app(一般在 /Applications)
- 右键(或 Control + 单击)
- 弹出菜单选「显示包内容」
- Finder 进入 .app 内部目录
里面通常有一个 Contents 文件夹,再往下分若干子目录。
标准的 .app 目录结构
苹果规范的 bundle 结构:
| 路径 | 内容 |
|---|---|
| Contents/Info.plist | APP 元信息 |
| Contents/MacOS/ | 主可执行二进制 |
| Contents/Resources/ | 图片、字体、本地化字符串 |
| Contents/Frameworks/ | 第三方框架 |
| Contents/PlugIns/ | 插件(很多 APP 没有) |
| Contents/_CodeSignature/ | 签名信息 |
| Contents/embedded.provisionprofile | 描述文件 |
币安客户端基本上有 Info.plist、MacOS、Resources、Frameworks、_CodeSignature 这五个核心目录。
Info.plist 里有什么
Info.plist 是苹果规范的元信息清单,记录了:
- CFBundleIdentifier:APP 唯一标识,币安通常是 com.binance.desktop
- CFBundleVersion:版本号
- CFBundleShortVersionString:用户可见的版本
- LSMinimumSystemVersion:最低系统版本要求
- NSCameraUsageDescription:相机权限说明(KYC 用)
- NSAppTransportSecurity:网络安全策略
普通用户看一眼就够,开发者会重点关注权限相关字段。
Frameworks 目录
Frameworks 里通常包含币安客户端依赖的第三方组件:
- Electron 框架(如果是基于 Electron 的)
- Qt 框架(如果是 Qt 的)
- 各种系统辅助库
币安 Mac 客户端历年来在 Electron 与原生之间有过切换,当前版本基于较轻量的 Web 技术栈。具体框架不一一展开。
Resources 目录看什么
Resources 里有:
- 图片资源(.icns 图标、PNG 图片)
- 本地化字符串(.lproj 子目录,每种语言一个)
- 字体(如果 APP 自带字体)
- 配置文件(JSON、plist)
可以看到币安客户端支持多少语言:进 Resources,目录里像 zh-Hans.lproj、en.lproj、ja.lproj、ko.lproj 这样的子目录,每个对应一种语言。
为什么要拆开看
普通用户拆开看 APP 没什么实用意义,但有几个特殊场景有用:
- 核对 APP 真伪:从 Resources 里的图标对比官网图标
- 手动改语言:极少数情况下能强制使用某个本地化
- 导出图标:复制 .icns 文件到自己的 APP
- 检查依赖:开发者验证 APP 用了哪些框架
修改包内文件的风险
理论上可以在「显示包内容」后修改里面的文件,但:
- 修改任何文件后 APP 签名失效
- macOS 启动 APP 时会发现签名不匹配,拒绝运行
- 即便绕过签名检查,APP 行为也不可预测
- 自动更新可能失败
所以显示包内容只用于查看,不要修改。
与 Windows / Linux 的对比
不同系统上 APP 的存放方式:
| 系统 | 形式 | 文件分布 |
|---|---|---|
| macOS | .app bundle | 一个文件夹打包 |
| Windows | .exe + DLL | 散落在 Program Files 与系统目录 |
| Linux | binary + 共享库 | /usr/bin、/usr/lib 等 |
| iOS | .app bundle(不可见) | 用户无法直接访问 |
macOS 的 bundle 设计是最干净的。
命令行查看
熟悉终端的用户也可以通过 cd 进入 .app/Contents 路径直接 ls 查看。但这与 Finder 显示包内容的效果一致,只是命令行视角。
安全检查的小技巧
在显示包内容后,可以做几项简单的安全检查:
- Info.plist 里 CFBundleIdentifier 必须是 com.binance.desktop(或类似官方标识)
- _CodeSignature 目录必须存在且非空
- 没有名字奇怪的可疑二进制(如 update.exe、helper.so)
- Resources 里图标与官网一致
四项都对就是真官方版。
FAQ
Q:拆开 APP 看会触发病毒报警吗? A:不会。这是 macOS 内置功能,安全。
Q:能不能直接拷贝 APP 到其它 Mac 上用? A:可以。.app 是自包含的。
Q:APP 体积比下载的 DMG 大正常吗? A:正常。DMG 是压缩格式,解压后体积变大。
Q:怎么导出 APP 图标? A:拖 .icns 文件到 Preview 打开,导出为 PNG。