連線 · 設定 · 排查

先找出問題,再繼續建置

這裡提供雲端 Mac 操作指南。首次連線請從下方四張卡片開始;已有的實例發生異常時,可搜尋症狀或直接前往疑難排解。

首次交付後

先確認連線與存取權限

MacFTP 提供獨享 Apple Silicon 實體機,原生執行 macOS,並非虛擬機。以下步驟請使用控制台實例詳細資料中的實際 IP、使用者名稱與連線資訊;登入時請勿以訂單編號代替使用者名稱。

SSH 登入

開啟本機終端機,將連線指令中的使用者名稱、IP 與連接埠換成實例詳細資料中的值。首次連線時先核對主機指紋,再確認是否信任。

ssh -p PORT USER@NODE_IP

先看錯誤類型:逾時先檢查網路;Connection refused 先核對連接埠與實例狀態;Permission denied 先核對使用者與驗證方式,別一直猜密碼。

VNC/螢幕共享

請在控制台的實例詳細資料中查看圖形連線方式。使用用戶端時,依交付資訊填入位址、連接埠與憑證;不要假設 SSH 密碼與圖形工作階段憑證相同。

遇到黑畫面時,先中斷連線再重新連線,並確認沒有重複連到舊工作階段。若 SSH 正常,先儲存建置記錄並檢查系統是否仍在運作,不要急著重新啟動整台機器。

瀏覽器內的圖形連線入口僅會顯示在登入後的實例詳細資料中。公開說明頁不會顯示連線憑證。

密碼與金鑰

首次登入後,使用 passwd 變更目前使用者的密碼。在本機產生 SSH 金鑰,只將公開金鑰加入遠端 ~/.ssh/authorized_keys,私密金鑰則留在本機。

~/.ssh 目錄權限設為 700,authorized_keys 權限設為 600。保留目前連線,再開啟另一個終端機,確認可使用金鑰登入。

完成驗證前,請勿關閉原有工作階段或停用現有的驗證方式。請勿在支援單中填寫私密金鑰、密碼或復原資訊。

Xcode 與命令列工具

先執行 xcode-select -p 和 xcodebuild -version確認目前環境。需要使用圖形介面時,請透過遠端工作階段檢查 Applications 資料夾中的 Xcode。

如果只使用命令列工具,可以執行 xcode-select --install;但 iOS 封存仍需要完整的 Xcode。安裝新版本 Xcode 後,先完成首次啟動並準備所需元件,再交由 CI 使用。

同時安裝多個版本時,請依實際路徑切換。不要只更改應用程式名稱,卻讓 Runner 繼續使用舊的開發者目錄。

從本機遷移至雲端

分三階段遷移,每階段都有驗收標準

先以同一個提交完成單次建置,再啟用自動工作。以下時間僅供排程參考,並非交付承諾;實際所需時間會受儲存庫大小、網路、依賴下載與簽章準備影響。

01/資料

同步原始碼,不搬移建置快取

建議預留 15–45 分鐘;大型資源儲存庫另計。

建議先從版本控制系統檢出指定提交。若需搬移未提交的檔案,可使用 SFTP 或 rsync;請排除 DerivedData、專案 build 資料夾與本機記錄,避免將舊路徑和失效快取帶到新機器。

先用 dry-run 檢查檔案清單,再執行實際同步。範例中的 USER 與 NODE_IP 請使用實例提供的值;自訂 SSH 連接埠需另外設定。

rsync -av --dry-run \
  --exclude='DerivedData/' \
  --exclude='build/' \
  ./ USER@NODE_IP:~/project/
git rev-parse HEAD
git status --short

驗收標準:兩端的提交一致、資源檔案齊全,且敏感設定未進入程式碼儲存庫。

02/工具鏈

重建依賴與簽章環境

建議預留 30–90 分鐘;首次下載可能需要更久。

