用Windows系统编译iOS项目

如何从安装Windows系统的计算机上对Mac进行远程编译,从而创建iOS项目。

Choose your operating system:

Windows

macOS

Linux

前置主题

为了能够理解并使用此页面中的内容,请确保您已掌握以下主题:

在创建iOS签名项目时,需要使用Mac和Apple开发人员账户。然而,对于主要使用Windows系统的团队来说,它他们可以使用 虚幻引擎4(UE4) 在Windows PC和Mac之间建立 SSH连接 ,从而远程创建iOS项目。这要求你在Mac上允许SSH连接,然后还需要设置SSH密钥和凭证,以便在Windows系统上访问Mac。本指南将带领你实现这一操作。

在Windows上创建"仅蓝图"iOS项目

如果你要创建 仅蓝图 类型的iOS项目,则不必参照下文中的完整远程创建步骤。相反,你可以使用Windows计算机直接创建iOS项目,前提是你已在编辑器中设置 iOS开发人员证书 授权配置文件 。但是,如果你之后打算在项目中添加C++代码,则还需要遵循此页面上的步骤。

有关如何为构建版本签名的信息,请参阅关于 iOS授权 的指南。

1.必要设置

要使用iOS远程构建功能,你至少需要一台能够构建iOS项目的Mac,以及一台Windows PC。两台计算机都必须接入互联网或局域网,并且必须安装同一个UE4项目。

你的Windows电脑必须安装 iTunes ,以便确保你拥有iOS项目所需的二进制文件。我们建议你从 Apple官网 而不是Windows Store下载和安装iTunes,因为Windows版本包括额外的二进制文件,可能会对远程构建产生干扰。如需从Apple直接获取iTunes,请向下滚动并找到"寻找其他版本?"这一段,然后点击 Windows

你的Mac必须已经将你的iOS开发人员证书加载进 系统钥匙串(System Keychain) ,并且你必须按照 iOS授权 设置项目的授权配置文件。

在你设置完Mac并为项目构建做好准备后,你应至少在该电脑上直接运行一次构建版本,确保它可以正常运行,然后再继续下一部分。

将Bash设置成Mac默认的Shell脚本语言(4.26及更早版本)

从2021年1月起,苹果将默认的shell脚本语言改为 zsh ,这有时会导致在iOS上启动虚幻引擎版本时产生错误。如果发生这种情况,输出日志将包含类似以下内容的zsh和 rsync 错误:

