使用热重启部署 iOS 应用

通常在生成应用时,将编译代码并与其他项目资源结合使用,以生成部署到模拟器或设备的应用程序包。 使用此模型,对应用进行更改时必须生成和部署新的应用程序包。 虽然增量生成有助于缩短编译时间,但无论更改幅度有多大,部署所花费的时间不会变化。

.NET Multi-platform App UI (.NET MAUI) 热重启使你可以从 Visual Studio 2022 快速将 .NET MAUI 应用部署到 64 位本地 iOS 设备,而无需 Mac 生成主机。 它可以将更改推送到本地连接的 iOS 设备上已存在的应用程序包,因此无需完全重新生成应用程序包。 它支持对代码文件、资源和项目引用的更改,使你能够在开发过程中快速测试对应用所做的更改。

重要

热重启并不能取代 Mac 生成主机提供的完整生成体验。 例如,它只能部署使用调试生成配置的应用,并且不支持静态库和框架、XCFrameworks 或绑定资源包。 有关详细信息,请参阅限制

必须满足许多要求才能使用热重启将 .NET MAUI 应用部署到本地连接的 iOS 设备:

安装

执行以下步骤以设置热重启:

  1. 在 Visual Studio 工具栏中使用“调试目标”下拉列表选择“iOS 本地设备”,然后选择“本地设备”条目:

    Screenshot of choosing the initial debug target for hot restart.

  2. 在 Visual Studio 工具栏中,选择“本地设备”

    Screenshot of the initial debug target chosen for hot restart.

    将会显示“设置热重启”安装向导,该向导将引导你设置本地 iOS 设备,以便进行热重启部署。

  3. 在“设置热重启”安装向导中,选择“下一步”

    Screenshot of the first step in the setup hot restart wizard.

  4. 如果未安装 iTunes,则安装向导将会提示进行安装。 在“设置热重启”安装向导中,选择“下载 iTunes”

    Screenshot of the second step in the setup hot restart wizard.

    注意

    可以从 Microsoft Store 安装 iTunes,也可以从 Apple 下载。

    等待 iTunes 下载,然后安装它。 如果从 Microsoft Store 安装,安装完成后请将其打开,然后按照其他提示将其启用,以发现本地连接的设备。

  5. 在“设置热重启”安装向导中,选择“下一步”以移动到向导的下一步,该向导将提示你连接本地 iOS 设备:

    Screenshot of the initial third step in the setup hot restart wizard.

  6. 使用 USB 电缆将 iOS 设备连接到开发计算机。 设备可能会显示提示,要求你信任开发计算机。 在设备上,单击“信任”,并按照任何其他设备提示进行操作。

  7. 在“设置热重启”安装向导中,检测到本地 iOS 设备后,选择“下一步”

    Screenshot of the completed third step in the setup hot restart wizard.

    注意

    如果安装向导无法检测本地 iOS 设备,则断开连接,然后从开发计算机重新连接本地 iOS 设备。 此外,请确保 iTunes 能够识别本地 iOS 设备。

  8. 在“设置热重启”安装向导中,单击使用个人帐户登录超链接,以配置为通过个人 Apple 开发人员计划帐户运行热重启:

    Screenshot of the initial fourth step in the setup hot restart wizard.

    此时会显示“个人帐户”对话框。

    注意

    或者,若要配置为通过企业 Apple 开发人员计划帐户运行热重启,单击“使用企业帐户登录”超链接,并在出现的对话框中输入凭据。 然后继续执行步骤 12。

  9. 创建 App Store Connect API 密钥。 这将需要你注册 Apple 开发人员帐户付费的 Apple 开发人员计划。 有关创建 App Store Connect API 密钥的信息,请参阅 developer.apple.com 上的为 App Store Connect API 创建 API 密钥

  10. 在“个人帐户”对话框中,输入 App Store Connect API 密钥数据:

    Screenshot of the completed dialog for adding an Apple Individual account.

    通过依次选择“用户和访问权限”和“密钥”选项卡,可在 App Store Connect 中找到“姓名”、“颁发者 ID”与“密钥 ID”数据。还可以从以下位置下载私钥

    Screenshot of Apple App Store Connect API details.

  11. 在“个人帐户”对话框中,单击“添加”按钮。 “个人帐户”对话框将关闭。

  12. 在“设置热重启”安装向导中,单击“完成”按钮:

    Screenshot of the completed fourth step in the setup hot restart wizard.

    你的 Apple 开发人员计划帐户将会被添加到 Visual Studio,“设置热重启”安装向导将关闭。

  13. 在“解决方案资源管理器”中,右键单击项目,并选择“属性”

  14. 在项目属性中,展开“iOS”并选择“捆绑签名”。 使用“方案”下拉列表选择“自动预配”,然后单击“配置自动预配”超链接:

    Screenshot of automatic provisioning enabled within the iOS property page in Visual Studio.

    将显示“配置自动预配”对话框。

  15. 在“配置自动预配”对话框中,为 Connect API 密钥选择团队:

    Screenshot of the automatic provisioning dialog when it's correctly configured.

    Visual Studio 将完成自动预配过程。 然后,单击“确定”按钮关闭“配置自动预配”对话框。

    注意

    建议使用自动预配功能,以便轻松配置更多用来部署的 iOS 设备。 但是,如果设备上存在正确的预配配置文件,则可以使用手动预配。

