iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0
Build on Google AI

單鐵的人生如履薄冰!AI 教練 APP 30天開發旅程,你說能走到最後嗎?系列 第 28

Day 28 | 前端 CI/CD:打破本機限制!Expo EAS 雲端打包與 OTA 更新

  • 分享至 

  • xImage
  •  

前言:前端的部署,比你想得更折磨人

昨天我們使用 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 或文案,直接推送進使用者手機,徹底繞過雙平台漫長的審核地獄!

動手實作 1:建立前端專屬的 Private GitHub 專案

呼應昨天建立的後端專案,今天要把前端也妥善保管起來,實現前後端分離的 Multi-repo 架構。

  1. 在 GitHub 建立前端專案
    新建一個名為 kakeru-ai-app 的 Repository,同樣設定為 🔒 Private,不加入 README 或 .gitignore

  2. 推上遠端倉庫
    打開終端機,進入你的 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
    

動手實作 2:配置 EAS 雲端打包環境

首先,我們需要在全域安裝 EAS 的命令列工具,並登入你的 Expo 帳號。

# 1. 安裝 EAS CLI 工具
npm install -g eas-cli

# 2. 登入你的 Expo 帳號
eas login

# 3. 初始化專案的 EAS 設定
eas build:configure

實戰終端機互動全紀錄:
當你第一次執行 eas build:configure 時,系統會發現雲端還沒有這個專案,並引導你自動建立。請依照以下流程,直接按下 Enter(選擇 yesAll):

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。這份檔案定義了雙平台雲端打包的參數與環境配置。

動手實作 3:產出可分享的 Android APK 安裝檔

預設情況下,Expo 會打包出用來上架 Google Play 的 .aab 檔。為了能產出直接傳給朋友測試的實體安裝檔,我們需要調整設定來產出 .apk 檔。

(註:蘋果生態系因為嚴格的資安與憑證限制,需要付費開發者帳號才能進行 TestFlight 測試,因此實務測試上,我們會優先產出 Android APK 供使用者搶先體驗。)

  1. 修改 eas.json (指定產出 APK)
    打開專案根目錄下的 eas.json,在 build 區塊中新增一個名為 preview 的設定:JSON

    {
      "build": {
        "preview": {
          "android": {
            "buildType": "apk"
          }
        },
        "production": {
          "//": "原本預設的 production 設定保留不動..."
        }
      }
    }
    
  2. 執行雲端打包指令:Bash

    eas build -p android --profile preview
    

    送出後,Expo 會在雲端啟動虛擬機幫你編譯,這項服務在免費額度內會需要排隊等待數分鐘。

  3. 取得下載 QR Code 與網址
    編譯成功時,終端機最後會直接印出 APK 的下載網址與 QR Code;你也可以隨時登入 Expo 官網後台,進入專案的 Builds 頁籤,點擊 Download 取得安裝檔。

動手實作 4:體驗魔法般的 OTA 熱更新

在實務上,打包成 APK 是一次性的。日常開發中最常用的,是微調畫面的 OTA 更新。

  1. 初始化更新設定
    在終端機輸入以下指令,EAS 會自動修改你的 app.json,注入用來接收熱更新的 URL。Bash

    eas update:configure
    
  2. 修改畫面文案
    假設我們修改了首頁的文案,將「開始今日訓練」改為「🚀 啟動 AI 課表」。

  3. 發佈 OTA 更新:Bash

    eas update --branch main --message "優化首頁按鈕文案"
    

看著終端機跑完進度條,更新就已經發佈到雲端了!任何已經安裝 KAKERU APK 的 Android 手機,只要重新打開 APP,就會在幾秒內無縫載入最新的按鈕文案。另外如果使用iOS,開啟Expo之後可以看到下方有多出一個Project,這就是發佈的專案。
https://ithelp.ithome.com.tw/upload/images/20260906/20165043VSUuhrppZt.png

今日總結與明日預告

這兩天,我們徹底打通了 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 雲端真實帳單」。我們明天見!


上一篇
Day 27 | 後端 CI/CD:用 GitHub Actions 自動部署 Cloud Run
下一篇
Day 29 | 最真實的 Dogfooding:連續一週打卡實測、AI 診療室動態排程與 GCP 帳單開
系列文
單鐵的人生如履薄冰!AI 教練 APP 30天開發旅程,你說能走到最後嗎?30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言