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。