多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

VMware虚拟机安装macOS与Xcode:搭建iOS自动化测试环境全攻略

VMware虚拟机安装macOS与Xcode:搭建iOS自动化测试环境全攻略 1. 项目概述为什么要在虚拟机里折腾Xcode如果你是一名移动端测试工程师或者是一个对iOS自动化测试感兴趣的开发者大概率会遇到一个绕不开的“拦路虎”测试环境。iOS生态的封闭性决定了其开发和测试工具链几乎完全绑定在苹果自家的macOS系统上。这意味着如果你想跑通一个iOS的自动化测试脚本比如用Appium去驱动一台iPhone模拟器或者用XCTest框架编写UI测试你手头必须得有一台Mac电脑。但现实情况是不是每个人、每个团队都能随时配备一台Mac。公司预算有限、个人开发者想低成本学习、或者需要在Windows/Linux服务器上搭建持续集成CI环境这些场景都指向了一个共同的解决方案在非苹果硬件上通过虚拟机VM运行macOS系统并在其中安装Xcode。这听起来像是“曲线救国”但在很多场景下这是唯一可行且性价比极高的路径。我过去几年在搭建和维护多个移动端自动化测试平台时没少和虚拟机里的macOS打交道。从早期的VMware Workstation破解安装到后来在云服务器上部署无头Headless的macOS虚拟机跑CI流水线踩过的坑数不胜数。这个教程的目的就是把这条路上最稳妥、最详细、最“保姆级”的步骤梳理出来让你能一次性成功在VMware虚拟机里装上macOS并顺利部署好Xcode为后续的iOS自动化测试铺平道路。无论你是想本地学习还是为团队搭建测试环境这篇指南都能给你一个清晰的路线图。2. 核心思路与方案选型为什么是VMware macOS在开始动手之前我们得先搞清楚几个关键问题为什么选择这个组合有没有其他方案各自的优劣是什么这能帮你理解每一步操作背后的原因即使后续步骤有变你也能自己调整。2.1 虚拟机软件选型VMware Workstation的压倒性优势在x86架构的Windows或Linux主机上虚拟化macOS主流选择有三个VMware Workstation或Player、VirtualBox、和KVM配合QEMU。对于我们这个“安装Xcode并用于自动化测试”的目标VMware Workstation是毫无疑问的首选。VirtualBox虽然是免费开源的但对macOS的兼容性和性能优化远不如VMware。图形性能尤其孱弱运行macOS的UI会非常卡顿安装Xcode后操作IDE或启动模拟器几乎是噩梦体验。而且其虚拟化驱动Guest Additions对macOS的支持非官方且不稳定容易在系统升级后崩溃。KVM/QEMU方案更偏向极客和服务器环境配置极其复杂需要手动编译补丁内核、配置OVMF固件、处理显卡直通等对新手极不友好。虽然性能潜力大但用于桌面环境并稳定运行Xcode的代价太高。VMware Workstation则在这两者之间取得了最佳平衡相对较好的兼容性通过社区开发的解锁工具Unlocker可以相对稳定地支持安装最新几个版本的macOS。出色的性能与稳定性其虚拟化引擎成熟对CPU和内存的调度效率高图形性能经过优化后足以流畅运行Xcode和iOS模拟器进行自动化测试。完善的工具链VMware Tools对应macOS的安装包能显著提升虚拟机的操作体验如支持文件拖拽、剪贴板共享、屏幕自适应分辨率等这对日常开发和测试至关重要。广泛的社区支持你遇到的大多数问题几乎都能在网上找到相关的讨论和解决方案降低了排查成本。因此本教程将基于VMware Workstation Pro 17或Player的对应版本进行。这是目前公认兼容性最好的版本之一。2.2 macOS版本选择在兼容性与新特性间权衡苹果官方并不允许在非苹果硬件上安装macOS这违反了最终用户许可协议EULA。因此我们谈论的始终是一种“黑苹果Hackintosh”在虚拟机中的实现。版本选择至关重要它直接决定了与VMware解锁工具、Xcode版本的兼容性。黄金法则不求最新但求最稳。避免最新版本刚刚发布的macOS大版本如Sonoma发布初期往往存在各种未知的兼容性问题VMware解锁工具和社区补丁可能还未及时跟上。推荐成熟版本选择比当前最新版低1-2个的成熟版本。例如在撰写本文时macOS Sonoma (14) 是最新版但macOS Ventura (13)或macOS Monterey (12)是更稳妥的选择。它们经过了长时间的市场检验相关的VMware解锁补丁、驱动问题解决方案非常丰富。考虑Xcode需求你需要安装的Xcode版本决定了最低的macOS版本。例如Xcode 15需要macOS Ventura 13.5或更高版本。你可以在苹果开发者官网查看Xcode的版本要求。建议先确定你需要或想用的Xcode版本再反过来决定安装哪个版本的macOS。对于自动化测试我们通常不需要追求最新的Xcode选择一个能稳定支持你项目所需iOS版本测试的Xcode即可。例如Xcode 14.3.1 支持到 iOS 16.4对于很多现有项目已经足够。2.3 硬件资源规划给虚拟机“喂饱”才能跑得快在虚拟机上运行macOS和Xcode是资源密集型任务。分配不足会导致安装失败、系统卡顿、模拟器无法启动。以下是一个针对“流畅运行Xcode并进行基础自动化测试”的推荐配置假设你的宿主机Host Machine是一台现代的中高端PC资源项最低要求推荐配置说明CPU核心数2核4核或以上核心越多编译和模拟器运行越流畅。务必在VMware设置中开启“虚拟化Intel VT-x/EPT或AMD-V/RVI”。内存RAM4 GB8 GB 或以上macOS系统自身需要2-3GBXcode需要2GB以上iOS模拟器至少需要1-2GB。8GB是能用的起点16GB体验会好很多。硬盘空间60 GB100 GB 或以上macOS系统安装约15-20GBXcode安装包约10-15GB解压后占用可达30GB以上。还需为模拟器、项目文件预留空间。强烈建议使用SSD并分配固定大小的虚拟磁盘性能远优于动态分配。显卡集成显卡独立显卡更佳VMware会使用宿主机显卡进行虚拟化加速。拥有独立显卡如NVIDIA GTX/RTX系列或AMD RX系列能显著提升图形性能和模拟器流畅度。重要提示分配资源时务必考虑宿主机的负载。如果你的宿主机只有16GB内存给虚拟机分配8GB后宿主机会变得非常卡顿。需要根据你的宿主机总资源量进行权衡。3. 前期准备镜像、工具与宿主环境万事开头难准备工作做得好安装过程就成功了一半。请严格按照以下清单准备材料。3.1 获取macOS安装镜像ISO/CDR由于版权限制苹果官方不提供可直接用于虚拟机的ISO镜像。我们需要获取由社区制作的安装镜像。这些镜像通常以.iso或.cdr格式提供本质相同。安全警告请务必从可信的、知名的黑苹果社区或资源站获取并检查文件的SHA或MD5校验码以防镜像被篡改植入恶意软件。一个常见的可靠来源是知名黑苹果论坛发布的“恢复版”或“安装版”镜像。例如针对macOS Ventura你可能会找到一个名为Install macOS Ventura.iso的文件大小约12-15GB。关键点确保你下载的镜像版本与你计划安装的版本一致并且其说明中提及了与VMware的兼容性。3.2 下载并安装VMware Workstation前往VMware官网下载VMware Workstation Pro 17或Player版本的安装程序。安装过程是标准的Windows/Linux软件安装流程没有特殊之处。安装完成后暂时不要启动VMware。因为默认情况下VMware的虚拟机创建列表里是没有“Apple Mac OS X”选项的我们需要先对其进行“解锁”。3.3 获取并应用VMware Unlocker工具这是整个流程中最关键的一步。Unlocker工具会修改VMware的二进制文件使其能够识别和支持macOS作为客户机操作系统。下载Unlocker在GitHub上搜索 “VMware Unlocker”寻找由资深开发者维护的版本如来自“DrDonk”的版本。下载其最新发布Release的ZIP包。彻底关闭VMware相关进程在Windows上打开任务管理器结束所有名为vmware-开头的进程。在Linux上使用ps aux | grep vmware查找并kill相关进程。这一步必须做否则修改会失败。以管理员身份运行解压下载的ZIP包找到win-install.cmdWindows或lnx-install.shLinux文件。右键点击选择“以管理员身份运行”。脚本会自动下载必要的补丁文件如darwin.iso这是VMware Tools for macOS并打补丁。验证解锁成功重新启动VMware Workstation。点击“创建新的虚拟机”在“选择客户机操作系统”步骤你应该能在列表里看到“Apple Mac OS X”以及其下的具体版本如macOS 12, macOS 13选项。如果能看到说明解锁成功。实操心得有时运行Unlocker脚本会因网络问题卡住。可以尝试手动编辑脚本将其中的下载链接替换为国内可访问的镜像地址或者直接从其他成功安装的朋友那里拷贝darwin.iso等文件到Unlocker工具目录下再运行脚本。4. 创建并配置macOS虚拟机解锁成功后我们就可以开始创建虚拟机了。这里的每一步配置都影响着后续系统的稳定性和性能。4.1 新建虚拟机与典型配置打开VMware选择“创建新的虚拟机”。选择“典型推荐”点击下一步。安装程序光盘映像文件点击“浏览”选择你之前下载好的Install macOS Ventura.iso文件。VMware此时应该能自动检测到系统类型为“Apple Mac OS X”。选择客户机操作系统手动选择“Apple Mac OS X”版本选择对应的“macOS 13”根据你的镜像版本选择。点击下一步。命名虚拟机并选择位置取一个容易识别的名字如“macOS-Ventura-for-Xcode”。位置务必选择一个剩余空间充足的SSD硬盘分区路径不要有中文或特殊字符。指定磁盘容量如前所述建议设置为100 GB。选择“将虚拟磁盘存储为单个文件”性能更好。不要选择“立即分配所有磁盘空间”除非你确定宿主机空间绝对充足否则这会在创建时立刻占用100GB物理空间。自定义硬件关键步骤在点击“完成”前先点击“自定义硬件”。我们将在这里进行详细调优。4.2 硬件自定义详解点击“自定义硬件”后会弹出硬件设置窗口。内存根据之前的规划设置为8192 MB (8 GB)。如果你的宿主机内存充足如32GB可以分配12GB或16GB。处理器“处理器数量”设置为1。“每个处理器的核心数量”设置为4或根据你的CPU核心数合理分配如6核、8核。总核心数处理器数量×每处理器核心数。对于大多数情况1处理器4核心是平衡点。务必勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI”。这是CPU硬件虚拟化加速对性能至关重要。硬盘 (SCSI)确保类型为SCSI。这是我们之前创建的100GB虚拟磁盘。CD/DVD (SATA)确保设备状态“启动时连接”已勾选并且连接着你的macOS安装ISO文件。网络适配器选择“NAT模式”。这是最省心的模式虚拟机会共享宿主机的IP上网就像一台普通电脑连接在宿主机的路由器上一样方便后续下载Xcode和安装包。USB控制器建议存在方便未来连接真机测试。声卡、打印机移除。对于纯测试环境这些设备用不到移除可以节省一点资源避免潜在的驱动冲突。显示器将“加速3D图形”勾选。将“图形内存”设置为2 GB或以上如果你的宿主机显存充足可以设4GB。这对于运行Xcode和模拟器的流畅度有巨大提升。完成以上设置后点击“关闭”然后点击“完成”。虚拟机创建完毕。4.3 修改虚拟机配置文件.vmx这是解决macOS虚拟机安装和启动过程中各种奇怪问题的“终极手段”。VMware的图形界面并未暴露所有设置我们需要手动编辑虚拟机的配置文件。找到你虚拟机存放的目录即第5步选择的位置里面有一个后缀为.vmx的文件文件名是你的虚拟机名。用记事本Notepad或VS Code更好以管理员身份打开这个.vmx文件。在文件末尾添加或修改以下几行关键参数# 将引导固件设置为UEFI这是现代macOS必须的 firmware efi # 禁用某些可能导致卡住的BIOS功能 bios.bootDelay 5000 hw.model MacBookPro14,3 # 模拟一个特定的Mac型号可以增加兼容性 board-id Mac-551B86E5744E2388 # 与上面型号对应的Board ID # 关键禁用TPM和Secure Boot它们在虚拟机中会导致问题 smc.version 0 tpm.present FALSE secureBoot.present FALSE # 启用性能相关的CPU和内存特性 vhv.enable TRUE cpuid.0.eax 0000:0000:0000:0000:0000:0000:0000:1011 cpuid.0.ebx 0111:0101:0110:1110:0110:0101:0100:0111 cpuid.0.ecx 0110:1100:0110:0101:0111:0100:0110:1110 cpuid.0.edx 0100:1001:0110:0101:0110:1110:0110:1001 cpuid.1.eax 0000:0000:0000:0001:0000:0110:0111:0001 cpuid.1.ebx 0000:0010:0000:0001:0000:1000:0000:0000 cpuid.1.ecx 1000:0010:1001:1000:0010:0010:0000:0011 cpuid.1.edx 0000:0111:1000:1011:1111:1011:1111:1111注意hw.model和board-id的值不是固定的你可以搜索“黑苹果 SMBIOS”找到其他兼容的Mac型号信息进行替换。上面给出的是一组常用的、兼容性较好的值。保存并关闭.vmx文件。5. 安装macOS操作系统配置完成后就可以启动虚拟机进行安装了。这个过程和在一台真Mac上安装类似。启动虚拟机在VMware库中选中你的虚拟机点击“开启此虚拟机”。选择安装语言虚拟机启动后会进入macOS恢复/安装界面。选择简体中文点击继续。磁盘工具分区在“macOS实用工具”窗口中选择“磁盘工具”。在左侧选择你的虚拟磁盘通常显示为VMware Virtual SATA容量约100GB。点击顶部的“抹掉”按钮。名称输入Macintosh HD或其他你喜欢的名字。格式选择APFS这是macOS High Sierra及以后版本推荐的格式性能更好。方案选择GUID 分区图。点击“抹掉”完成后退出磁盘工具。安装macOS回到“macOS实用工具”窗口选择“安装macOS [版本名]”。点击继续同意许可协议。在选择安装磁盘的步骤选择你刚才抹掉并命名的Macintosh HD磁盘。点击“安装”。系统将开始复制文件并安装。这个过程会重启数次请确保虚拟机设置中的CD/DVD仍然连接着ISO文件直到安装程序完全结束进入设置向导。初始设置安装完成后虚拟机会重启进入全新的macOS设置向导国家地区、键盘、Apple ID、创建电脑账户等。Apple ID建议跳过登录Apple ID。在虚拟机环境中登录可能会触发苹果的安全机制带来不必要的麻烦。我们安装Xcode可以通过下载的.xip文件进行。创建电脑账户设置一个管理员用户名和密码务必记住。其他设置如分析、定位等都可以根据个人喜好选择建议先禁用以简化设置。完成设置后你将进入macOS的桌面环境。6. 安装VMware Tools与必要优化进入系统后第一件事不是装Xcode而是安装VMware Tools并做基础优化这能极大提升使用体验。6.1 安装VMware Tools (OpenVM Tools)在真机上这步是自动的。在虚拟机里我们需要手动操作。在VMware菜单栏点击 “虚拟机” - “安装 VMware Tools”。这会在macOS桌面弹出一个虚拟光盘图标名为VMware Tools。双击打开这个光盘你会看到一个.pkg安装包例如Install VMware Tools.pkg。双击运行该安装包按照提示一步步安装即可。需要输入你创建的管理员密码。安装完成后重启虚拟机。重启后你会发现屏幕分辨率可以自适应VMware窗口大小了。鼠标可以在宿主机和虚拟机间无缝移动无需按CtrlAlt释放。剪贴板可以在宿主机和虚拟机间共享。文件拖拽功能可能生效取决于VMware Tools版本。6.2 进行基础系统优化为了让虚拟机更专注于运行Xcode和测试任务我们可以关闭一些不必要的视觉效果和功能。减少动态效果进入“系统设置”-“辅助功能”-“显示”勾选“减弱动态效果”和“减少透明度”。这能节省一些GPU资源。调整节能设置进入“系统设置”-“电池”即使虚拟机没有电池将“显示器关闭”和“电脑进入睡眠”的时间拉到“永不”或尽可能长防止在自动化测试过程中系统休眠。禁用Spotlight索引可选但推荐对于纯测试环境Spotlight索引会持续占用CPU和磁盘I/O。在“系统设置”-“Siri与聚焦”中取消勾选所有“聚焦”类别或者从“隐私”标签页将整个系统盘添加到排除列表。这能显著降低后台资源占用。7. 下载与安装Xcode终于来到核心环节。我们将通过App Store以外的、更可控的方式安装Xcode。7.1 获取Xcode安装包 (.xip)由于我们跳过了Apple ID登录无法直接从App Store下载。我们需要从苹果开发者官网获取独立的Xcode.xip归档文件。在macOS虚拟机的Safari浏览器中访问 Apple Developer Downloads 页面。你可能需要使用你的Apple ID登录可以临时登录一个账户下载完退出。注意此Apple ID无需与系统登录的账户一致。在搜索框中搜索 “Xcode”。找到你需要的版本例如Xcode 14.3.1。务必核对版本号旁边的macOS系统要求确保与你的虚拟机系统版本兼容。点击下载链接获取.xip文件。这是一个经过苹果签名和压缩的归档文件。避坑技巧如果官网下载速度慢可以尝试复制下载链接使用其他下载工具在宿主机上下载后通过共享文件夹传入虚拟机。或者在一些可信的第三方开发资源站也可能找到历史版本的.xip文件哈希校验码确保文件完整性。7.2 安装Xcode下载完成后.xip文件通常位于“下载”文件夹中。双击该.xip文件。系统会自动验证签名并解压最终在同一个文件夹内生成一个名为Xcode.app的应用程序。关键步骤将解压得到的Xcode.app拖拽到“应用程序”文件夹中。这是Xcode的标准安装位置。首次运行打开“应用程序”文件夹找到Xcode.app右键点击并选择“打开”因为来自非App Store首次需要这样操作以绕过Gatekeeper安全限制。在弹出窗口中点击“打开”。Xcode会启动并执行首次安装流程包括安装额外的命令行工具和组件。按照提示操作即可需要同意许可协议。7.3 安装命令行工具Command Line ToolsXcode安装完成后为了后续的自动化测试很多工具依赖命令行编译环境我们必须安装命令行工具。打开“终端”应用程序可以在聚焦搜索中搜索“终端”。在终端中输入以下命令并回车xcode-select --install会弹出一个软件更新窗口提示安装“命令行开发者工具”。点击“安装”同意许可协议等待安装完成。验证安装安装完成后在终端中输入git --version和clang --version如果能正常输出版本信息说明安装成功。8. 配置iOS模拟器与基础测试环境Xcode安装好后我们还需要配置模拟器并验证基础开发/测试环境是否正常。8.1 下载并管理iOS模拟器运行时打开Xcode。进入Xcode - Settings...(或Preferences)。选择Platforms标签页。这里会列出所有可下载的模拟器运行时iOS, iPadOS, watchOS, tvOS等。选择你项目需要测试的iOS版本例如iOS 16.4点击旁边的下载按钮。这会下载对应版本的模拟器系统镜像。注意事项模拟器运行时文件很大每个版本几个GB。请确保你的虚拟机磁盘有足够空间并在网络良好的环境下操作。8.2 创建并启动模拟器在Xcode顶部菜单栏选择Xcode - Open Developer Tool - Simulator。这会启动模拟器应用。首次启动可能会自动创建一个默认的模拟器如iPhone 14。你也可以在模拟器的File - New Simulator...中创建新的模拟器设备选择不同的设备类型和iOS版本。尝试启动一个模拟器。如果能看到iOS主界面并且操作流畅说明图形虚拟化基本成功。8.3 验证Appium/WebDriverAgent环境可选但推荐如果你计划使用Appium进行iOS自动化测试可以提前验证基础环境。在终端中使用Homebrew安装libimobiledevice和ideviceinstaller用于真机通信模拟器也需要部分依赖# 首先安装Homebrew如果未安装 /bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) # 安装依赖 brew install libimobiledevice brew install ideviceinstaller通过Xcode创建一个最简单的iOS项目例如Single View App并尝试在模拟器上运行。确保编译、安装、启动流程无误。9. 常见问题与故障排查实录即使按照教程一步步操作你也可能会遇到一些问题。以下是我在多次部署中积累的常见问题及解决方案。9.1 虚拟机启动阶段问题问题1虚拟机启动时卡在[PCI configuration begin]或苹果Logo进度条不动。原因通常是CPU或内存设置不当或.vmx文件配置有误。排查检查VMware的CPU虚拟化加速选项是否已开启在“处理器”设置中。检查.vmx文件中是否添加了正确的smc.version “0”等参数。尝试减少分配给虚拟机的CPU核心数如从4核改为2核和内存如从8GB改为4GB再启动。尝试更换hw.model和board-id为其他SMBIOS值。问题2安装过程中提示“应用程序副本已损坏”或“安装器资源已过期”。原因系统日期/时间不正确导致苹果证书验证失败。解决在安装界面macOS实用工具打开“终端”从顶部菜单栏实用工具 - 终端输入以下命令将日期调整到该版本macOS发布前后的一个时间date 010101012023.00 # 示例设置为2023年1月1日 01:01:00然后重试安装步骤。9.2 系统安装后问题问题3系统运行极其卡顿鼠标移动不流畅。原因未安装或未成功安装VMware Tools或3D图形加速未开启/显存不足。解决确认VMware Tools已安装并重启。检查虚拟机设置中的“显示器”设置确保“加速3D图形”已勾选且“图形内存”至少2GB。在macOS系统内检查“关于本机 - 显示器”确认分辨率正常且不是“VMware Display”之类的低性能驱动。问题4无法连接网络。原因虚拟机网络适配器配置错误。解决确保虚拟机设置中的网络适配器为“NAT模式”。在macOS系统内检查“系统设置 - 网络”确保以太网或Wi-Fi对应VMware网络适配器显示为“已连接”并已获取IP地址。9.3 Xcode与模拟器问题问题5Xcode启动慢或模拟器启动失败/黑屏。原因资源尤其是内存和显存分配不足。解决关闭所有不必要的应用程序。增加虚拟机的内存和显存分配。如果宿主机资源紧张考虑只启动一个模拟器并选择分辨率较低的设备型号如iPhone SE。问题6在终端执行xcodebuild或git命令提示“command not found”。原因命令行工具未安装或路径未设置。解决运行xcode-select --install安装命令行工具。安装后如果仍提示尝试运行sudo xcode-select -s /Applications/Xcode.app/Contents/Developer来明确指定Xcode路径。问题7Appium连接iOS模拟器超时或失败。原因WebDriverAgentWDA编译或签名问题。解决这是Appium iOS自动化的经典难题。首先确保能用Xcode在模拟器上直接运行一个简单App。然后在Appium的配置中通常需要设置xcodeOrgId和xcodeSigningId。对于模拟器可以使用Xcode自动管理的临时签名。最彻底的方法是在Xcode中打开WebDriverAgent.xcodeproj位于Appium安装目录或通过Carthage安装在Signing Capabilities标签页中为WebDriverAgentRunner和WebDriverAgentLib都选择你的个人开发团队需要Apple ID进行自动签名然后在目标设备模拟器上编译运行一次信任开发者证书。整个流程走下来从准备镜像到成功运行起iOS模拟器顺利的话可能需要3-4个小时遇到问题则可能需要更长时间去排查。但一旦搭建成功你就获得了一个可以随时快照、克隆、迁移的标准化iOS自动化测试环境这对于团队协作和CI/CD集成来说价值巨大。记住虚拟机的精髓在于“快照”在完成一个干净可用的系统安装和Xcode配置后立即创建一个快照命名为“Base with Xcode”。这样以后任何环境玩坏了都可以瞬间回滚到这个干净状态。
返回列表