作者:gc(at)sysin.org,主页:www.sysin.org

请访问原文链接:https://sysin.org/article/Disable-macOS-Update/,查看最新版。原创作品,转载请保留出处。

随着 macOS Big Sur 11.3 的发布,macOS 11 可靠性和性能已经大幅提升,下一个版本 11.4 笔者考虑直接屏蔽了。等到 11.5,Big Sur 更新的使命基本完成了。是时候屏蔽自动更新了!

提示:

以下步骤不是完全必要,但是全部执行可以确保解决顽固性的更新通知角标出现。

本文针对 macOS Big Sur,更低的版本有限适用。

如果是新安装系统,暂时不要联网,确保完美屏蔽更新。

1. 取消自动更新选项

请选取苹果菜单  > “系统偏好设置”,然后点按 “软件更新”。

取消勾选:“自动保持我的 Mac 最新”

参看:在 Mac 上更改 “软件更新” 偏好设置

2. macOS Big Sur 如何进行自动更新

路径:检测 > 通知 > 下载

  • 检测:进程 /usr/libexec/nsurlsessiond 访问 Apple 相关 URL 检测软件更新;

  • 通知:进程 /System/Library/PrivateFrameworks/SoftwareUpdate.framework/Versions/A/Resources/SoftwareUpdateNotificationManager.app/Contents/MacOS/SoftwareUpdateNotificationManager 负责通知,产生系统更新标记(小红点);

  • 下载:进程 /System/Library/PrivateFrameworks/MobileSoftwareUpdate.framework/Support/softwareupdated 负责下载软件更新。

所以要屏蔽自动更新和更新标记出现,解决方案如下:

检测(屏蔽网络访问) > 通知(取消执行权限) > 下载(屏蔽网络访问)。

3. 屏蔽网络访问

3.1 编辑 hosts 文件,添加如下内容

手动编辑:打开终端,执行命令 sudo vi /etc/hosts,添加以下条目;

127.0.0.1 swscan.apple.com
127.0.0.1 swcdn.apple.com
127.0.0.1 swdist.apple.com

推荐使用 SwitchHosts!(免费软件)。

一般使用该步骤即可发生作用,自动更新已经被屏蔽。

3.2 或者(或同时)使用防火墙软件屏蔽

推荐 Little Snitch,这是一个商业软件

  • 新建规则 1:禁止下载更新相关的数据

    Process Name:/usr/libexec/nsurlsessiond

    Deny Outgoing Connections

    To: Any Server

  • 新建规则 2:禁止 Big Sur 下载进程网络访问

    Process Name:/System/Library/PrivateFrameworks/MobileSoftwareUpdate.framework/Support/softwareupdated

    Deny Outgoing Connections

    To: Any Server

备注:在 macOS Catalina 进程 /System/Library/CoreServices/Software Update.app/Contents/Resources/softwareupdated 负责下载软件更新。

4. 清除系统更新标记(红点 1)

4.1 临时清除系统更新标记

如果已经检测到更新,可以使用如下方法临时去除更新通知标记。

打开 “终端”,执行如下命令:

defaults write com.apple.systempreferences AttentionPrefBundleIDs 0
Killall Dock

4.2 修改权限(一般可以忽略)

在 macOS Big Sur 相对于之前的版本,系统完整性保护进一步增强,无法在“恢复模式”下修改下述文件的权限。操作略嫌复杂,以下步骤仅供参考。

  1. 确保 FileVault 已经禁用(默认禁用),在 ” >> 系统偏好设置... >> 安全性和隐私 >> 文件保险箱” 查看。

  2. 进入恢复模式(启动到 recoveryOS),打开终端执行如下命令:

    参看:关于 macOS 恢复功能:重启电脑,在黑屏的时候按住 command + R 进入恢复模式(可以按住 command + R 不放,直到 apple logo 画面出现)即可进入恢复模式,然后点击菜单栏,“实用工具 >> 终端”。

    csrutil authenticated-root disable
  3. 正常重启到 macOS。

  4. 通过执行 mount 命令查找要挂载的设备(这里定义为 <DISK_PATH> ):

    $ mount
    /dev/disk1s5s1 on / (apfs, sealed, local, read-only, journaled)

    注意:这里的 / 目录的的设备名称显示 /dev/disk1s5s1,那么应该挂载的设备名称是 /dev/disk1s5,s1 表示 “Snapshot 1”(APFS 快照):

  5. 创建一个新目录用于挂载(这里定义为 <MOUNT_PATH> ):

    例如:~/mount

    mkdir -p -m777 ~/mount
  6. 执行挂载:

    sudo mount -o nobrowse -t apfs <DISK_PATH> <MOUNT_PATH>

    例如使用上面的值:

    sudo mount -o nobrowse -t apfs /dev/disk1s5 ~/mount
  7. 在 <MOUNT_PATH> 下修改文件。

    例如:

    cd ~/mount
    sudo chmod 644 System/Library/PrivateFrameworks/SoftwareUpdate.framework/Versions/A/Resources/SoftwareUpdateNotificationManager.app/Contents/MacOS/SoftwareUpdateNotificationManager
  8. 执行 sudo bless --folder <MOUNT_PATH>/System/Library/CoreServices --bootefi --create-snapshot

  9. 重启系统生效。

