# 沒有 Mac 上架 iOS App：Expo 與 EAS 教學

> 用 Windows 電腦，Expo 和 EAS 就能編譯 iOS App 並送交 Apple。但你仍需要 iPhone 測試。

原始頁面：[沒有 Mac 上架 iOS App：Expo 與 EAS 教學](https://devoria.fr/zh-hant/blog/publish-ios-app-without-mac-expo-eas)
作者：[Mehdi Azizi](https://devoria.fr/zh-hant/mehdi-azizi)
發布日期：2026-09-23
內容最後修訂：2026-10-09


## 沒有 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](https://docs.expo.dev/submit/ios/)。

不過有三樣東西是無法取代的：一個[付費的 Apple Developer 帳號](https://devoria.fr/zh-hant/blog/apple-developer-account-price-free-or-99)、一支能實際測試 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](https://devoria.fr/zh-hant/blog/eas-submit-ios-expo-app-store)**：它拿這個 build 送到 App Store Connect。Apple 處理完成後（例如會檢查圖示，見 ITMS-90717），它就會出現在 TestFlight。

流程中還是有 Mac，只是不再是你的。如果你想知道我為什麼推薦新手用這套技術，可以看 [用 React Native 和 Expo 開發手機 App](https://devoria.fr/zh-hant/expertise/react-native-expo-mobile-app) 這一頁。

## 在 Windows 電腦上能做到的事

### 寫程式

所有開發工作都能在 Windows 上毫無限制地進行：你的編輯器（VS Code、Cursor）、Node.js、終端機。如果你用 Claude 或 ChatGPT 輔助寫程式，也完全一樣。這部分可以看[用 AI 開發 iOS App](https://devoria.fr/zh-hant/blog/ai-ios-app-pitfalls-checks)。

### 一邊寫程式一邊在 iPhone 上看 App

剛開始時，裝在 iPhone 上的 Expo Go 可以掃描終端機顯示的 QR code 來載入你的專案。每次修改都會在幾秒內出現在手機上。拿來做最初幾個畫面最理想。自 2026 年 5 月起，[App Store 版的 Expo Go 停留在 SDK 54](https://expo.dev/changelog/expo-go-and-app-store-may-2026)：建立專案時請選擇與它相容的版本，或者用 `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](https://docs.expo.dev/build/internal-distribution/)，而且每新增一台裝置，都需要重新 build 或重新簽署。如果只給你自己和幾個親友用，綽綽有餘。

### 不用 Xcode 管理憑證

簽署是最常讓 Mac 新手卡住的地方，甚至送出時遇到 ITMS-90034 錯誤。用 EAS 的話，你從命令列登入 Apple 帳號，工具就[能自動產生發佈憑證和 provisioning profile](https://docs.expo.dev/build/setup/)。你完全不用打開鑰匙圈存取。

### 把 App 送交 Apple 並上架

`eas submit --platform ios` 會把你的 build 送到 App Store Connect。你也可以用 `eas build` 的 `--auto-submit` 選項把兩個步驟串起來。其他事情都在瀏覽器裡完成：App Store 頁面、[螢幕截圖](https://devoria.fr/zh-hant/blog/app-store-screenshot-sizes-2026)、隱私權聲明、訂閱、TestFlight 和送審。App Store Connect 是網頁應用程式，在 Windows 上運作得很好。

## 沒有 Mac 做不到（或比較難）的事

### 本機 iOS 模擬器

iOS 模擬器是 Xcode 的一部分，所以無法在 Windows 上執行。實務上這沒什麼大不了：拿 iPhone 測試比模擬器更好。Expo 在 2026 年 9 月宣布了雲端 iOS 模擬器 [EAS Simulator](https://expo.dev/blog/build-ios-apps-on-windows-with-cloud-simulators)，在我寫這篇文章時仍是限量開放。在它全面開放之前，別把你的工作流程建立在它上面。

### 除錯原生程式碼

如果當機是原生程式碼造成的（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](https://docs.expo.dev/build-reference/local-builds/)。所以在 PC 上，你的 iOS build 都得透過 Expo 的雲端。EAS 免費方案每月包含的 build 次數有限，而且需要排隊：在安排一整週的密集工作前，先到 Expo 的價格頁面確認目前的條件。

## Apple Developer 帳號：必備，沒有例外

這點沒有任何偷吃步，就連只限大型組織內部 App 使用的 Apple Developer Enterprise Program 也不行。沒有[加入 Apple Developer Program](https://devoria.fr/zh-hant/blog/apple-developer-membership-renewal-cancel)，就沒有 App Store Connect、沒有 TestFlight、沒有內部發佈，也[無法送交 App Store](https://developer.apple.com/support/compare-memberships/)。會費是[每年 99 美元](https://developer.apple.com/help/account/membership/programs-overview/)，以你當地的貨幣扣款。

註冊前的兩個建議：

- **想清楚要選個人帳號還是組織帳號。** 個人帳號在 App Store 上顯示的賣家是你的名字。組織帳號顯示的是你公司的名稱，但 Apple 會要求 D-U-N-S 編號，審核也比較久。
- **預留幾天時間。** 帳號審核不一定是即時的。一確定要上架就去註冊，別等到送出前一天。

## 測試真的需要一支 iPhone

技術上，你可以上架一個從沒拿在手上用過的 iOS App。我強烈不建議，Apple 也不建議：它的[審查準則](https://developer.apple.com/app-store/review/guidelines/)（guideline 2.1）要求 App 在送出前，必須在裝置上測試過 bug 和穩定性。而你的使用者只會有一種環境：一支真正的 iPhone。

以下是只有真正的 iPhone 才能讓你看到的：

- **真實的首次啟動**，沒有開發伺服器：啟動時的當機就藏在這裡。
- **測試環境中的 App 內購買**，確認你的 paywall 顯示正確的價格，訂閱後確實能解鎖 App。
- **通知、相機、震動、權限**，在其他地方的表現會不一樣，甚至完全不能用。
- **實際的版面配置**：瀏海或動態島、主畫面指示條、鍵盤蓋住輸入欄位。
- **流暢度**，強大的電腦常常會掩蓋這個問題。

一支較新的二手 iPhone 就夠了，前提是它跑的 iOS 版本有被你的 Expo SDK 版本支援。可以的話，再借一支不同尺寸的 iPhone：在大螢幕上正常的 App，到小螢幕上可能會被裁切。我的 Solys 就是因為這樣被退件，詳情在 [Apple 為什麼會退件 App](https://devoria.fr/zh-hant/blog/apple-app-rejection-reasons-real-cases)。

> 沒有 Mac，做得到。沒有 iPhone，你就是把一個自己從沒看過它運作的 App 送給 Apple。

## 在 Windows 上的步驟，依序進行

1. **建立專案**：用 `npx create-expo-app`，並用 Expo Go 測試最初幾個畫面。
2. **安裝 EAS CLI**：用 `npm install -g eas-cli`，再執行 `eas login` 和 `eas build:configure`。
3. **加入 Apple Developer Program**：專案一有雛形就去註冊。
4. **註冊你的 iPhone**：用 `eas device:create`，然後跑一個 development build。
5. **建立 App 頁面**：在 App Store Connect 中建立，bundle identifier 要和 Expo 設定裡的一樣。
6. **跑 production build**：用 `eas build --platform ios`。
7. **送出**：用 `eas submit --platform ios`，再到 TestFlight 測試。[用 TestFlight 測試 App](https://devoria.fr/zh-hant/blog/testflight-test-iphone-app-before-review) 這篇有詳細說明。
8. **填寫頁面資料並[送審](https://devoria.fr/zh-hant/blog/app-store-connect-waiting-for-review-statuses)**，都在瀏覽器完成。至於宣傳文字，之後不用發新版本也能修改。

這個階段有三個常見陷阱。每次送出時，build 編號都必須遞增：開啟 EAS 的自動遞增功能就不用再煩惱。加密相關問題只要沒回答，每個 build 都會被卡住：你可以在 App 設定中一次宣告好。還有 bundle identifier 必須處處一致，否則 EAS Submit 會找不到你的 App。至於之後從頁面資料到審核通過的流程，[在 App Store 上架 App](https://devoria.fr/zh-hant/expertise/publish-app-on-app-store) 這一頁涵蓋了每個步驟。

## 上架你的第一個 App，不用 Mac 也不會迷路

Mac 已經不是真正的障礙了。真正的障礙在別處：挑一個有機會賺錢的 App、串接能正常運作的訂閱、準備一份 Apple 會接受的送審資料。這正是 [iOS Kit](https://devoria.fr/zh-hant/kits/ios) 四步驟課程涵蓋的內容，可以照你自己的步調進行。送審資料方面，[Apple Review Kit](https://devoria.fr/zh-hant/kits/review-apple) 收錄了我送出前的檢查清單和給審查人員的備註。首頁則示範了如何用 Expo 和 Claude Code [不從零開始做出手機 App](https://devoria.fr/zh-hant)，有沒有 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](https://devoria.fr/zh-hant/blog/testflight-test-iphone-app-before-review)。

### 沒有 Mac 開發 iOS 有哪些限制？

你無法使用本機 iOS 模擬器：它是 Xcode 的一部分，所以無法在 Windows 上執行。EAS 的本機 build（`--local`）不支援 Windows：你的 iOS build 都得透過 Expo 的雲端。除錯原生程式碼和手寫原生擴充功能仍然做得到，但比較困難，因為 Apple 的工具都在 Xcode 裡。


## 你的專案

[iOS Kit](https://devoria.fr/zh-hant/kits/ios)：用 Claude Code 打造你的 iPhone App：我的 App 所用的 Starter Code、檢查成果的 skills，以及 Apple Review Kit、App Store Screenshots Kit 與 ASO Kit。129.99 €。