LogPlayLevel:     zsh:1: no matches found: /Users/[UserName]/UE4/Builds/[DesktopName]/C/Program_Files/Epic_Games/UE_4.26/Engine/Intermediate/IOS/*.plist
LogPlayLevel:     zsh:1: no matches found: /Users/[UserName]/UE4/Builds/[DesktopName]/C/Program_Files/Epic_Games/UE_4.26/Engine/Intermediate/TVOS/*.plist
LogPlayLevel:     zsh:1: no matches found: /Users/[UserName]/UE4/Builds/[DesktopName]/C/Users/[UserName]/Documents/Unreal_Projects/[ProjectName]/Intermediate/IOS/*.plist
LogPlayLevel:     zsh:1: no matches found: /Users/[UserName]/UE4/Builds/[DesktopName]/C/Users/[UserName]/Documents/Unreal_Projects/[ProjectName]/Intermediate/TVOS/*.plist
LogPlayLevel:   [Remote] Executing build
LogPlayLevel:     zsh:1: no matches found: -ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=Disabled
LogPlayLevel:   [Remote] Downloading C:\Users[UserName]\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_4.26[ProjectName]-IOS-Development_Remote.txt
LogPlayLevel:     rsync: link_stat "/Users/[UserName]/UE4/Builds/[DesktopName]/C/Users/[UserName]/AppData/Roaming/Unreal_Engine/AutomationTool/Logs/C+Program+Files+Epic+Games+UE_4.26/[ProjectName]-IOS-Development_Remote.txt" failed: No such file or directory (2)
LogPlayLevel: Error:     rsync error: some files/attrs were not transferred (see previous errors) (code 23) at /home/lapo/packaging/rsync-3.0.4-1/src/rsync-3.0.4/main.c(1506) [receiver=3.0.4]
LogPlayLevel: Error:   ERROR: Unable to download 'C:\Users[UserName]\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_4.26[ProjectName]-IOS-Development_Remote.txt' from the remote Mac (exit code 23).
LogPlayLevel: Took 21.2652808s to run UnrealBuildTool.exe, ExitCode=5
LogPlayLevel: UnrealBuildTool failed. See log for more details. (C:\Users[UserName]\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_4.26[ProjectName]-IOS-Development.txt)
LogPlayLevel: AutomationTool exiting with ExitCode=5 (5)
LogPlayLevel: Completed Launch On Stage: Build Task, Time: 20.779392
LogPlayLevel: BUILD FAILED
PackagingResults: Error: Launch failed! Unknown Error

如果你遇到这个问题,请按照以下步骤将bash设置为你的默认脚本语言:

  1. 打开 Apple菜单 ,然后单击 系统偏好设置

  2. 打开 用户和组

  3. 点击 图标,然后输入账户名和密码。

  4. 按住Control并点击用户列表中的用户名,然后选择 高级选项

  5. 点击 登录shell 下拉菜单,然后将shell设置为`bin/bash`而不是`bin/zsh`。

如果你用这些设置打包并再次启动应用程序,应该会成功启动。

这些步骤适用于虚幻引擎4.26.0及以前的版本。未来的版本将支持zsh。

2.在Mac上启用远程登录

设置好项目后,你需要配置Mac以便支持SSH连接。

  1. 打开Mac的 系统偏好设置(System Preferences) ,然后导航至 共享(Sharing)

  2. 选中 远程登录(Remote Login) 复选框。

  3. 打开系统 偏好设置(Preferences) > 网络(Network)

  4. 注意计算机的 IP地址 。在Windows PC上设置远程连接时将需要此IP地址。

完成这些步骤后,Mac将能够从你的PC接受传入的SSH连接。

3.Windows配置和生成SSH密钥

在Windows计算机上完成以下步骤,以便对其进行远程iOS构建配置。

  1. 虚幻编辑器 中打开项目,然后打开 项目设置(Project Settings)

    在编辑菜单中找到项目设置

  2. 导航至 平台(Platforms) > iOS > 构建(Build)

    The Platforms/iOS section

  3. 远程服务器名称(Remote Server Name) 字段中,输入用于构建项目的Mac名称或其IP地址。

  4. 远程用户名(Remote User Name) 字段中,输入你通常用于登录Mac的用户名。

  5. 点击 生成SSH密钥(Generate SSH Key) 。这将打开命令提示窗口,其中包含一系列将生成SSH密钥的提示。

  6. 如果你收到消息提示主机无法通过身份验证,请在提示中输入" "继续。

  7. 输入属于你在上一分段 远程用户名(Remote User Name) 中指定的用户 密码

  8. 提示将要求你输入 口令(passphrase) 。如果你选择不输入口令,则可以使用远程连接而无需任何用户交互。

  9. 出现提示时,再次输入Mac的 密码 用户名 完成此过程。

现在,你已经生成SSH密钥,你将能够在Windows计算机上启动与Mac的远程连接,以便创建iOS构建版本。

Workaround For Unprotected Private Key

你可能会看到类似下文的错误消息:

错误:无法为远程用户确定主目录。SSH 输出:...警告: 未保护的私钥文件!...0660 (ERROR: Unable to determine home directory for remote user. SSH output:...WARNING: UNPROTECTED PRIVATE KEY FILE!...0660)

如果你没有看到这条错误消息,你可以继续下一步。如果你看到了,请使用以下解决方法:

  1. 找到你的 RemoteToolChainPrivate.key

  2. 右键点击文件并选择 属性(Properties)

  3. 点击 安全(Security) 选项卡。

  4. 点击 编辑(Edit)

  5. 移除所有组或用户名。

  6. 点击 添加(Add)

  7. 点击 对象类型(Object Types) 。确保勾选所有复选框,然后点击 OK

  8. 在文本框中,输入 Users ,然后按下回车。

  9. 确保用户权限设置为 可读(Read) 可读&执行(Read & Execute)

这会更改文件的主组(primary group),以避免其与你的用户名同名——SSH在检查组权限时会因为同名发生混淆。现在操作应该能正常执行了。

SubInACL此前可以用于此用途,并目前微软已经不再提供。

4.可选团队设置

要在将来对其他项目共享此数据,请在计算机上的 *Engine.ini 文件之一中指定远程服务器名称和远程用户名称。

  1. 选择 远程服务器名称(Remote Server Name) 属性旁边的按钮,打开 配置编辑器(Configuration Editor)

    远程服务器名称属性旁边的配置编辑器按钮

  2. 为每个你要共享SSH数据的.ini文件设置属性。

    使用配置编辑器编辑.ini文件

  3. 针对 远程用户名(Remote User Name) 重复这些步骤。

通过共享这些.ini文件,你可以向多个项目或用户提供SSH信息。SSH密钥本身存储在 Engine/Build/SSHKeys 文件夹中。你可以将此目录签入源代码控制系统中,以便与团队共享。

5.最终效果

完成上述步骤后,在Windows计算机上的虚幻编辑器中点击 文件(File) > 打包项目(Package Project) > iOS ,启动远程构建。建立SSH连接,然后将命令发送到Mac,开始构建。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消