幣程筆記 教學

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。

延伸閱讀