使用 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 門戶中的證書、標識符和配置文件部分下載證書和配置文件。 在

從 iOS 開發人員門戶下載配置文件

同樣,我們可以從 Apple 開發人員門戶下載配置文件。

iOS 配置文件

我們需要證書和配置文件才能在 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 代碼簽名 → 手動並在那裡上傳您的證書和配置文件。

在 Codemagic 中設置手動代碼簽名

當您現在運行構建時,您將獲得 IPA 文件形式的 iOS 應用程序,該文件可以部署在配置的設備上。 Codemagic 上的構建工件列表如下所示:

Codemagic 上的構建工件列表

Artifacts部分可以看出,我們獲得了codemagic_demo.ipa以及用於崩潰報告的 dSYMs 文件。 我們可以在任何已添加到配置文件中的 iOS 設備上安裝此應用程序並測試我們的 iOS 應用程序。 如果我們在那裡發現任何錯誤,我們總是可以回到 Linux 環境並修復這些錯誤。

將 iOS 應用程序分發到 App Store

截至目前,我們已經構建了 iOS 應用程序的調試版本,用於內部測試。 以類似的方式,我們可以將 iOS 應用分發到 App Store。 當我們準備好將應用部署到 App Store 時,我們需要在發布模式下構建應用。 我們可以使用分發證書和生產配置文件來做到這一點。 我們可以以類似的方式生成證書和配置文件。 但是我們必須確保在創建配置文件時選擇App Store分發。

App Store 分發選項

分發配置文件將在任何設備上運行 iOS 應用程序,我們不需要在配置文件中顯式添加設備。 App Store 配置文件將如下所示:

App Store 配置文件

一旦我們手頭iOS 分發證書生產配置文件,我們可以在 Codemagic 中的構建部分,如下所示。

Codemagic Build 部分中的 Release 模式

我們還將構建參數設置為發布而不是調試。 在發布部分,我們需要上傳分發證書和生產配置文件以生成應用程序的 App Store 版本。

一旦 Codemagic 生成構建工件,我們就可以按照 App Store 指南將構建構建到 App Store Connect(以前稱為 iTunesConnect)並提交應用程序以供審核。

結論

結合跨平台移動應用程序開發框架和像 Codemagic 這樣神奇的 CI/CD 解決方案,擁有一台 Mac 來進行 iOS 應用程序開髮根本不是強制性的。 在為 iOS 開發時調試應用程序可能會出現一些問題,但完全可以使用 Flutter 和 Codemagic 的組合開發 iOS 應用程序並將其發佈到 App Store。

本機應用程序圖標

想為您的企業構建面向未來的應用程序嗎?

我們一起工作吧