作者: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. 【Azure Developer】调用SDK的runPowerShellScript方法,在Azure VM中执行PowerShell脚本示例

    当需要通过代码的方式执行PowerShell脚本时,可以参考以下的示例. Azure SDK中提供了两个方法来执行PowerShell脚本 (SDK Source Code: https://gith ...

  2. Day12_59_Java多线程

    多线程 1. 什么是进程? * 每个进程是一个应用程序,都有独立的内存空间,一个进程对应一个应用程序. * 例如:在windows操作系统中启动了word就是启动了一个进程,一边听音乐,一边打游戏就是 ...

  3. ORM 创新解放劳动力 -SqlSugar 新功能介绍

    介绍 SqlSugar是一款 老牌 .NET 开源ORM框架,由果糖大数据科技团队维护和更新 ,Github star数仅次于EF 和 Dapper 优点: 简单易用.功能齐全.高性能.轻量级.服务齐 ...

  4. jmeter响应时间与postman响应时间为什么不一样?

    postman响应时间 是一个线程或者一个用户再者说是发送一次请求的响应时间,一般都是200ms一下: 而jmeter属于并行,就是多个用户去访问这个功能点或者接口,多个用户同时访问,就会造成压力,自 ...

  5. 去css 冗余方法

    1.float在某种意义上而言与display:inline-block属性的作用是一模一样的, 所以类似于display:block; float:left; 就是说.float:left 可以让行 ...

  6. jq 获取表单全部数据

    jQuery Ajax 操作函数: serialize(): 将表单内容序列化为字符串 serializeArray():序列化表单元素,返回JASON数据 语法: $(selector).seria ...

  7. hdu4685 最大匹配可能性

    题意:       给你n个王子和m个公主,每个王子可以和自己喜欢的公主结婚,问你在不影响最大匹配的前提下每个王子都可以去哪些公主. 思路:       所有王子向他喜欢的公主连一条边,然后匹配一遍, ...

  8. UVA11375火柴(递推+大数)

    题意:       给你n根火柴,问你能组成多少种数字,比如3根可以组成1或者7,组成的数字中不能有前导0, 思路:       我们开一个数组,d[i]记录用i跟火柴可以组成多少种数字,则更新状态是 ...

  9. C#-CHTTPDownload

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. 前端Excel表格导入导出,包括合并单元格,表格自定义样式等

    表格数据导入 读取导入Excel表格数据这里采用的是 xlsx 插件 npm i xlsx 读取excel需要通过 XLSX.read(data, {type: type}) 方法来实现,返回一个叫W ...