沒有 Mac 上架 iOS App:Expo 與 EAS 教學
作者:Mehdi Azizi
更新於 ,9 分鐘
用 Windows 電腦,Expo 和 EAS 就能編譯 iOS App 並送交 Apple。但你仍需要 iPhone 測試。
沒有 Mac 可以上架 iOS App 嗎?
可以。只要你用 Expo 和 React Native 開發,沒有 Mac 也能上架 iOS App。EAS Build 會在 Expo 託管的雲端 Mac 上編譯你的 App,接著 EAS Submit 再把它送到 App Store Connect。Expo 的文件寫得很清楚:EAS Submit 可在 macOS、Linux 和 Windows 上執行,所以你不需要 Mac 也能交付 iOS build。
不過有三樣東西是無法取代的:一個付費的 Apple Developer 帳號、一支能實際測試 App 的 iPhone,以及一個用來在 App Store Connect 填寫頁面資料的瀏覽器。這篇教學接下來會說明在 Windows 電腦上哪些做得到、哪些會卡關,以及步驟的順序。
我所有的 iOS App 都走這條流程:Expo、EAS Build,然後 EAS Submit。Solys 和 TradaZen 就是這樣上架 App Store 的。我自己用 Mac 工作,但上架的每個步驟都不依賴它:build 在 Expo 的雲端完成,送交 Apple 則透過命令列。
Expo 和 EAS 如何取代 Mac
要了解什麼做得到,得先知道為什麼以前一定要有 Mac。iOS App 必須用 Apple 的工具 Xcode 編譯,而 Xcode 只能在 macOS 上執行,且版本要夠新,才能避免 ITMS-90725 退件。接著 App 必須用綁定你開發者帳號的憑證簽署,再送到 App Store Connect。
Expo 把這些工作拆成三個工具:
- Expo 和 React Native:你用 JavaScript 或 TypeScript 寫 App,任何電腦都可以。
- EAS Build:你在自己的電腦下指令,程式碼會傳到 Expo 的 Mac 上,由它幫你編譯並簽署 App。你會拿到一個可以安裝或送出的檔案。
- EAS Submit:它拿這個 build 送到 App Store Connect。Apple 處理完成後(例如會檢查圖示,見 ITMS-90717),它就會出現在 TestFlight。
流程中還是有 Mac,只是不再是你的。如果你想知道我為什麼推薦新手用這套技術,可以看 用 React Native 和 Expo 開發手機 App 這一頁。
在 Windows 電腦上能做到的事
寫程式
所有開發工作都能在 Windows 上毫無限制地進行:你的編輯器(VS Code、Cursor)、Node.js、終端機。如果你用 Claude 或 ChatGPT 輔助寫程式,也完全一樣。這部分可以看用 AI 開發 iOS App。
一邊寫程式一邊在 iPhone 上看 App
剛開始時,裝在 iPhone 上的 Expo Go 可以掃描終端機顯示的 QR code 來載入你的專案。每次修改都會在幾秒內出現在手機上。拿來做最初幾個畫面最理想。自 2026 年 5 月起,App Store 版的 Expo Go 停留在 SDK 54:建立專案時請選擇與它相容的版本,或者用 eas go 搭配 TestFlight 來使用更新的 SDK。
Expo Go 有個限制:它只包含 Expo 提供的原生模組。一旦你的 App 用到它沒有的原生函式庫,例如處理訂閱的 RevenueCat SDK,你就需要 development build:一個屬於你自己 App 的版本,由 EAS Build 編譯,再安裝到你的 iPhone 上。
不經過 App Store 把 build 裝到 iPhone
EAS 提供內部發佈(internal distribution)。你先用 eas device:create 指令註冊你的 iPhone,再用 internal 發佈方式跑一個 build,就會收到安裝連結。Apple 對這種方式有限制:一個帳號每年最多只能用這種方式發佈給 100 支 iPhone,而且每新增一台裝置,都需要重新 build 或重新簽署。如果只給你自己和幾個親友用,綽綽有餘。
不用 Xcode 管理憑證
簽署是最常讓 Mac 新手卡住的地方,甚至送出時遇到 ITMS-90034 錯誤。用 EAS 的話,你從命令列登入 Apple 帳號,工具就能自動產生發佈憑證和 provisioning profile。你完全不用打開鑰匙圈存取。
把 App 送交 Apple 並上架
eas submit --platform ios 會把你的 build 送到 App Store Connect。你也可以用 eas build 的 --auto-submit 選項把兩個步驟串起來。其他事情都在瀏覽器裡完成:App Store 頁面、螢幕截圖、隱私權聲明、訂閱、TestFlight 和送審。App Store Connect 是網頁應用程式,在 Windows 上運作得很好。
沒有 Mac 做不到(或比較難)的事
本機 iOS 模擬器
iOS 模擬器是 Xcode 的一部分,所以無法在 Windows 上執行。實務上這沒什麼大不了:拿 iPhone 測試比模擬器更好。Expo 在 2026 年 9 月宣布了雲端 iOS 模擬器 EAS Simulator,在我寫這篇文章時仍是限量開放。在它全面開放之前,別把你的工作流程建立在它上面。
除錯原生程式碼
如果當機是原生程式碼造成的(Swift、Objective-C、設定錯誤的函式庫),Apple 的診斷工具都在 Xcode 裡。沒有 Mac,你只能依賴 EAS 的 build 日誌,以及像 Sentry 這類能回報已安裝 App 當機狀況的工具。做得到,但比較慢。所以第一個 App 最好只用與 Expo 相容且有在維護的函式庫,這樣也能避免送出時被 ITMS-90338 退件。
手寫原生擴充功能
Widget、通知擴充功能、特定的原生 target:Expo 透過 config plugin 也做得到,但沒有 Xcode 可以檢查產生出來的專案,每個錯誤都要多花一次 build。第一個 App 就先把這些功能留到以後吧。
本機編譯
EAS 的本機 build(--local 選項)不支援 Windows。所以在 PC 上,你的 iOS build 都得透過 Expo 的雲端。EAS 免費方案每月包含的 build 次數有限,而且需要排隊:在安排一整週的密集工作前,先到 Expo 的價格頁面確認目前的條件。
Apple Developer 帳號:必備,沒有例外
這點沒有任何偷吃步,就連只限大型組織內部 App 使用的 Apple Developer Enterprise Program 也不行。沒有加入 Apple Developer Program,就沒有 App Store Connect、沒有 TestFlight、沒有內部發佈,也無法送交 App Store。會費是每年 99 美元,以你當地的貨幣扣款。
註冊前的兩個建議:
- 想清楚要選個人帳號還是組織帳號。 個人帳號在 App Store 上顯示的賣家是你的名字。組織帳號顯示的是你公司的名稱,但 Apple 會要求 D-U-N-S 編號,審核也比較久。
- 預留幾天時間。 帳號審核不一定是即時的。一確定要上架就去註冊,別等到送出前一天。
測試真的需要一支 iPhone
技術上,你可以上架一個從沒拿在手上用過的 iOS App。我強烈不建議,Apple 也不建議:它的審查準則(guideline 2.1)要求 App 在送出前,必須在裝置上測試過 bug 和穩定性。而你的使用者只會有一種環境:一支真正的 iPhone。
以下是只有真正的 iPhone 才能讓你看到的:
- 真實的首次啟動,沒有開發伺服器:啟動時的當機就藏在這裡。
- 測試環境中的 App 內購買,確認你的 paywall 顯示正確的價格,訂閱後確實能解鎖 App。
- 通知、相機、震動、權限,在其他地方的表現會不一樣,甚至完全不能用。
- 實際的版面配置:瀏海或動態島、主畫面指示條、鍵盤蓋住輸入欄位。
- 流暢度,強大的電腦常常會掩蓋這個問題。
一支較新的二手 iPhone 就夠了,前提是它跑的 iOS 版本有被你的 Expo SDK 版本支援。可以的話,再借一支不同尺寸的 iPhone:在大螢幕上正常的 App,到小螢幕上可能會被裁切。我的 Solys 就是因為這樣被退件,詳情在 Apple 為什麼會退件 App。
沒有 Mac,做得到。沒有 iPhone,你就是把一個自己從沒看過它運作的 App 送給 Apple。
在 Windows 上的步驟,依序進行
- 建立專案:用
npx create-expo-app,並用 Expo Go 測試最初幾個畫面。 - 安裝 EAS CLI:用
npm install -g eas-cli,再執行eas login和eas build:configure。 - 加入 Apple Developer Program:專案一有雛形就去註冊。
- 註冊你的 iPhone:用
eas device:create,然後跑一個 development build。 - 建立 App 頁面:在 App Store Connect 中建立,bundle identifier 要和 Expo 設定裡的一樣。
- 跑 production build:用
eas build --platform ios。 - 送出:用
eas submit --platform ios,再到 TestFlight 測試。用 TestFlight 測試 App 這篇有詳細說明。 - 填寫頁面資料並送審,都在瀏覽器完成。至於宣傳文字,之後不用發新版本也能修改。
這個階段有三個常見陷阱。每次送出時,build 編號都必須遞增:開啟 EAS 的自動遞增功能就不用再煩惱。加密相關問題只要沒回答,每個 build 都會被卡住:你可以在 App 設定中一次宣告好。還有 bundle identifier 必須處處一致,否則 EAS Submit 會找不到你的 App。至於之後從頁面資料到審核通過的流程,在 App Store 上架 App 這一頁涵蓋了每個步驟。
上架你的第一個 App,不用 Mac 也不會迷路
Mac 已經不是真正的障礙了。真正的障礙在別處:挑一個有機會賺錢的 App、串接能正常運作的訂閱、準備一份 Apple 會接受的送審資料。這正是 iOS Kit 四步驟課程涵蓋的內容,可以照你自己的步調進行。送審資料方面,Apple Review Kit 收錄了我送出前的檢查清單和給審查人員的備註。首頁則示範了如何用 Expo 和 Claude Code 不從零開始做出手機 App,有沒有 Mac 都行。
App 能否上架的最終決定權在 Apple,沒有任何 kit 能保證。我能給你的,是我在自己的 App 上實際使用的方法。
常見問題
沒有 Mac 要怎麼上架 iOS App?
用 Expo 和 React Native,Expo 託管的 Mac 會取代你的 Mac。你在任何電腦上寫程式,EAS Build 在雲端編譯並簽署 App,再由 EAS Submit 送到 App Store Connect。你還需要一個付費的 Apple Developer 帳號、一個填寫頁面資料用的瀏覽器,以及一支能實際測試 App 的 iPhone。
從 Windows 上架 iOS App 的步驟有哪些?
用 Expo 建立專案、安裝 EAS CLI,並加入 Apple Developer Program。註冊你的 iPhone、跑一個 development build,接著在 App Store Connect 建立 App 頁面,bundle identifier 要和 Expo 設定裡的一樣。然後跑 production build,用 EAS Submit 送出並在 TestFlight 測試,最後在瀏覽器填寫頁面資料並送審。
在 App Store 上架 App 要多少錢?
加入 Apple Developer Program 每年 99 美元,以你當地的貨幣扣款。這是必備的:沒有它,就沒有 App Store Connect、沒有 TestFlight、沒有內部發佈,也無法送交 App Store。Expo 方面,EAS 免費方案每月包含的 build 次數有限,而且需要排隊:請到 Expo 的價格頁面確認目前的條件。
沒有 Mac 上架 iOS App,需要 iPhone 嗎?
技術上不需要,但我強烈不建議,Apple 也不建議:它的審查準則(guideline 2.1)要求 App 在送出前,必須在裝置上測試過 bug 和穩定性。一支較新的二手 iPhone 就夠了,前提是它跑的 iOS 版本有被你的 Expo SDK 版本支援。
沒有 Mac 要怎麼測試 iOS App?
在 iPhone 上安裝 Expo Go:它會掃描終端機顯示的 QR code 來載入專案,每次修改都會在幾秒內看到。Expo Go 只包含 Expo 提供的原生模組。一旦你的 App 用到它沒有的原生函式庫,例如 RevenueCat SDK,就需要由 EAS Build 編譯的 development build。要測試最終版本,請看用 TestFlight 測試 App。
沒有 Mac 開發 iOS 有哪些限制?
你無法使用本機 iOS 模擬器:它是 Xcode 的一部分,所以無法在 Windows 上執行。EAS 的本機 build(--local)不支援 Windows:你的 iOS build 都得透過 Expo 的雲端。除錯原生程式碼和手寫原生擴充功能仍然做得到,但比較困難,因為 Apple 的工具都在 Xcode 裡。