与 Mac 配对以进行 iOS 开发

使用 .NET Multi-platform App UI (.NET MAUI) 生成本机 iOS 应用程序需要访问仅在 Mac 上运行的 Apple 的生成工具。 因此,Visual Studio 2022 必须连接到可通过网络访问的 Mac 才能生成 .NET MAUI iOS 应用。

Visual Studio 2022 的“与 Mac 配对”功能可发现、连接到 Mac 生成主机、对其进行身份验证并记住这些主机,以便你可以在 Windows 上高效工作。

“与 Mac 配对”支持以下软件开发工作流:

  • 可以在 Visual Studio 2022 中写入 .NET MAUI iOS 代码。
  • Visual Studio 2022 打开与 Mac 生成主机的网络连接,并使用该计算机上的生成工具编译 iOS 应用并对其签名。
  • 无需在 Mac 上运行单独的应用程序 – Visual Studio 2022 可通过 SSH 安全调用 Mac 内部版本。
  • Visual Studio 2022 会在更改发生后立即收到通知。 例如,将 iOS 设备插入 Mac 或在网络上可用时,iOS 工具栏会立即更新。
  • Visual Studio 2022 的多个实例可以同时连接到 Mac。
  • 可使用 Windows 命令行生成 iOS 应用。

注意

在按照本文中的说明操作之前,请在 Mac 上安装 Xcode。 然后在安装后手动打开 Xcode,以便它可以添加其他组件。 此外,还应该安装最新的 Visual Studio 2022 for MacMono。 此外,如果有搭载 Apple 芯片的 Mac 计算机,请确保已安装 Rosetta。

如果不想安装 Visual Studio 2022 for Mac,则 Visual Studio 2022 可以自动配置 Mac 生成主机。 但是,你仍必须安装并运行 Xcode,并安装 Mono。

启用 Mac 上的远程登录

若要设置 Mac 生成主机,首先启用远程登录:

  1. 在 Mac 上,打开“系统首选项”并转到“共享”窗格。

  2. 选中“服务”列表中的“远程登录”

    Enabling remote login.

    确保将其配置为允许所有用户访问,或者 Mac 用户名或组包含在允许用户列表中。

  3. 如果出现提示,请配置 macOS 防火墙。 如果将 macOS 防火墙默认设置为阻止传入的连接,则可能需要允许 mono-sgen 接收传入的连接。 如果是这样,则会出现警报提示。

  4. 如果它与 Windows 计算机位于同一网络上,则 Visual Studio 2022 现在应该可以发现 Mac。 如果 Mac 仍然无法发现,请尝试手动添加 Mac

从 Visual Studio 2022 连接到 Mac

在 Mac 上启用远程登录后,将 Visual Studio 2022 连接到 Mac:

  1. 在 Visual Studio 2022 中,打开现有 .NET MAUI 项目或新建项目。

  2. 使用“与 Mac 配对”按钮 iOS 工具栏打开“与 Mac 配对”对话框:

    The iOS toolbar, with the Pair to Mac button highlighted.

    或者,选择“工具”>“iOS”>“与 Mac 配对”

    “与 Mac 配对”对话框显示所有以前连接且当前可用 Mac 生成主机的列表:

    The Pair to Mac dialog.

  3. 在列表中选择 Mac,然后选择“连接”

  4. 输入您的用户名和密码。 首次连接到任何特定 Mac 时,系统会提示输入该计算机的用户名和密码:

    Entering a username and password for the Mac.

    提示

    登录时,请使用系统用户名。

    “与 Mac 配对”使用这些凭据创建到 Mac 的新 SSH 连接。 如果成功,会向 Mac 上的 authorized_keys 文件中添加一个密钥。 后续连接到同一台 Mac 时将自动登录。

  5. “与 Mac 配对”会自动配置 Mac。 Visual Studio 2022 根据需要在连接的 Mac 生成主机上安装或更新必备组件。 但是,仍必须手动安装 Xcode。

  6. 检查连接状态图标。 Visual Studio 2022 连接到 Mac 后,该 Mac 的项会在“与 Mac 配对”对话框中显示指示它当前已连接的图标:

    A connected Mac.

    一次只能连接一个 Mac。

    提示

    右键单击“与 Mac 配对”列表中的任意 Mac 会打开上下文菜单,可在菜单中选择“连接...”、“忘记此 Mac”或“断开连接”

    The Pair to Mac context menus.

    如果选择“忘记此 Mac”,系统将忘记所选 Mac 的凭据。 若要重新连接到此 Mac,将需要重新输入用户名和密码。

