生成适用于 iOS 的 Xamarin 应用

重要

Visual Studio App Center 计划于 2025 年 3 月 31 日停用。 虽然可以继续使用 Visual Studio App Center,直到它完全停用,但你可以考虑迁移到几个建议的替代方法。

详细了解支持时间线和替代方法。

注意

支持的版本和要求 App Center 支持可移植类库 (PCL) 和 .NET Standard 项目。 有关 .NET Standard 的版本,请参阅 云生成计算机 。 App Center 不支持 Xamarin 组件存储中的组件,我们建议在可用时使用 NuGet 包。 如果使用的是无法替换的组件,请与我们联系。 请参阅 帮助和反馈

若要开始生成第一个 Xamarin iOS 应用,需要:

  1. (GitHub、Bitbucket、VSTS、Azure DevOps) 连接到存储库服务帐户。
  2. 选择应用所在的存储库和分支。
  3. 配置生成的项目或工作区,以及要生成的方案。

注意

要使应用在真实设备上运行,需要使用有效的预配配置文件和证书对生成进行代码签名。

1. 链接存储库

如果以前未连接到存储库服务帐户,则必须连接它。 连接帐户后,选择 iOS 项目所在的存储库。 若要为存储库设置生成,需要为其设置管理员和拉取权限。

2. 选择分支

选择存储库后,选择要生成的分支。 默认情况下,将列出所有活动分支。

3. 设置第一个生成

在首次生成之前,需要配置 Xamarin 项目。

3.1. 项目/解决方案

如果解决方案和项目文件位于分析范围内,App Center 会自动检测存储库中的解决方案和项目文件。 选择要生成的 .sln.csproj/.fsproj

注意

为了获得最佳性能,分析目前限制为两个目录级别 (.sln )和 个目录级别(包括存储库的根目录)。

3.1.1. 从解决方案文件 (.sln) 生成

在代码中,确保禁用适用于 iOS 版本的生成配置的 Android 和 UWP 项目:转到解决方案的配置映射,对于面向 iPhoneiPhoneSimulator 的所有映射,请取消选中面向其他平台的所有项目。 此更改将确保在 生成.sln 时,不会尝试生成其他项目。 可以读取更多 解决方案配置映射信息

3.1.2. 从项目文件 (.csproj/.fsproj) 生成

例如,若要从 .csproj/.fsproj 文件生成所有引用的项目 (,PCL 项目) 必须包含与源 iOS 项目中的配置同名的配置。 因此,如果在 App Center 中运行模拟器的 调试 配置,则 PCL 项目必须具有 Debug|iPhoneSimulator 配置。 如果它们不存在,并且为了防止进一步错误,我们在生成项目之前添加此类配置。 这些配置仅具有调试和发布的基本默认设置。

3.2. 配置

选择要用于生成的配置。 根据上一步中选取的源文件,自动检测配置。

3.3. Mono 版本

App Center 允许使用与相应的 Xamarin.iOS SDK 捆绑在一起的不同 Mono 环境,以便在发布对新功能的支持的同时保持向后兼容性。 新分支配置的默认 Mono 将是最新的稳定配置。 可以选择使用以前的 Mono 环境之一来生成较旧版本的框架或库。 选择其他 Mono 版本时,会看到与之捆绑的 Xamarin.iOS SDK 版本。 若要跟踪 Xamarin SDK 版本更新,可以阅读 Xamarin 发布博客中的文章。

3.3.1. .NET 版本

将基于用于生成的 Xamarin.iOS 版本自动选择正确的 .NET 版本,并且无法覆盖。 可以在下表中查看 Xamarin.iOS 到我们的服务使用的 .NET 的映射:

Xamarin.iOS .NET
13.20 3.1.401
14.0 3.1.401
14.2 3.1.401
14.4 3.1.401
14.6 5.0.100
14.8 5.0.100
14.10 5.0.100
14.14 5.0.100
14.16 5.0.100
14.20 5.0.100
15 5.0.100
15.2 5.0.100
15.4 5.0.100
15.6 5.0.100
15.8 5.0.100
15.10 5.0.100
15.12 5.0.100
16.0 5.0.100
16.0 (.NET 6) 6.0.405
16.1 6.0.405
16.2 6.0.405

3.4. Xcode 版本

当前支持的 Xamarin 版本需要 Xcode 11.7 或更高版本

3.5. 生成触发器

默认情况下,每次开发人员推送到配置的分支时,都会触发新的生成。 如果希望手动触发新版本,可以在配置窗格中更改此设置。

3.6. 模拟器生成

模拟器版本只能在模拟器上运行,不能安装在设备上,但生成完成速度比设备版本快。 如果生成不是模拟器版本,则需要在下一步中上传代码签名文件。

3.7. 递增内部版本号

启用后, CFBundleVersion 应用 Info.plist 中的 会为每个生成自动递增。 更改发生在生成前,不会提交到存储库。

