生成适用于 iOS 的 Xamarin 应用
备注
支持的版本和要求App Center可移植类库 (PCL) 和 .NET Standard 项目。 有关 云生成计算机的版本 ,请参阅.NET Standard。 App Center不支持 Xamarin 组件存储中的组件,我们建议在可用时使用 NuGet 包。 如果使用的是无法替换的组件,请联系我们。 请参阅 帮助和反馈。
若要开始生成第一个 Xamarin iOS 应用,需要:
- 使用 GitHub、Bitbucket、VSTS 和 (连接到存储库服务Azure DevOps) 。
- 选择应用所住的存储库和分支。
- 配置生成的项目或工作区,以及要生成的方案。
备注
若要在真实设备上运行应用,生成需使用有效的预配配置文件和证书进行代码签名。
1.链接存储库
如果以前尚未连接到存储库服务帐户,则必须将其连接。 连接帐户后,选择 iOS 项目所在的存储库。 若要为存储库设置生成,需要存储库的管理员和拉取权限。
2.选择分支
选择存储库后,选择要构建的分支。 默认情况下,将列出所有活动分支。
3. 设置第一个生成
首次生成之前,需要配置 Xamarin 项目。
3.1. 项目/解决方案
如果解决方案和项目文件位于分析范围内,则 App Center 会自动检测到该存储库中的解决方案和项目文件。 选择要生成的 .sln 或 .csproj/. .fsproj 。
备注
为了获得最佳性能,分析当前限制为 .sln /.fsproj 的两个目录级别,包括存储库的根目录。
3.1.1. 从解决方案文件 ( .sln 生成)
在代码中,确保为适用于 iOS 生成的生成配置禁用 Android 和 UWP 项目:进入解决方案的配置映射,对于面向 iPhone 和 iPhoneSimulator 的所有映射,取消选中 "所有面向其他平台的项目"。 此更改将确保在生成 .sln 时,它不会尝试生成其他项目。 可以阅读更多的 解决方案配置映射信息 。
3.1.2. 正在从项目文件生成 ( .csproj/.fsproj)
若要从 .csproj/. .fsproj 文件生成所有引用的项目 (例如,PCL 项目) 必须包含与源 iOS 项目中的配置相同的配置。 因此,如果在 App Center 中运行模拟器的 " 调试 " 配置,PCL 项目必须具有 " 调试" | "iPhoneSimulator " 配置。 如果它们不存在,并防止出现进一步的错误,则在生成项目之前添加这样的配置。 这些配置具有仅用于调试和发布的基本默认设置。
3.2. Configuration
选择要生成的配置。 系统会根据在上一步中选取的源文件自动检测配置。
3.3. Mono 版本
App Center使用与相应的 Xamarin.iOS SDK 捆绑在一起的不同 Mono 环境进行生成,以保持向后兼容性,同时释放对新功能的支持。 新分支配置的默认 Mono 将是最新的稳定版本。 可以选择使用以前的 Mono 环境之一来生成较旧版本的框架或库。 选择其他 Mono 版本时,会看到 Xamarin.iOS SDK 版本与它捆绑在一起。 若要跟踪 Xamarin SDK 版本更新,可以阅读 Xamarin 发布博客 中的文章。
3.3.1. .NET Core 版本
将基于用于构建的 Mono 版本自动选择正确的 .NET Core 版本,且无法覆盖。 可以在下表中查看 Mono 与我们的服务使用的 .NET Core 的映射:
| Mono | .NET Core |
|---|---|
| <= 5.18 | 2.2.105 |
| 6.0 | 2.2.300 |
| 6.4 | 3.0.100 |
| 6.6 | 3.1.100 |
| 6.8 | 3.1.200 |
| 6.10 | 3.1.300 |
| 6.12 | 3.1.401 |
3.4. Xcode 版本
当前支持的 Xamarin 版本需要 Xcode 9.4.1 或更高版本
3.5. 生成触发器
默认情况下,每次开发人员推送到配置的分支时,都会触发新的生成。 如果希望手动触发新生成,可以在配置窗格中更改此设置。
3.6. 模拟器生成
只能在模拟器上运行模拟器生成,而不能在设备上安装,但生成的完成速度比设备版本更快。 如果生成不是模拟器生成,则需要在下一步中上传代码签名文件。
3.7。 递增生成号
启用后, CFBundleVersion 每个生成的 info.plist 中的将自动递增。 更改会在预生成后进行,而不会提交到存储库。
3.8。 代码签名
成功的设备生成将生成一个 IPA 文件。 若要在设备上安装生成,需要使用有效的预配配置文件和证书对其进行签名。 若要对从分支生成的生成进行签名,请在 "配置" 窗格中启用 "代码签名",并将配置 文件 (.mobileprovision) 和有效证书 (.p12) 连同证书的密码一起上传。 有关 xamarin iOS 应用程序的代码签名和设备预配的详细信息,请参阅 xamarin 文档。
具有 应用程序或 watchOS 扩展 的应用程序需要对每个扩展的附加预配配置文件进行签名。
备注
在包含 Xamarin watchOS apps 的项目中运行时,会出现一个 现有问题 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 应用的引用的 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.生成结果
触发生成后,它可以位于以下状态:
- 已排队 - 生成位于等待释放资源的队列中。
- build - 生成正在运行并执行预定义的任务。
- succeeded - 生成已成功完成。
- 失败 - 生成因失败而停止。 可以通过下载并检查生成日志来排查问题。
- 已取消 -生成已被用户操作取消或超时。
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文件显示可读的故障报告。