使用热重启部署和调试

执行初始设置后,本地连接的 iOS 设备将显示在调试目标下拉菜单中。 要部署和调试应用,请执行以下操作:

  1. 确保已解锁本地连接的 iOS 设备。

  2. 在 Visual Studio 工具栏中,在“调试目标”下拉列表中选择本地连接的 iOS 设备,然后单击“运行”按钮生成应用并将其部署到本地 iOS 设备:

    Screenshot of the chosen debug target for hot restart.

  3. 部署应用后,Visual Studio 将显示“连接调试器”对话框:

    Screenshot of the dialog asking you to launch the app on your device.

    在设备上启动应用,Visual Studio 会将调试器连接到正在运行的应用,并关闭“连接调试器”对话框。

调试应用时,可以编辑 C# 代码,然后按下 Visual Studio 工具栏中的“重启”按钮,以重启调试会话并应用新的更改:

Screenshot of the restart button on the Visual Studio toolbar.

阻止代码执行

可使用 HOTRESTART 预处理器符号来防止在使用热重启进行调试时执行代码:

#if !HOTRESTART
  // Code here won't be executed when debugging with hot restart
#endif

启用热重启

在 Visual Studio 2022 中默认启用热重启。 如果之前已禁用,可以通过从 Visual Studio 菜单栏中选择“工具”>“选项”将其启用。 接下来,在“选项””对话框中,展开 Xamarin 并选择“iOS 设置”。 然后,确保已选中“启用热重启”

Screenshot of how to enable hot restart within Visual Studio.

限制

使用热重启时存在一些限制:

  • 它只能用于部署使用调试生成配置的应用。 你仍然需要 Mac 生成主机来生成、签名和部署应用,以用于生产目的。
  • 不支持情节提要和 XIB 文件,如果应用尝试在运行时加载这些文件,则可能会崩溃。
  • 不支持静态 iOS 库和框架,如果应用尝试加载它们,则可能会出现运行时错误或崩溃。
  • 不支持 XCFrameworks 和绑定资源包。
  • 不支持资产目录。 使用热重启时,应用会显示 .NET 图标和启动屏幕。

疑难解答

iOS 使用监视程序监控应用的启动时间和响应速度,并终止无响应的应用。 例如,监视程序会终止长时间阻止主线程的应用。 在旧的 iOS 设备上,监视程序可能会在调试器连接到应用之前终止使用热重启部署的应用。 解决方法是减少在应用的启动路径中执行的处理量,并使用较新的 iOS 设备。

要报告其他问题,请在“帮助”>“发送反馈”>“报告问题”处使用反馈工具。