3.8. 代码签名

成功的设备生成将生成 IPA 文件。 若要在设备上安装内部版本,需要使用有效的预配配置文件和证书对其进行签名。 若要对从分支生成的生成进行签名,请在配置窗格中启用代码签名, 并上传预配配置文件 (.mobileprovision) 和有效的证书 (.p12) ,以及证书的密码。 可以在 Xamarin 文档中详细了解 Xamarin iOS 应用的代码签名和设备预配。

具有 应用或 watchOS 扩展 的应用需要对每个扩展的其他预配配置文件进行签名。

注意

在包含 Xamarin watchOS 应用的项目中运行时nuget restore存在现有问题。 在没有解决方法的情况下在 App Center 上生成 watchOS 应用将导致错误:

Project <project> is not compatible with xamarinios10 (Xamarin.iOS,Version=v1.0) / win-x86. Project <project> supports: xamarinwatchos10 (Xamarin.WatchOS,Version=v1.0).

若要在 App Center 上生成 watchOS 应用,需要解决方法。 在引用 Watch App 的包含 iOS 项目中, 必须包含一个额外的行

<ReferenceOutputAssembly>False</ReferenceOutputAssembly>

具有解决方法的示例 WatchApp 参考:

    <ProjectReference Include="..\MyWatchApp\MyWatchApp.csproj">
      <Project>{59EB034F-3D29-43A5-B89F-124879504771}</Project>
      <Name>MyWatchApp</Name>
      <IsWatchApp>True</IsWatchApp>
      <ReferenceOutputAssembly>False</ReferenceOutputAssembly>
    </ProjectReference>

3.9. 在真实设备上启动成功的生成

使用新生成的 .ipa 文件测试应用是否在真实设备上启动。 启动测试增加了大约 10 分钟的生成时间。 你可能想要检查更全面的指南来测试生成

3.10. Nuget 还原

如果 NuGet.config 文件已签入存储库,并且位于 存储库的.sln 或根级别旁边,则 App Center 将在添加专用 NuGet 源时还原它们,如以下示例所示。 可以使用 环境变量安全地添加凭据:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget" value="https://api.nuget.org/v3/index.json" />
    <add key="MyGet" value="https://www.myget.org/F/MyUsername/api/v2/index.json" />
    <add key="MyAuthNuget" value="https://nuget.example.com/v2/index.json" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
  <packageSourceCredentials>
    <MyAuthNuget>
      <add key="Username" value="$USER_VARIABLE" />
      <add key="ClearTextPassword" value="$PASSWORD_VARIABLE" />
    </MyAuthNuget>
  </packageSourceCredentials>
</configuration>

如果配置复杂且需要更多信息,请参阅 配置 NuGet 行为

3.11. 分发到通讯组

可以将分支中的每个成功生成配置为分发到以前创建的通讯组。 可以从“分发”部分内添加新的通讯组。 始终有一个名为“协作者”的默认通讯组,其中包含有权访问应用的所有用户。

保存配置后,将自动启动新的生成。

4. 生成结果

触发生成后,它可以处于以下状态:

  • queued - 生成在等待释放资源的队列中。
  • 生成 - 生成正在运行并执行预定义的任务。
  • succeeded - 生成已成功完成。
  • failed - 生成因失败而停止。 可以通过下载并检查生成日志来排查错误。
  • canceled - 生成因用户操作而取消或超时。

4.1. 生成日志

对于已完成的生成 (成功或失败) ,请下载日志以了解有关生成过程的详细信息。 App Center 提供包含以下文件的存档:

|-- 1_build.txt (this is the general build log)
|-- build (this folder contains a separate log file for each build step)
    |-- <build-step-1> (e.g. 2_Get Sources.txt)
    |-- <build-step-2> (e.g. 3_Pod install.txt)
    |--
    |-- <build-step-n> (e.g. n_Post Job Cleanup.txt)

特定于生成步骤的日志 (位于 build/ 存档) 的目录中,有助于排查和了解生成失败的步骤和原因。

4.2. 应用 (.ipa.app)

.ipa是包含 iOS 应用的 iOS 应用程序存档文件。 如果生成已正确签名, .ipa 则可以在实际设备上安装 ,对应于签名时使用的预配配置文件。 有关 App Center 的代码签名和分发的更多详细信息

如果应用是模拟器版本,则可以 .app 在模拟器上运行文件,但不能在真实设备上使用它。

4.3. 符号文件 (.dsym)

仅为设备生成生成符号文件。 .dsym 文件包含应用的调试符号。

  • 如果以前在应用中集成了 App Center SDK 并启用了故障报告模块,则崩溃报告服务需要此 .dsym 文件才能生成以显示人类可读 (符号化) 崩溃报告。
  • 如果以前在应用中集成了另一个 SDK 用于崩溃报告, (例如 HockeyApp SDK) ,则相应的服务需要 .dsym 该文件来显示可读的故障报告。