如果已成功与 Mac 生成主机配对,则可以在 Visual Studio 2022 中生成 .NET MAUI iOS 应用。 有关详细信息,请参阅生成第一个应用

如果尚未与 Mac 配对,请尝试手动添加 Mac

手动添加 Mac

如果未在“与 Mac 配对”对话框中看到列出某特定 Mac,则可手动进行添加:

  1. 在 Mac 上打开“系统偏好设置”>“共享”>“远程登录”以找到 Mac 的 IP 地址:

    The Mac's IP address in System Preferences > Sharing.

    或者,使用命令行。 在终端中,运行以下命令:

    ipconfig getifaddr en0
    

    根据网络配置,可能需要使用 en0 以外的接口名称,例如 en1en2

  2. 在 Visual Studio 2022 的“与 Mac 配对”对话框中,选择“添加 Mac...”

    The Add Mac button in the Pair to Mac dialog.

  3. 输入 Mac 的 IP 地址并选择“添加”

    Entering the Mac's IP address.

  4. 为 Mac 输入用户名和密码:

    Enter a username and password.

    提示

    登录时,请使用系统用户名。

  5. 选择“登录”以通过 SSH 将 Visual Studio 2022 连接到 Mac,并将其添加到已知计算机列表中。

启用与已知 Mac 的自动连接

默认情况下,Visual Studio 启动时不会与以前配对的 Mac 建立连接。 但是,可以在 Visual Studio 中启用与已知 Mac 的自动连接,方法是导航到“工具 > 选项 > Xamarin > iOS 设置”,并确保已选中“启用与已知 Mac 的自动连接”

Enable auto connection to known Macs in Visual Studio.

重启 Visual Studio 后,它会在每次启动时自动连接到已知的 Mac。

自动预配 Mac

“与 Mac 配对”会自动预配 Mac,其中包含生成 .NET MAUI iOS 应用所需的软件。 这包括 .NET 和各种与 Xcode 相关的工具(但不包括 Xcode 本身)。

重要

  • “与 Mac 配对”无法安装 Xcode。 必须在 Mac 生成主机上手动安装它。 .NET MAUI iOS 开发需要使用它。
  • 自动预配 Mac 需要在 Mac 上启用远程登录,并且 Windows 计算机必须能够通过网络访问该 Mac。
  • 自动预配 Mac 需要 Mac 上有足够的可用空间来安装 .NET。

此外,当 Visual Studio 2022 连接到 Mac 时,“与 Mac 配对”会对 Mac 执行所需的软件安装和更新。

Xcode 工具和许可证

“与 Mac 配对”还检查以确定是否已安装 Xcode 并接受其许可证。 虽然“与 Mac 配对”不会安装 Xcode,但会提示接受许可证。

此外,“与 Mac 配对”会安装或更新随 Xcode 分发的各种包。 这些包安装迅速,不出现提示。

自动预配 Mac 疑难解答

如果使用“自动预配 Mac”的过程中遇到任何问题,请查看存储在 %LOCALAPPDATA%\Xamarin\Logs\17.0 中的 Visual Studio 2022 IDE 日志。 这些日志可能包含错误消息,可帮助更好地诊断失败或获取支持。

从 Windows 命令行生成 iOS 应用

“与 Mac 配对”支持从命令行生成 .NET MAUI 应用。 导航到保存 .NET MAUI iOS 应用源的文件夹,并执行以下命令:

dotnet build -f net8.0-ios -p:ServerAddress={macOS build host IP address} -p:ServerUser={macOS username} -p:ServerPassword={macOS password} -p:TcpPort=58181 -p:_DotNetRootRemoteDirectory=/Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/

上面的示例中传递到 dotnet 的参数有:

  • ServerAddress – Mac 生成主机的 IP 地址。
  • ServerUser – 登录到 Mac 生成主机时要使用的用户名。 使用系统用户名而不是全名。
  • ServerPassword - 登录 Mac 生成主机时使用的密码。
  • _DotNetRootRemoteDirectory - Mac 生成主机上的包含 .NET SDK 的文件夹。

“与 Mac 配对”首次从 Visual Studio 2022 或命令行登录 Mac 生成主机时,会设置 SSH 密钥。 借助这些密钥,以后登录时不再需要输入用户名或密码。 新创建的密钥存储在 %LOCALAPPDATA%\Xamarin\MonoTouch

如果从命令行生成调用中省略 ServerPassword 参数,“与 Mac 配对”会尝试使用保存的 SSH 密钥登录到 Mac 生成主机。

有关从 Windows 命令行生成 iOS 应用的详细信息,请参阅使用命令行发布 iOS 应用