Marco Nie - macOS
https://blog.niekun.net/category/macos/
将路径加入系统 path
https://blog.niekun.net/archives/path.html
2024-08-10T11:06:00+08:00将路径加入系统 path 可以方便的在终端调用目录中的可执行文件或脚本。windows 和 macOS 设置方法不同,下面分别介绍。windows参考之前的文章:https://blog.niekun.net/archives/413.htmlmacos确定您的 shell 类型。打开终端,运行以下命令:echo $SHELL
这通常会返回 /bin/zsh 或 /bin/bash。根据您的 shell 类型,编辑相应的配置文件:对于 Zsh(最新的 macOS 默认使用):编辑 ~/.zshrc对于 Bash:编辑 ~/.bash_profile 或 ~/.bashrc使用文本编辑器打开相应的文件。例如,对于 zsh:vim ~/.zshrc
在文件末尾添加以下行(替换为您的实际脚本目录路径):export PATH="/path/script:$PATH"
保存并关闭文件。使更改生效,可以重新加载配置文件或重启终端。要重新加载,运行:source ~/.zshrc # 如果使用 Zsh
source ~/.bash_profile # 如果使用 Bash
验证 PATH 更新:echo $PATH
您应该能看到您的脚本目录已被添加。现在,您应该能够直接运行脚本,而不需要指定完整路径:test.sh
注意事项:确保您的脚本有正确的执行权限(chmod +x script_name.sh)。如果脚本名称与系统命令冲突,考虑重命名脚本或使用唯一前缀macOS 下使用 automator 给视频文件添加快捷压缩动作
https://blog.niekun.net/archives/macOS-automator.html
2024-08-01T14:42:36+08:00最近学习到了一条可以大幅度压缩视频体积且观感上视频质量没有很大损失的 ffmpeg 命令:ffmpeg -i input.mov -c:v libx264 -crf 30 -r 24 -movflags faststart -c:a aac -b:a 128k -preset superfast out.mp4
但是每次在命令行执行这么复杂的命令还是很不方便的,可以使用 macOS 自带的 automator 自动化工具制作一个简单的右键菜单动作,方便的对视频文件快速压缩。打开 automator 新建一个 quick action,添加一个 run sheel script:脚本内容如下:for f in "$@"
do
/opt/homebrew/bin/ffmpeg -i "$f" -c:v libx264 -crf 30 -r 24 -movflags faststart -c:a aac -b:a 128k -preset superfast "${f%.*}_compressed.mp4"
done
# 播放声音
afplay /System/Library/Sounds/Blow.aiff
# 显示对话框
osascript -e 'tell app "System Events" to display dialog "视频压缩已完成" with title "通知" buttons {"OK"} default button "OK"'保存后,在视频文件右键菜单的 action 栏就可以看到我们添加的动作了:点击执行动作,完成后会有提示信息。Windows 下虚拟机安装 MacOS
https://blog.niekun.net/archives/2860.html
2023-11-03T09:08:00+08:00经过测试,我的电脑安装好后可以启动,但是每次输入管理员口令就会四国。可能和我的电脑 cpu 不能完美支持 macos 内核有关,下面介绍安装方法。工具:vmware workstationunlockermacos Monterey iso image环境准备首先需要主板支持虚拟化 VT,需要在 bios 中打开对应选项。注意此项必须配置,否则安装会不成功。VMware workstation 默认不支持安装 macos,需要使用第三方工具 unlocker 来开启支持,直接在上方提供的 github 主页下载最新版本即可,运行 windows 文件夹下的 unlock.exe 即可。然后下载 macos iso 镜像文件,在我上面提供的网站中下载即可。配置虚拟机按照正常的新建虚拟机的方式新建,添加下载好的系统镜像用来安装,配置好确认后先不要启动虚拟机,先修改对应虚拟机文件夹下的 vmx 文件。文本编辑器打开 vmx 文件后,在最后一行添加一句:smc.version = 0
保存后即可启动虚拟机,进入 recovery 工具后,先格式化硬盘,然后安装系统,提示一步步安装即可。参考链接How To Install macOS Monterey On Vmware On Windows PcWindows用VM虚拟机安装MacOS Ventura 13.6系统全流程教程安装内核插件修复第三方 SSD 导致 MacBook 待机耗电大问题
https://blog.niekun.net/archives/2727.html
2022-06-26T13:05:33+08:00前几年给我的 MacBook Pro 2015 升级了 512G SSD 硬盘,什么都挺好就是合盖待机耗电量很大,一晚上基本就跑了 20% 电量,之前也研究过解决方法,还写过几篇博客:使用 OpenCore Legacy Patcher 为 2015 款 MacBook Pro 激活 AirPlay,macOS 电源管理修复 MacBook 休眠耗电大问题,但是最后都发现问题依旧。今天在国外苹果论坛上看到有人介绍通过安装一些内核插件降低待机时候 ssd 的功率从而解决耗电问题https://discussions.apple.com/thread/252167491:1) Get the newest firmware, where power management is already better and/or some sleep/wake issues are resolveda) Either by upgrading to Big Sur (or in Catalina, Mojave the latest security updates) with your original SSD insideORb) Upgrading Boot ROM Version without upgrading to Big Sur2) Install tools which significantly lower the idle wattage for 3rd party SSDsa) SsdPmEnablerb) NVMeFix plugin inside liluc) a+b combined reach an even lower wattage in most cases主要是第二条介绍的几个内核插件,SsdPmEnabler, lilu, NVMeFix都是在 GitHub 上的开源软件,三个都是提供 .kext 文件,需要将 .kext 文件复制到系统路径 /Library/Extensions,重启系统即可。后续我会测试是否有效。macOS 中给 finder 添加右键打开 vs code 选项
https://blog.niekun.net/archives/2403.html
2022-01-27T22:00:00+08:00macOS 中的右键菜单没有像 windows 那样多样的选项,我最常用的是:用 vs code 打开文件夹,新建文本文件等。目前有第三方的软件可以添加这些功能,比如 irightmouse,但基本都是收费软件,下面介绍如何通过系统自带的 automator 来添加我们需要的功能。vs code 菜单首先我们创建一个 Open in Visual Studio Code 的 action。打开 Automator,点击 file - new 创建一个 quick action:首先修改右边的参数,workflow receives current files or folders in finder,下面的 image 根据个人喜好修改:然后左侧搜索 run shell script 双击添加到右侧,修改 pass input:as arguments,然后脚本内容如下:for f in "$@"
do
open -a 'Visual Studio Code' "$f"
done保存脚本即可,命名为 Open in Visual Studio Code,需要保存到当前用户目录下的 library/services 目录下(默认就会保存到这个目录):然后在 finder 中测试,选中一个文件夹查看右键菜单,在 quick action 中会出现 Open in Visual Studio Code:点击后即可在 vs code 中打开文件或文件夹。copy path 菜单下面我们用同样的方法做一个复制文件或文件夹路径的 action。新建一个 quick action,修改右边的参数,workflow receives current files or folders in finder。然后添加一个 copy to clipboard 的 variable 即可:命名为 Copy Path 并保存即可。此时 finder 中 quick action 菜单中就会有了对应的选项:create new txt file 菜单macOS 中没有右键创建新文件的选项,想要在当前目录中创建一个新文件挺麻烦的,下面我们通过类似的方法来创建一个快捷选项。新建一个 quick action,这里 receives 选择 no input:然后搜索并添加一个 Run AppleScript 变量,修改脚本内容如下:set file_name to "untitled"
set file_ext to ".txt"
set is_desktop to false
-- get folder path and if we are in desktop (no folder opened)
try
tell application "Finder"
set this_folder to (folder of the front Finder window) as alias
end tell
on error
-- no open folder windows
set this_folder to path to desktop folder as alias
set is_desktop to true
end try
-- get the new file name (do not override an already existing file)
tell application "System Events"
set file_list to get the name of every disk item of this_folder
end tell
set new_file to file_name & file_ext
set x to 1
repeat
if new_file is in file_list then
set new_file to file_name & " " & x & file_ext
set x to x + 1
else
exit repeat
end if
end repeat
-- create and select the new file
tell application "Finder"
activate
set the_file to make new file at folder this_folder with properties {name:new_file}
if is_desktop is false then
reveal the_file
else
select window of desktop
set selection to the_file
delay 0.1
end if
end tell
-- press enter (rename)
tell application "System Events"
tell process "Finder"
keystroke return
end tell
end tell脚本中,定义了新建文件的文件名和扩展名,如果修改其他名称可以自行修改。完成后保存即可,名称为 Create New TXT File。保存后在 finder 中我们在任意位置右键会发现没有 quick action 选项,这是因为这个 action 定义中并没有选择输入源,因为新建文件和当前的文件并没有什么关系。此时需要通过左上角的 finder - services 找到我们刚创建的 action:也可以给这个 action 定义快捷键,在 keyboard - shrotcuts - services 中找到这个 action 在后边添加 shortcut 即可:注意第一次运行这个 action 会提示需要授权 finder 的几个权限,根据提示打开即可。参考链接Create a new (.txt) File in Finder - Keyboard ShortcutOSX: how to add a right click option to a folder which opens the folder with an app like VS Code?升级 Xcode 后 QT 编译报错 No rule to make target 解决方法
https://blog.niekun.net/archives/2375.html
2021-12-19T13:12:00+08:00最近升级了 macOS Monterey 同时更新了 Xcode 到最新版,编译 QT 项目的时候发现报错了:No rule to make target 'xxx', needed by 'xxx'. Stop.解决方法就是删除项目编译输出文件夹内的隐藏文件 .qmake.stash,删除文件后运行 build - clean, build - run qmake 重新生成此文件,最后再次重新编译即可。使用 OpenCore Legacy Patcher 为 2015 款 MacBook Pro 激活 AirPlay
https://blog.niekun.net/archives/2353.html
2021-11-26T20:31:00+08:00最新的 macOS 13 已经不支持 2015 款 MacBook Pro 了,通过此 patcher 可以顺利升级。步骤如下:插入一个大一些的优盘作为系统升级盘,disk 工具格式化为 apfs日志式 + 分区表 guidopencore 中选择 create macos installer - download macos installer 在线一键下载最新版本系统镜像下载好后按照提示写入到 u 盘中选择 build and install opencore 写入到 u 盘分区中重启选择 u 盘的 opencore 引导进入 recover 后选择 install macos,会保留系统数据更新到新版系统升级完成后进入系统,等一会儿回提示检测到 opencore 引导在 u 盘上,是否写入到硬盘,选择是,根据提示选择系统硬盘分区安装 opencore 即可,拔下 u 盘settings 里可以取消选择 show boot picker今年发布的 macOS Monterey 增加了很多新功能,其中一个就是可以通过 AirPlay 将手机屏幕投放到 Mac 上。这个功能挺有意思的,但是当我把我的 MacBook Pro 升级系统后,发现无法使用这个功能,经过查询后发现这些新功能只对较新款的设备开放,这就有点让人吐槽了。但是不放弃的我开始查询是否有大神给不支持的设备添加上这些功能,果然被我找到了,而且是一个挺有名的项目:OpenCore Legacy Patcher。OpenCore Legacy Patcher 是一个旨在帮助不被苹果官方支持的老版本 Mac 升级到最新系统及特殊功能的项目。为这些老设备提供接近于原生的体验。GitHub 地址:https://github.com/dortania/OpenCore-Legacy-Patcher/我的是 2015 款 MacBook Pro,系统是支持直接升级到 Monterey 的,就是缺失了一些新功能,也可以使用这个工具来解锁这些限制。下载安装在 release 页面下载最新版,下载 TUI 即可也就是 terminal 版:https://github.com/dortania/OpenCore-Legacy-Patcher/releases下载解压后拖放到 application 文件夹即可完成安装。配置注意在操作前最好做一次 Time Machine 备份系统,以免操作失败后数据丢失。打开OpenCore-Patcher 进入配置界面:上面提示此设备并不在这个 patcher 列表中,因为它依然可以收到苹果官方的系统支持。但我们依然想利用这个 patcher 来解锁一些功能,所以首先我们需要允许 opencore 运行在此设备上。选择 4. patcher settings 回车:选择 8. allow opencore on native models 回车后输入 y 确认,修改后 8 选项变为 currently true:输入 q 返回主菜单,可以看到显示当前设备已被支持:如果你的设备本来就已经进入了 opencore 的支持列表,不需要 选中 native models。下一步设置 opencore 的默认启动模式,默认情况下安装 opencore 后每次启动系统会自动跳入引导选择界面,用来选择正常启动还是通过 pathcer 启动。但是这样比较麻烦,一般情况下配置好后,我们希望自动进入 patcher 后的系统,所以我们将自动跳入引导选择界面功能关闭,这样后续依然可以通过启动时按住 option 键来进入引导选择。主界面选择 5. patcher settings,然后选择 5. miscellaneous settings:选择 1. set showpicker mode:上面会提示此选项的含义,这里输入 n 关闭此功能:输入 q 回到主界面。下面我们需要将上面的配置的结果 bulid 到系统临时路径中,选择 1. bulid opencore,完成 build 后输入 enter 返回:最后,就需要将刚才 build 的数据写入到 usb 或内部存储器中。如果写入到 usb 中,如果需要系统加载那些隐藏功能,就需要插入写好数据的 usb 然后启动系统时按住 option 选择 opencore 引导系统。如果写入系统内部存储器,就无须外部设备了,可以做到正常启动自动加载 patcher。这里介绍直接安装到设备内部存储器。主界面选择 2. install opencore to usb/internal drive:输入 0 选择内部存储器:在此输入 0 选择 EFI 分区:确认后 opencore 就写入系统中。等待完成写入后手动重启系统,启动时按住 option 键进入引导选择界面:这里默认是选中系统默认引导的,如果需要后续每次启动都自动进入 opencore boot 引导的话,使用方向键选择到 opencore 图标的 boot 项,然后按住 control 键,此时引导下面会出现一个圆圈,鼠标点击此圆圈代表设置此选项为默认引导项:选择 opencore boot 进入系统后,打开 system preference - sharing:可以看到菜单中多了一个 AirPlay receiver,表明 AirPlay 功能已经成功启动,此时就可以测试手机的 screen mirror 能否监测到 Mac 了。后续 OpenCore-Legacy-Patcher 如果有更新了,下载安装最新的 app 后再次通过以上同样的方法来更新补丁即可。查看版本通过命令可以查看当前安装的 opencore 和 opencore legacy patcher 的版本。opencore 版本信息:% nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version
4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version REL-073-2021-09-06返回的 REL-073-2021-09-06 表示 opencore 0.7.3 版,编译于 2021.09.06opencore legacy patcher 版本信息:% nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:OCLP-Version
4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:OCLP-Version 0.3.1%00返回值表示当前版本为 0.3.1卸载如果通过 USB 加载 opencore 那么只需要拔出 usb 即可删除 opencore。如果安装到内部存储器中,卸载稍微麻烦些,具体参考:Uninstalling OpenCore启动模式选择开机按住 option 键进入 boot 引导选择界面,可以选择系统默认引导或者 opencore 引导按住 ctrl 键可以设置默认引导进入 opencore 引导后按住 spacebar 空格键可以显示 recovery 恢复系统引导选项进入 opencore 引导后选到进入系统的选项然后按住 shift + enter 可以进入系统安全模式参考链接Airplay BLOCKED on Monterey? How to unlock it!OpenCore Legacy PatcherHow to Boot Recovery through OpenCore Legacy PatcherBlack Screen on MacBookPro11,3 in macOS Monterey配置外部网络存储器作为 Time Machine 备份
https://blog.niekun.net/archives/2305.html
2021-04-30T08:59:00+08:00最近搬进新家,配置好了局域网环境并使用海康 h99 作为存储中心共享资源给各个设备使用。它支持 smb 和 afp 协议共享文件,通常情况下 smb 就足够了。之前我的 MacBook 是通过 usb 直接连接外部硬盘来进行 Time Machine 的,需要将硬盘格式化为 macOS 扩展格式。既然有了网络存储中心,那么为什么不将 Time Machine 也放在网络驱动器上呢?研究了下果然有解决方案的,基本原理就是通过在网络驱动器上创建一个 macOS 格式的虚拟磁盘,然后再 MacBook 上挂载这个虚拟磁盘就可以正常进行备份及还原了。创建虚拟磁盘打开 MacBook 的 disk 应用,菜单选择:文件 - 新建镜像 - 空白镜像:设置镜像合适大小,也就是虚拟磁盘的空间,我这里配置 1TB,注意磁盘格式为 macOS 扩展,镜像格式为稀疏磁盘镜像:点击 存储 就生成了磁盘镜像文件了,默认会自动挂载这个镜像,我们手动将其推出。也可以通过命令行的方式直接生成镜像文件:hdiutil create -size 1024g -type SPARSEBUNDLE -fs "HFS+J" TimeMachine.sparsebundle
现在可以建立 APFS 格式的镜像:-fs 'APFS'这里不需要担心 MacBook 上没有 1TB 这么大的空间,因为空白镜像只有 400MB 左右。配置 Time Machine镜像生成好后,我们需要将其移动到网络驱动器中,可以通过 finder 通过 smb 的方式连接网络驱动器,然后移动 TimeMachine.sparsebundle 文件到合适的目录。然后我们在 finder 中双击网络驱动器中的 TimeMachine.sparsebundle 会自动 mount 虚拟镜像。此时在 finder 中我们就可以看到挂载的 TimeMachine 磁盘了。然后我们就可以设置 TimeMachine 绑定到这个磁盘:sudo tmutil setdestination /Volumes/TimeMachine
注意磁盘路径需要根据你自己实际定义的虚拟磁盘名称来处理。此时我们打开 TimeMachine 就可以看到已经绑定到我们的网络驱动器上的虚拟磁盘了:我测试了下它的传输速度在千兆内网下能达到 50MB/s 左右,不是太快但基本能用。备份与还原备份的时候和直接连接 usb 没有什么区别,注意在重启系统后需要手动挂载下虚拟磁盘才可以正常备份。我实际测试过开机 cmd + R 进入恢复模式后,在 TimeMachine 中能够正常识别到虚拟磁盘并进行系统还原。经过查询在 10.13.4 之后版本进入 recovery 可以直接选择连接到网络驱动器上,理论上可以在 UI 界面上直接选择连接到对应驱动器上,我之前测试中也是可以在 TimeMachine 列表中看到网络备份的。但是最近升级到 macos 14 后的一次系统故障需要恢复备份的时候发现,不能再 recovery 中找到网络备份,看来还是有一定限制的,此时需要手动在 terminal 中挂载上我们的备份镜像。有几个前提条件:recovery 的版本必须高于 timemachine 备份系统版本必须先 mount 镜像文件所在的根路径,然后 hdid 镜像文件,否则会看不到备份信息挂载流程:开机按 cmd + R 进入 recovery点击顶部 Utilities 打开 terminal执行 cd /Volumes新建文件夹 mkdir TimeMachine进入文件夹 cd TimeMachine挂载备份镜像所在的网络驱动器目录 mount -t smbfs smb://username:password@ServerIPAddress/path/to/imagehomefolder /Volumes/TimeMachine 注意必须直接挂载到备份镜像文件所在目录挂载备份镜像 hdid /Volumes/TimeMachine/NameOfYourSparseBundle.sparsebundle退出 terminal exit进入 Restore From Time Machine Backup,此时应该就可以看到挂载好的 TimeMachine 备份驱动器了自动挂载如果需要实现系统启动后自动挂载网络驱动器上的虚拟镜像,可以通过 apple script 的方式实现,脚本如下:try
mount volume "smb://xxx.xxx.xxx.xxx/"
end try
do shell script "hdiutil attach -mountpoint /Volumes/TimeMachine/ /Volumes/网络驱动器名/PATH/TO/TimeMachine.sparsebundle"脚本另存为 application 格式并 system preference 中加入开机自启动项即可。参考链接添加Mac的Time Machine备份到smb网络硬盘(windows 共享文件夹)自建Mac TimeMachine局域网无线备份环境How to restore system from network drive升级 command line tool 后 QT 编译 boost 库报错问题
https://blog.niekun.net/archives/2198.html
2021-03-03T21:03:37+08:00今天打开一个 QT 项目后进行编译发现报错了,查看了下什么都没有修改就比较奇怪了。根据日志是 boost 库出了问题,报错为:Undefined symbols for architecture x86_64,但是 boost 库是以前编译好的从来没动过。回想起来前几天重新安装了下 command line tool 会不会有关系。看了下 QT kit 配置里面发现 clang 的设置居然有叹号。重新识别了下系统编译器:然后重建下项目配置:重新编译项目依然有报错。最后就是 boost 库的确有问题了。于是我重新编译了一次。居然问题就解决了。原来真的是由于系统的 Clang 更新后原来编译的 boost 库不兼容了,在此使用当前系统的 Clang 编译一次就行了。boost 库编译方法参考:https://blog.niekun.net/archives/1174.html修复 parallels desktop 16 网络无法连接问题
https://blog.niekun.net/archives/2040.html
2021-01-03T22:40:00+08:00随着升级到 macOS Big Sur 后,虚拟机 parallels desktop 也更新到了 16 版本。我当然是继续安装破解版啦。但是安装好后,启动虚拟机会有一个报错:Network Initialization Failed,启动后会发现虚拟机无法联网,网络设置中无法正常在各种模式中切换。在寻找解决方案期间,了解到了这可能是由于破解的原因,正版用户没有这个问题。网上有人提供了一个方法,执行一条命令就启动虚拟机就可以正常联网了。但是会导致虚拟机无法访问主机的共享目录及无法访问 USB 设备。而且一旦重启 parallels desktop 后又回恢复之前的状态,我也就没有去做。这两天看到网上终于有人找到的解决方法,测试后的确可用,所以介绍给大家参考。解决的方法都是通过修改相关配置文件实现的。首先需要彻底退出 parallels desktop。网络问题修改 /Library/Preferences/Parallels/network.desktop.xml 文件。在终端或者 vs code 中打开这个文件,找到 <UseKextless> 标签,将其中的内容改为 0:<UseKextless>0</UseKextless>
注意如果你的这个文件内没有这个标签,则需要在 <ParallelsNetworkConfig> 根标签内手动创建它即可。修改完成后保存文件,需要输入账户密码。USB 问题修改 /Library/Preferences/Parallels/dispatcher.desktop.xml 文件。在终端或者 vs code 中打开这个文件,找到 <Usb> 标签,将其中的内容改为 1:<Usb>1</Usb>
修改完成后保存文件,需要输入账户密码。修改完以上两个文件后,重启 parallels desktop 就会发现一切都正常了。