記錄本機 Xcode、SDK、Homebrew 與指令碼依賴的版本。先用 brew --version 檢查是否已安裝 Homebrew;若專案有 Brewfile,再依檔案還原依賴。

簽章所需的 p12 與描述檔請透過加密連線傳輸。將憑證匯入專用鑰匙圈,並將描述檔放入建置使用者的目錄;請勿將密碼寫入儲存庫或建置記錄。

brew --version
xcodebuild -version
xcodebuild -showsdks
security find-identity -v -p codesigning

驗收標準:SDK 符合專案需求、簽章身分有效,且手動封存能順利完成。

03/CI 整合

註冊 Runner,再啟用自動觸發

建議預留 20–60 分鐘,不含專案測試時間。

依程式碼平台產生的註冊指令,安裝 GitHub Actions 自架 Runner 或 GitLab Runner。註冊權杖僅在設定時使用,請勿在工作流程中儲存機器密碼。

確認 self-hosted、macOS 與 ARM64 標籤。先以指定提交手動觸發一次,檢查工作目錄、產物路徑與簽章權限,再啟用分支自動建置。

uname -m
sw_vers -productVersion
xcode-select -p
git rev-parse HEAD

驗收標準:Runner 已上線、目標提交正確、可取回封存產物,且記錄中沒有憑證。

同一台實體節點同時執行多項工作時,CPU、統一記憶體與 SSD 仍由這些工作共用。請先限制並行工作數,再逐步增加,避免把本機工作互相搶資源誤判為節點異常。

可逐段執行

常用指令:先確認前提再複製

目錄名稱與檔案名稱都是指令範例,執行前請換成機器上實際存在的路徑。需要 sudo 的操作必須具備管理員權限;請勿將含有密碼的指令貼到公開記錄中。

選擇 Xcode 開發者目錄

此範例適用於 /Applications/Xcode.app 已存在的情況。若有多個版本,請先確認應用程式路徑;切換後檢查版本與 SDK。只有目前工作要使用其他版本時,才在工作中設定 DEVELOPER_DIR。

切換與驗證
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
xcode-select -p
xcodebuild -version
xcodebuild -showsdks

將 p12 匯入建置鑰匙圈

先準備名為 build.keychain-db 的專用鑰匙圈,並在執行工作的使用者工作階段中解鎖。匯入時依系統提示輸入 p12 密碼;看得到憑證不代表私密金鑰的存取權限已符合 CI 需求。

匯入與身分檢查
security import ./signing.p12 \
  -k "$HOME/Library/Keychains/build.keychain-db" \
  -T /usr/bin/codesign
security find-identity -v -p codesigning \
  "$HOME/Library/Keychains/build.keychain-db"

使用 launchd 管理 Runner

以下適用於已完成註冊,且目錄中包含 svc.sh 的 GitHub Actions Runner。服務指令碼負責安裝與啟動,底層由 launchd 管理;GitLab Runner 請使用專屬的服務指令,勿混用此指令碼。

在 Runner 目錄中執行
./svc.sh install
./svc.sh start
./svc.sh status
launchctl list | grep -i runner

在 launchd 中查得到工作,只代表服務已註冊。仍需回到程式碼平台確認 Runner 已上線,並實際觸發一次建置;需要 GUI 或鑰匙圈互動的工作,還要確認使用者工作階段狀態。

訂單與租期

分別確認到期時間與付款狀態

服務採按日、週、月或季預付,依所選租期一次付款。帳戶狀態、付款狀態與實例狀態各自獨立;處理問題時請一併記下訂單編號與實例編號。

如何續租?如何確認資料會繼續保留?

登入控制台,在訂閱或實例對應的訂單中查看到期時間與續租入口。為原訂閱完成續租後,請確認租期已延長;不要把新建立另一筆實例訂單當成原節點續租。付款後若時間沒有更新,請保留交易憑證並提交支援單。重要資料仍應自行備份。

會收到到期提醒嗎?應以哪個時間為準?

