使用 Flutter 在沒有 Mac 的情況下開發和分發 iOS 應用
已發表: 2019-08-23編者註:在 Miquido,我們支持 Flutter 愛好者社區,我們總是樂於為 Flutter 網絡的知識共享做出貢獻。 今天,我們將介紹 Codemagic 的客座文章,他指出了使用 Flutter 開發 iOS 應用程序的主題,並且……沒有 macOS 設備。 享受它的每一塊!
大多數時候,iOS 應用程序是從 macOS 機器開發和分發的。 很難想像在沒有 macOS 的情況下為 iOS 平台開發應用程序。 但是,通過 Flutter 和 Codemagic 的結合,您可以在不使用 macOS 的情況下開發和分發 iOS 應用程序。 在我們之前的文章中,我們已經解釋了在沒有 Mac 的情況下對 iOS 應用程序進行代碼簽名的過程。 在這篇文章中,我們將詳細介紹在 Linux 上開發 Flutter 應用程序以及使用 Codemagic 的自定義/手動代碼簽名來完全控制應用程序簽名的過程,以 Comagic-Demo 應用程序為例。
在 Linux 上開發 Flutter 應用
Flutter 是一個跨平台的移動應用程序開發框架,可以從相同的源代碼開發 iOS 和 Android 應用程序。 但是,用於開發 iOS 應用程序的 Apple 原生框架無法在 Linux 或 Windows 等其他平台上編譯。 原生 iOS 組件需要 macOS 或 Darwin 來開發和分發 iOS 應用程序。 然而,像 Flutter 這樣的技術允許我們在 Linux 或 Windows 上開發跨平台應用程序,然後我們可以使用 Codemagic CI/CD 解決方案將應用程序分發到 Google Play Store 或 Apple App Store。
在 Linux 上獲取 Flutter 應用
可以從 Linux 平台構建、測試和發布 Android 應用程序。 我們可以利用這個 Android 功能在 Linux 上啟用 Flutter 應用程序開發。 我們的 Flutter 應用程序稱為 Comagic-Demo。 我們將使用該應用程序來展示如何在 Linux 上為 Android 和 iOS 構建。 但是,請記住,我們只能在 Linux 而不是 iOS 上針對 Android 進行開發。 在 Linux 上開發 Android 應用程序時,我們仍將獲得可以部署到 App Store 的 iOS 應用程序。 我們可以使用不同的方式將我們的 Comagic-Demo 移植到 Linux。
獲得一台 Linux 機器
如果您已經有一台安裝了 Linux 的計算機,那麼整個過程很容易。 你只需要在 Linux 機器上安裝 Android SDK 和 Flutter。 一旦我們克隆了 Comagic-Demo 應用程序,我們就可以立即開始處理它。
創建 Docker 容器
在 Linux 上獲取 Flutter 應用程序的另一種方法是使用 Docker。 如果您熟悉 Docker 生態系統,那麼您可以創建一個安裝了 Android SDK 和 Flutter 的Dockerfile 。 Dockerhub 上有很多 Android Dockerfile,我們只需要使用 Flutter SDK 擴展這些鏡像。 讓我們創建一個簡單的 Dockerfile,在此處擴展一個示例 Android docker 映像,以將 Android 和 Flutter 環境放入 Docker 容器中。 Dockerfile 應該將應用程序複製到容器中並運行 Flutter Android 環境。 Comagic-Demo 的示例 Dockerfile 將如下所示:
來自 runmymind/docker-android-sdk 運行 mkdir /codemagic-demo WORKDIR /codemagic-demo 添加 。 /codemagic 演示 運行 apt-get 更新 && \ apt-get install -y lcov git-core curl unzip && \ git 克隆 https://github.com/flutter/flutter.git && \ /flutter/bin/flutter 醫生 && \ apt-get remove -y curl 解壓縮 && \ apt autoremove -y && \ rm -rf /var/lib/apt/lists/* 環境路徑 $ PATH:/flutter/bin/cache/dart-sdk/bin:/flutter/bin RUN撲醫生
此代碼片段僅用於說明目的,但您可以根據需要自定義 Dockerfile。 安裝 Dockerfile 和 Docker 後,您可以使用 Docker 獲取 Codemagic-app。
$ docker build -t codemagic-demo 。 $ docker run --name codemagic-demo
運行這些命令後,我們將在 Flutter 環境中運行 Docker 容器。
Dockerising Futter 應用程序將是一個不同的主題,我們將在以後的文章中詳細介紹它。
從 App Store Connect 生成代碼簽名資產
為了對 iOS 應用程序進行代碼簽名,您需要一個 Apple 開發人員帳戶、一個開發和分發證書、您的應用程序 ID 和為該應用程序創建的配置文件。 我們在上一篇文章中介紹了代碼簽名活動的細節。 為了在 Codemagic 上為 iOS 應用程序的開發或調試版本配置手動代碼簽名,我們需要以下內容:
- .P12 格式的開發或發行證書
- 從 App Store Connect 或 Apple Developer 門戶下載的配置文件
- iOS 應用的捆綁包標識符
我們可以從 Apple Developer 門戶中的證書、標識符和配置文件部分下載證書和配置文件。 在
同樣,我們可以從 Apple 開發人員門戶下載配置文件。
我們需要證書和配置文件才能在 Codemagic 上對我們的 iOS 應用程序進行代碼簽名,因此請保存這些文件以供以後使用。
更新 Xcode 項目文件
現在,我們已經從 Apple Developer 門戶中獲得了所有代碼簽名資產。 接下來,我們需要整理 Xcode 項目文件,以便使用正確的團隊和配置文件進行手動代碼簽名。 我們可以通過使用 Xcodeproj Gem 的 Ruby 腳本來做到這一點,或者我們可以只更改 i os/YOUR_APP.xcodeproj/project.pbxproj文件中的以下字段。