提示:在 macOS Catalina 中只需要在 recoveryOS 操作即可,步骤如下:

  1. 进入恢复模式(启动到 recoveryOS):

    重启电脑,在黑屏的时候按住 command + R 进入恢复模式(可以按住 command + R 不放,直到 apple logo 画面出现)

    参看:关于 macOS 恢复功能

  2. 打开 “终端”(Utilities (实用工具) -> Terminal(终端)):

    # 切换到系统所在卷,默认名称是 “Macintosh HD”
    cd /Volumes/Macintosh\ HD
    # 如果修改了名称,假如系统卷名称是 Mac
    cd /Volumes/Mac
  3. 取消 SoftwareUpdateNotificationManager 可执行权限(默认权限位是 751):

    检测系统更新时该进程一直在运行,即使屏蔽了网络访问,仍然可能出现通知标记,所以修改它的可执行权限来禁止它运行。

    chmod 644 System/Library/PrivateFrameworks/SoftwareUpdate.framework/Versions/A/Resources/SoftwareUpdateNotificationManager.app/Contents/MacOS/SoftwareUpdateNotificationManager
  4. 退出终端,重启电脑,操作完毕。

5. 如果需要更新

不建议补丁打补丁的方式安装,可以使用完整软件包升级或者全新安装:

  • 下载本站 macOS 镜像,完整安装。

    macOS 下载汇总

    macOS Big Sur

  • 或者取消上述第 3 条的屏蔽,访问 App Store 下载 macOS 完整软件包,下载后会自动保存在“应用程序”下面,直接安装即可。

6. 禁用 App Store 更新

6.1 确保 App Store > 偏好设置... 中取消勾选“自动更新”(默认)

6.2 清除更新标记(数字角标)

如果已经检测到更新,App Store 图标上出现红点数字,打开终端执行如下命令可以清除:

defaults write com.apple.appstored.plist BadgeCount 0
Killall Dock

参考:https://developer.apple.com/documentation/devicemanagement/appstore

6.3 禁用全局 App 更新

编辑 hosts 文件,添加如下内容:

手动编辑:打开终端,执行命令sudo vi /etc/hosts,添加以下条目;

127.0.0.1 gsp64-ssl.ls.apple.com

备注:因网络环境差异,地址可能有所差异,如果无效请反馈。使用防火墙屏蔽进程可以彻底解决该问题。

推荐使用 SwitchHosts!(免费软件)。

或者(或同时)使用防火墙软件屏蔽:

推荐 Little Snitch,这是一个商业软件

  • 新建规则 1:禁止下载更新相关的数据

    Process Name:/usr/libexec/nsurlsessiond

    Deny Outgoing Connections

6.4 禁用单个 App 更新

打开 Finder (访达),浏览到侧边栏 Applications(应用程序),找到不需要更新的 App,点击右键 “显示包内容”,此时出现 Content 文件夹,展开该文件夹,可以看到下面有个 _MASReceipt 文件夹,直接将 _MASReceipt 文件夹删除,即可禁用该 App 自动检测 App Store 软件更新。

