昨天我們使用 GitHub Actions 搞定了後端的自動化部署。現在,讓要直行動裝置的打包與發佈。
但要先面對現實,**不管你用多厲害的跨平台框架,只要你想讓 iOS 使用者安裝你的 APP,蘋果那每年 99 美金的開發者「保護費」是絕對逃不掉的。**沒有任何魔法可以幫你跨過這道高牆。
但是,即便我們得向資本低頭,我們絕對可以拒絕技術上的折磨。
以往為了開發與打包,你必須被強迫買一台 Mac、跟各種憑證 (Certificates) 纏鬥;更慘的是,就算只是修復首頁的一個錯字,你都要重新編譯、送審 App Store,苦等好幾天才能讓使用者重新下載。
今天,我們要將 KAKERU 的前端專案推上 GitHub,並導入 Expo 生態系最強大的武器:EAS (Expo Application Services)。
既然付費上架 iOS 是未來的規劃,今天就先利用 EAS 雲端伺服器代勞,一鍵產出能直接分享給朋友安裝的 Android APK 搶先體驗版!更棒的是,我們將實作魔法般的「OTA (Over-The-Air) 熱更新」,未來修改 UI 或文案,直接推送進使用者手機,徹底繞過雙平台漫長的審核地獄!
呼應昨天建立的後端專案,今天要把前端也妥善保管起來,實現前後端分離的 Multi-repo 架構。
在 GitHub 建立前端專案:
新建一個名為 kakeru-ai-app 的 Repository,同樣設定為 🔒 Private,不加入 README 或 .gitignore。
推上遠端倉庫:
打開終端機,進入你的 Expo 前端專案資料夾,執行:Bash
git init
git add .
git commit -m "init: 首次提交 KAKERU 前端 APP 程式碼"
git branch -M main
git remote add origin https://github.com/[你的帳號]/專案名稱.git
git push -u origin main
首先,我們需要在全域安裝 EAS 的命令列工具,並登入你的 Expo 帳號。
# 1. 安裝 EAS CLI 工具
npm install -g eas-cli
# 2. 登入你的 Expo 帳號
eas login
# 3. 初始化專案的 EAS 設定
eas build:configure
實戰終端機互動全紀錄:
當你第一次執行 eas build:configure 時,系統會發現雲端還沒有這個專案,並引導你自動建立。請依照以下流程,直接按下 Enter(選擇 yes 與 All):
EAS project not configured.
✔ Which account should own this project? › [你的帳號]
✔ Would you like to automatically create an EAS project for @[你的帳號]/Kakeru-AI-App? … yes
✔ Created @[你的帳號]/Kakeru-AI-App on EAS
✔ Linked local project to EAS project a697b654-xxxx-xxxx-xxxx-xxxxxxxxxxxx
💡 The following process will configure your iOS and/or Android project to be compatible with EAS Build.
✔ Which platforms would you like to configure for EAS Build? › All
✔ Generated eas.json.
🎉 Your project is ready to build.
看到最後這句 Your project is ready to build.,就代表 EAS 已經自動在 Expo 後台幫你建好專案,並生成了 eas.json。這份檔案定義了雙平台雲端打包的參數與環境配置。
預設情況下,Expo 會打包出用來上架 Google Play 的 .aab 檔。為了能產出直接傳給朋友測試的實體安裝檔,我們需要調整設定來產出 .apk 檔。
(註:蘋果生態系因為嚴格的資安與憑證限制,需要付費開發者帳號才能進行 TestFlight 測試,因此實務測試上,我們會優先產出 Android APK 供使用者搶先體驗。)
修改 eas.json (指定產出 APK):
打開專案根目錄下的 eas.json,在 build 區塊中新增一個名為 preview 的設定:JSON
{
"build": {
"preview": {
"android": {
"buildType": "apk"
}
},
"production": {
"//": "原本預設的 production 設定保留不動..."
}
}
}
執行雲端打包指令:Bash
eas build -p android --profile preview
送出後,Expo 會在雲端啟動虛擬機幫你編譯,這項服務在免費額度內會需要排隊等待數分鐘。
取得下載 QR Code 與網址:
編譯成功時,終端機最後會直接印出 APK 的下載網址與 QR Code;你也可以隨時登入 Expo 官網後台,進入專案的 Builds 頁籤,點擊 Download 取得安裝檔。
在實務上,打包成 APK 是一次性的。日常開發中最常用的,是微調畫面的 OTA 更新。
初始化更新設定:
在終端機輸入以下指令,EAS 會自動修改你的 app.json,注入用來接收熱更新的 URL。Bash
eas update:configure
修改畫面文案:
假設我們修改了首頁的文案,將「開始今日訓練」改為「🚀 啟動 AI 課表」。
發佈 OTA 更新:Bash
eas update --branch main --message "優化首頁按鈕文案"
看著終端機跑完進度條,更新就已經發佈到雲端了!任何已經安裝 KAKERU APK 的 Android 手機,只要重新打開 APP,就會在幾秒內無縫載入最新的按鈕文案。另外如果使用iOS,開啟Expo之後可以看到下方有多出一個Project,這就是發佈的專案。
這兩天,我們徹底打通了 KAKERU 的自動化流程:
昨天(Day 27)用 GitHub Actions + Cloud Run 完成了後端 API 的持續部署;
今天(Day 28)建立了前端專屬的 Repo,並利用 Expo EAS 解鎖了雲端 APK 編譯與 OTA 熱更新。
至此,KAKERU 的全端架構與部署 (DevOps) 已經全數就位。系統確實「能跑」了。不過還是要給此專案,加入一項最後的考驗。
一款宣稱要融入跑者生活的 AI 教練 APP,真的禁得起現實生活中的突發狀況嗎?
明天(Day 29),將進行最嚴苛也最真實的「Dogfooding (吃自己的狗糧)」!
將不寫 Code,而是分享過去一個多禮拜親自使用 KAKERU 連續打卡的真實體驗、遇到下雨天時「AI 診療室」的調整,並在最後為大家開箱這一個月開發下來的「GCP 雲端真實帳單」。我們明天見!