最近闲的突然想找点事来折腾一下, 于是随着苹果的发布会就盯上自己手上的 iPhone, 也想弄个 Mac 来搞 IOS. 于是就有了这个填坑故事.
为什么要修改补丁源码:
- 不再苦苦去寻找和下载 drawn.iso 文件, 虽然我会告诉你这里可以下载到官网的;
- 遇到个错误, 既然也是搞 python 的, 那自己当然也要动手动手了.
1. 安装前
1. 安装环境
- Windows 10
- VMware Pro 14
2. 系统硬件配置
- 内存推荐 16G 以上
- 硬盘预留 40G 以上
- CPU推荐 i5 8th以上
3. 安装 MacOS 必备包
- VMware Pro 14
填壹号坑: Unlocker 的最新版本 v3.0.2 仅支持 VMware 的 12~14 版本(终端输出的, 本人之前用的是15的, 总是报各种错, 所以就发现了这个坑).
一定要使用 Pro 版本, Player 版本安装的黑苹果不稳定, 经常会自动重启..
- MacOS 系统镜像 (6G左右大小)
- cdr [推荐], 懒人安装包, 因为易装, 麻烦少.
填贰号坑: 试过使用神马HFSExplorer将dmg 转cdr的工具, 结果那工具不行, 老是弹出 error 框. 于是就搜索下载别人发的 cdr包进行安装
- dmg, 原始镜像, 没有试过这个格式的安装, 不了解填这个坑
- ISO, 可以使用 UltraISO 工具将 dmg 格式转为 iso 格式, 然后进行安装, 但是中途遇到了 boot 问题, 于是换用cdr 进行安装
- MacOS Unlocker for VMware, 简称 Unlocker
能够让 VMware 选择 Mac 系统进行安装的补丁
windows 选择第一个 unlocker302.zip 进行下载即可
2. 安装
1. 安装 VMware Pro 14, 并注册
此处网络上教程挺多, 安装也不复杂, 过程很顺利
注册看个人了, 惯用方式是网上搜索密钥进行注册, 密钥如:
ZC5XK-A6E0M-080XQ-04ZZG-YF08D
;ZY5H0-D3Y8K-M89EZ-AYPEG-MYUA8
.
2. 安装 Unlocker
- 使用超级管理员运行 cmd.
在任务栏的搜索框中, 搜索 cmd, 然后右击使用管理员运行 cmd
解压已经下载的 unlocker, 并在 刚才打开的终端中 cd 到目录下
执行 win-install.cmd
- 终端报错了
看到终端有 Successfully, Finished 等词, 先不要高兴太早, 因为那整句话是否定的.
报错内容有:
***.***
文件权限问题哪一个文件的权限出了问题, 就找到它并给它添加权限就可以了.
操作步骤: 右击选择属性 --> 选择安全选项卡 --> 点击编辑 --> 选择 Everyone (组或用户名) --> 允许完全控制.
没有找到
drawn*.*
文件看了一下终端是访问了
http://***
链接之后才报的错误, 认为是访问超时了结果重试了几次都不行, 然后打开浏览器进行访问该链接, 结果浏览器返回 not found. 一脸懵逼, 简直坑爹啊填叁号坑: 解决办法 - 修改源码后重新编译打包exe
修改文件: gettools.py, 修改后的完整代码放在最后, 有中文注释.
思路: 访问问题, 那就修改访问的链接; 由于VMware 服务器识别 UA, 所以伪装 UA.
打包exe: 需要 python3.x 环境, 依赖包: requests, PyInstaller; 打包命令pyinstaller -F gettools.py
替换 gettools.exe 文件: 打包 exe 后, 会生成 dist 文件夹, 找到里面的 exe 文件, 替换 unlocker 文件夹中的 gettools.exe 文件补充: 安装依赖包的命令:
pip3 install requests
;pip3 install PyInstaller
; 打包exe 前, 需要打开终端并切换目录到 gettools.py 文件所在目录下.
3. 安装 mac
- 运行 VMware 并创建新的虚拟机
- CD/DVD 处选择 cdr 文件, 然后启动虚拟系统
- 安装虚拟系统过程中出现的问题
- 虚拟系统启动, 虚拟机报错问题:
打开
***.vmx
文本文件, 添加smc.version = "0"
配置项
- 安装盘问题:
选择菜单栏上的实用工具 --> 然后选择 VMware 硬盘 --> 点击抹掉按钮 --> 输入一个英文名称即可
- 安装 VMTools
关机mac, 在 CD/DVD 处选择 VMware Pro 安装目录下的 darwn.iso (Unlocker 生成的文件), 我的安装目录是
C:Program Files (x86)VMwareVMware Workstation
开机, 打开桌面上的光盘进行安装, 所以 drawn.iso 是用来安装 VMTools 插件的.
4. 屏幕大小, 分辨率问题
在VMware里装 VMTools 后发现全屏时的分辨率是 950 (HiDPI) 的, 在设置/显示器/缩放中, 点击1920 的死活切换不了
打开终端依次输入以下命令:
cd /Library/Preferences
, 切换目录.plutil -p com.apple.windowserver.plist
查看现在的plist设置, 值应该是 1.sudo plutil -replace DisplayResolutionEnabled -bool "NO" com.apple.windowserver.plist
修改plist 设置为 0.重启生效.
gettools.py
from __future__ import print_function
import os
import shutil
import sys
import tarfile
import zipfile
# 添加处, 方便伪装 User-Agent
import requests
# 添加处
def download_drawn(url, path):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
}
resp = requests.get(url, headers=headers, timeout=180)
with open(path, "wb") as fp:
fp.write(resp.content)
def convertpath(path):
# OS path separator replacement funciton
return path.replace(os.path.sep, '\') # 修改处
def main():
# Check minimal Python version is 2.7
if sys.version_info < (2, 7):
sys.stderr.write('You need Python 2.7 or latern')
sys.exit(1)
# Setup url and file paths
url = 'http://softwareupdate.vmware.com/cds/vmw-desktop/fusion/'
dest = os.path.dirname(os.path.abspath(__file__))
# Re-create the tools folder
shutil.rmtree(dest '/tools', True)
os.mkdir(dest '/tools')
# 删改处
urlpost15 = url '11.1.0/13668589' '/packages/com.vmware.fusion.tools.darwin.zip.tar'
urlpre15 = url '11.1.0/13668589' '/packages/com.vmware.fusion.tools.darwinPre15.zip.tar'
# Download the darwin.iso tgz file
print('Retrieving Darwin tools from: ' urlpost15)
# 修改处
download_drawn(urlpost15, convertpath(dest '/tools/com.vmware.fusion.tools.darwin.zip.tar'))
# Extract the tar to zip
tar = tarfile.open(convertpath(dest '/tools/com.vmware.fusion.tools.darwin.zip.tar'), 'r')
tar.extract('com.vmware.fusion.tools.darwin.zip', path=convertpath(dest '/tools/'))
tar.close()
# Extract the iso and sig files from zip
cdszip = zipfile.ZipFile(convertpath(dest '/tools/com.vmware.fusion.tools.darwin.zip'), 'r')
cdszip.extract('payload/darwin.iso', path=convertpath(dest '/tools/'))
cdszip.extract('payload/darwin.iso.sig', path=convertpath(dest '/tools/'))
cdszip.close()
# Move the iso and sig files to tools folder
shutil.move(convertpath(dest '/tools/payload/darwin.iso'), convertpath(dest '/tools/darwin.iso'))
shutil.move(convertpath(dest '/tools/payload/darwin.iso.sig'), convertpath(dest '/tools/darwin.iso.sig'))
# Cleanup working files and folders
shutil.rmtree(convertpath(dest '/tools/payload'), True)
os.remove(convertpath(dest '/tools/com.vmware.fusion.tools.darwin.zip.tar'))
os.remove(convertpath(dest '/tools/com.vmware.fusion.tools.darwin.zip'))
# Download the darwinPre15.iso tgz file
print('Retrieving DarwinPre15 tools from: ' urlpre15)
# 修改处
download_drawn(urlpre15, convertpath(dest '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'))
# Extract the tar to zip
tar = tarfile.open(convertpath(dest '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'), 'r')
tar.extract('com.vmware.fusion.tools.darwinPre15.zip', path=convertpath(dest '/tools/'))
tar.close()
# Extract the iso and sig files from zip
cdszip = zipfile.ZipFile(convertpath(dest '/tools/com.vmware.fusion.tools.darwinPre15.zip'), 'r')
cdszip.extract('payload/darwinPre15.iso', path=convertpath(dest '/tools/'))
cdszip.extract('payload/darwinPre15.iso.sig', path=convertpath(dest '/tools/'))
cdszip.close()
# Move the iso and sig files to tools folder
shutil.move(convertpath(dest '/tools/payload/darwinPre15.iso'), convertpath(dest '/tools/darwinPre15.iso'))
shutil.move(convertpath(dest '/tools/payload/darwinPre15.iso.sig'), convertpath(dest '/tools/darwinPre15.iso.sig'))
# Cleanup working files and folders
shutil.rmtree(convertpath(dest '/tools/payload'), True)
os.remove(convertpath(dest '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'))
os.remove(convertpath(dest '/tools/com.vmware.fusion.tools.darwinPre15.zip'))
if __name__ == '__main__':
main()