使用 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。

本机应用程序图标

想为您的企业构建面向未来的应用程序吗?

我们一起工作吧