請以控制台顯示的訂單到期時間為準,並確認介面標示的時區。確保帳戶電子郵件可正常收信,並檢查通知與垃圾郵件;不要只靠是否收到電子郵件判斷租期。建議在團隊行事曆自行設定提醒,並於到期前完成續租,或將程式碼、憑證與建置產物遷出。

付款方式、幣別與交易如何核對?

僅支援 USDT-TRC20 與 Visa/Mastercard/Amex(透過 Stripe),一律以美元(USD)結算;實際可用的付款閘道以後端介面回傳為準。鏈上付款請先核對網路、金額與付款頁面資訊;信用卡付款則以訂單內回傳的結果為準。查詢異常時,請提供訂單編號或交易雜湊值,切勿提交完整卡號、驗證碼或錢包私密金鑰。

付款異常、退款與收據要在哪裡處理?

請先在控制台核對帳單、付款記錄與可提供的收據。退款條件、處理範圍及相關規定請參閱服務條款;不要以刪除本機連線設定或停止使用機器代替申請退款。若懷疑遭到重複扣款,請附上相關訂單與交易參照資訊,透過控制台支援單核對。

先保留現場資訊

依影響範圍由小到大逐步排查

先判斷問題出在單一用戶端、單一工作階段,還是整台節點。記下原始錯誤訊息與發生時間,每次完成一項檢查再進行下一項;不要連續修改網路、重設密碼或重新啟動,以免問題無法追查。

網路與連線目標

重新從實例詳細資料核對 IP、連接埠與使用者名稱。改用另一個本機網路測試,並檢查本機代理伺服器、防火牆與公司對外連線政策。ICMP 無法連線不代表 SSH 一定無法使用,還需查看實際連接埠的連線結果。

ssh -vv -o ConnectTimeout=10 -p PORT USER@NODE_IP

記錄錯誤類型:逾時、拒絕連線或驗證失敗。分享偵錯記錄前,請移除本機使用者名稱、敏感路徑與驗證資訊。

磁碟與建置快取

先使用 df -h / 查看可用空間,再使用 du -sh ~/Library/Developer/Xcode/DerivedData 確認快取用量。停止相關建置後,再依專案需求清理,避免刪除正在寫入的封存檔。

請保留待交付產物、簽章檔案與必要記錄。清理後使用同一個提交重試,確認問題並非依賴損毀或路徑錯誤。

系統與工具鏈提示

透過圖形工作階段檢查是否有尚未處理的系統對話框或 Xcode 首次啟動提示。執行 sw_vers、xcodebuild -version 和 xcodebuild -showsdks確認 CI 使用的環境符合預期。

先暫停工作並備份,再自行決定是否更新系統或工具鏈。請勿在 archive 執行期間切換 Xcode 路徑。

復原工作階段與重新啟動

先退出遠端用戶端再重新連線;若 SSH 仍可用,請檢查 uptime 與正在執行的工作。只有確認需要復原整台機器後,才登入控制台並進入實例詳細資料,使用其中提供的重新啟動操作。

重新啟動會中斷建置與遠端連線。請先儲存可取回的記錄與產物;若無法存取或沒有可用操作,請提交支援單,不要反覆要求重新啟動。

問題仍未解決

提交支援單時,先提供有效資訊

登入控制台提交技術支援單,方便連結訂單與實例。若無法登入或需要洽詢購買前問題,請寄信至 support@macftp.com;其他聯絡資訊請參閱聯絡頁面。

  • 識別實例:訂單編號、實例編號、節點與機型。節點為新加坡、東京、首爾或香港;機型請填寫實例詳細資料中的完整名稱。
  • 重現問題:發生時間與時區、完整錯誤訊息、重現步驟,以及 SSH 與圖形連線是否分別可用。
  • 減少來回確認:已完成的自我檢查、近期變更,以及已遮蔽敏感資訊的記錄片段。請勿傳送密碼、私密金鑰、p12 密碼或完整付款憑證。