使用 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。
想为您的企业构建面向未来的应用程序吗?
我们一起工作吧