- 開發團隊 = YOUR_DEVELOPMENT_TEAM_ID
- ProvisioningStyle = 手動
- PROVISIONING_PROFILE_SPECIFIER = NAME_OF_YOUR_PROVISIONING_PROFILE
在我們的 Codemagic-Demo 應用程序中,我們必須在 GitHub 上編輯 Xcode 項目文件。 我們必須確保為內部構建的調試配置和 App Store 構建的發布配置進行這些更改。 一旦我們在project.pbxproj 中設置了值,我們就可以毫無問題地從 Codemagic 部署 iOS 應用程序。
在 Codemagic 中設置手動代碼簽名
在 Linux 上開發時,我們只能看到 Android 應用程序的狀態,因為 Xcode 和 iOS 工具無法在 Linux 上安裝或運行。 目前正在努力將 Swift 和 iOS 工具引入 Linux,但這需要很多時間。 當我們準備好分發應用程序時,我們可以使用 Codemagic 輕鬆地為應用程序設置 CI/CD,請參閱此處的入門指南。 OnCodemagic,我們可以通過上傳我們從 Apple Developer 門戶下載的證書和配置文件,從發布部分啟用 iOS 代碼簽名。 在 Codemagic 應用程序中,導航到設置 → 發布 → iOS 代碼簽名 → 手動並在那裡上傳您的證書和配置文件。
當您現在運行構建時,您將獲得 IPA 文件形式的 iOS 應用程序,該文件可以部署在配置的設備上。 Codemagic 上的構建工件列表如下所示:
從Artifacts部分可以看出,我們獲得了codemagic_demo.ipa以及用於崩潰報告的 dSYMs 文件。 我們可以在任何已添加到配置文件中的 iOS 設備上安裝此應用程序並測試我們的 iOS 應用程序。 如果我們在那裡發現任何錯誤,我們總是可以回到 Linux 環境並修復這些錯誤。
將 iOS 應用程序分發到 App Store
截至目前,我們已經構建了 iOS 應用程序的調試版本,用於內部測試。 以類似的方式,我們可以將 iOS 應用分發到 App Store。 當我們準備好將應用部署到 App Store 時,我們需要在發布模式下構建應用。 我們可以使用分發證書和生產配置文件來做到這一點。 我們可以以類似的方式生成證書和配置文件。 但是我們必須確保在創建配置文件時選擇App Store分發。
分發配置文件將在任何設備上運行 iOS 應用程序,我們不需要在配置文件中顯式添加設備。 App Store 配置文件將如下所示:
一旦我們手頭有iOS 分發證書和生產配置文件,我們可以在 Codemagic 中的構建部分,如下所示。
我們還將構建參數設置為發布而不是調試。 在發布部分,我們需要上傳分發證書和生產配置文件以生成應用程序的 App Store 版本。
一旦 Codemagic 生成構建工件,我們就可以按照 App Store 指南將構建構建到 App Store Connect(以前稱為 iTunesConnect)並提交應用程序以供審核。
結論
結合跨平台移動應用程序開發框架和像 Codemagic 這樣神奇的 CI/CD 解決方案,擁有一台 Mac 來進行 iOS 應用程序開髮根本不是強制性的。 在為 iOS 開發時調試應用程序可能會出現一些問題,但完全可以使用 Flutter 和 Codemagic 的組合開發 iOS 應用程序並將其發佈到 App Store。
想為您的企業構建面向未來的應用程序嗎?
我們一起工作吧