币程笔记 教程

Mac 上「显示包内容」查看币安客户端结构

Mac 上的 .app 文件双击就启动 APP,但 macOS 实际上把它当文件夹处理。Finder 的「显示包内容」功能可以让你看到 APP 内部到底有什么东西。本笔记借此机会把币安 Mac 客户端的结构拆开看一看。下载客户端先去 币安官网币安官方APP;iPhone 装机看 iOS安装教程

.app 文件的本质

macOS 上 .app 后缀的「文件」并不是单一二进制,而是一个特殊的文件夹(叫 bundle),里面按苹果的规范放了若干子目录和文件。Finder 把它显示成一个图标,双击时调用其中的可执行文件。

这种设计的好处:

  • 所有 APP 资源打包在一起,便于分发
  • 用户拖一个文件就完成安装
  • 不需要 Windows 那种到处散落的 DLL

「显示包内容」的入口

查看 .app 内部:

  1. Finder 里找到 Binance.app(一般在 /Applications)
  2. 右键(或 Control + 单击)
  3. 弹出菜单选「显示包内容」
  4. 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。

延伸阅读