如何彻底禁止 macOS Big Sur 自动更新,去除更新标记和通知的更多相关文章

  1. 如何在 Mac 和虚拟机上安装 macOS Big Sur、Monterey 和 Ventura

    请访问原文链接:https://sysin.org/blog/how-to-install-macos/,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 名词解释: 硬件 ...

  2. 如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知

    请访问原文链接:如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 随着 macOS Montere ...

  3. 升级 macOS Big Sur 差点丢了我多年的珍藏文件(夹)!!!

    原来升级 macOS Big Sur 过程中会转移根目录下的个人文件(夹). 春节期间升级了一下 macOS ,升级之前就比较担心丢数据,然而怕什么来什么.升级之后发现根目录下的个人文件(夹)都不见了 ...

  4. macOS Big Sur 11.4 (20F71) 正式版(DMG、ISO、IPSW),百度网盘下载

    本站提供的 macOS Big Sur 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装. 请访问原文链接:https://sy ...

  5. 如何屏蔽 iOS 软件自动更新,去除更新通知和标记

    适用于 iOS.iPadOS 和 watchOS,即 iPhone.iPad 和 Apple Watch 通用. 请访问原文链接:https://sysin.org/article/Disable-i ...

  6. macOS Big Sur 11.3 (20E232) 正式版发布,百度网盘下载

    本站提供的 macOS Big Sur 软件包,即可以直接拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者直接在虚拟机中启动安装. 请访问原文链接:https: ...

  7. grunt配置太复杂?发布一个前端构建工具,简单高效,自动跳过未更新的文件

    做前端项目,如果没有一个自动化构建工具,手动处理那简直就是坑爹O(∩_∩)O.于是上网了解了下,grunt用的人不少,功能也挺强大.看了一下grunt的配置(包括gulp),感觉稍显复杂.当时项目结构 ...

  8. 一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp)

    一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp) 程序员的生活要一切自动化,更要幸福^_^. 转载请注明出处http: ...

  9. 启用“关闭自动根证书更新”,解决Windows系统各种卡顿的问题(Visual studio 卡、远程桌面mstsc卡、SVN卡)

    最近,发现在Win7下面一系列操作都会出现卡顿的情况: 1.  Visual studio 启动调试和关闭调试时,都会卡上半分钟左右 2.  使用远程桌面mstsc.exe,点击连接时,也会卡上半分钟 ...

随机推荐

  1. ForkJoinPool的工作原理和使用

    场景:当任务很多,成千上万个,或者单个任务很大,执行起来很耗时间,这时,就可以把任务进行拆分,拆分成多个小任务去执行,然后小任务执行完毕后再把每个小任务执行的结果合并起来,这样就可以节省时间. For ...

  2. Java JFR 民间指南 - 事件详解 - jdk.ObjectAllocationOutsideTLAB

    重新申请 TLAB 分配对象事件:jdk.ObjectAllocationOutsideTLAB 引入版本:Java 11 相关 ISSUES: JFR: RecordingStream leaks ...

  3. 【MySQL】SQL中On和Where的区别

    数据库再通过链接两张表或者多张表时来返回记录时,都会生成一张中间的临时表,然后再将这张表返回给用户: 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的 ...

  4. hdu3035 最小割转换成最短路

    题意:       给你一个平面图,要求从求出从左上角到右下角的最小割. 思路:       如果大意的可能直接上来一遍最大流,然后就会各种悲剧的MLE,TLE,其实这个题目可以用到有个论文里面的那个 ...

  5. hdu2276 矩阵构造

    题意:      给了n个灯泡的状态,他们绕成一个环,0是灭,1是亮,每一秒灯泡的状态都会改变,规则是如果当前这个灯泡的左边的灯泡当前是状态1,那么下一秒当前的这个灯泡状态就改变0变1,1变0,最后问 ...

  6. JavaScript 的入门学习案例,保证学会!

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Day002 Java特性和优势

    Java特性和优势 简单性(摒弃了c++的指针和内存分配释放) 面向对象(万物皆对象) 可移植性(write once run anywhere) 高性能 分布式 动态性(反射机制) 多线程 安全性 ...

  8. jupyter中那些神奇的第三方拓展魔术命令

    1 简介 无论是jupyter notebook还是jupyter lab,都可以使用ipython中的众多自带魔术命令来实现丰富的辅助功能,诸如%time之类的. 这些都已经是老生常谈的知识没什么好 ...

  9. 三、postman持久化及批量运行

    一.设置环境变量 环境变量的引用为{{变量名}},运行脚本之前切记要在右上角选择对应脚本设置的环境变量后点击保存 二.设置全局变量 三.脚本导入导出及分享 1.导入脚本 2.导出脚本 3.分享脚本 四 ...

  10. 在 Linux 如何优雅的统计程序运行时间?恕我直言,你运行的可能是假 time

    最近在使用 time 命令时,无意间发现了一些隐藏的小秘密和强大功能,今天分享给大家. time 在 Linux 下是比较常用的命令,可以帮助我们方便的计算程序的运行时间,对比采用不同方案时程序的运行 ...