macos设备连接指定wifi时可触发脚本,方法包括:一、networksetup+launchd轮询;二、监听system.log中airportd日志;三、controlplane图形化配置;四、监控preferences.plist变更;五、swift调用nehotspotconfiguration api。

当 macOS 设备成功连接到指定名称的 WiFi 网络时,系统可触发预设脚本执行特定操作。以下是实现该功能的多种可行方法:
一、使用 networksetup 配合 launchd 定时轮询检测
该方法通过后台守护进程定期检查当前激活的 WiFi 名称,匹配目标 SSID 后调用指定脚本。无需第三方工具,依赖系统原生命令。
1、创建检测脚本文件,例如 /usr/local/bin/check_wifi.sh,内容为:
#!/bin/bash
CURRENT_SSID=$(networksetup -getairportnetwork en0 | awk -F': ' '{print $2}')
if [[ "$CURRENT_SSID" == "YourTargetSSID" ]]; then
/usr/local/bin/your_action.sh
exit 0
fi
2、赋予执行权限:sudo chmod +x /usr/local/bin/check_wifi.sh
3、创建 launchd 配置文件 /Library/LaunchDaemons/com.example.wifidetect.plist,设置 StartInterval 为 15 秒。
4、加载配置:sudo launchctl load /Library/LaunchDaemons/com.example.wifidetect.plist
二、监听 system.log 中的 airportd 连接日志
macOS 的 airportd 服务在成功关联 WiFi 后会向 system.log 写入包含 “Associated with” 的日志行,可通过 tail -f 实时捕获并触发响应。
1、新建日志监听脚本 /usr/local/bin/watch_wifi_log.sh,使用 while read 循环解析日志流。
2、在脚本中过滤匹配 "Associated with YourTargetSSID" 的行,并执行后续命令。
3、将该脚本添加至登录项或通过 launchd 启动,确保其持续运行。
4、启用日志权限:执行 sudo log config --mode "level:info" 保证相关消息不被静默丢弃。
三、利用 ControlPlane 应用实现图形化条件触发
ControlPlane 是开源的 macOS 上下文感知自动化工具,支持以 WiFi SSID 作为证据源,直接绑定动作脚本,无需编写底层逻辑。
1、下载并安装 ControlPlane 最新版,启动后进入 Evidence Sources 设置页,启用 WiFi Network 证据源。
2、在 Contexts 标签页中新建上下文,命名为 “OfficeNetwork”,并将 WiFi 名称设为 YourTargetSSID。
3、切换至 Rules 页面,添加规则:当上下文变为 “OfficeNetwork” 时,执行 Shell Script 动作。
4、在动作配置中填入完整路径的可执行脚本,如 /Users/username/scripts/on_office_connect.sh。
四、修改 /Library/Preferences/SystemConfiguration/preferences.plist 触发器
该方法直接监控网络配置文件变更事件,当 WiFi 接口参数更新且 SSID 字段匹配时,立即执行回调。响应速度接近实时,但需谨慎处理 plist 解析。
1、使用 fswatch 监控 /Library/Preferences/SystemConfiguration/preferences.plist 文件变化。
2、每次文件更新后,运行 defaults read /Library/Preferences/SystemConfiguration/preferences.plist | grep -A 5 -B 5 "YourTargetSSID" 判断是否命中。
3、若输出包含目标 SSID,则调用 osascript -e 'display notification "Connected to Office WiFi"' 或其他脚本。
4、将 fswatch 命令嵌入 shell 循环,并通过 nohup 后台常驻运行。
五、基于 NEHotspotConfiguration API 构建 Swift 监听程序
适用于开发自定义菜单栏应用,利用 NetworkExtension 框架中的 WiFi 状态回调机制,在连接完成瞬间获得通知,精度高且无轮询开销。
1、创建 Swift 命令行项目,引入 import NetworkExtension 和 import SystemConfiguration。
2、使用 NEHotspotNetwork.setKnownNetworks(_:) 注册目标 SSID,并监听 NEHotspotNetworkDidChangeNotification。
3、在通知处理闭包中校验当前 SSID 是否与预期一致,一致则执行 Process.spawn() 调用外部脚本。
4、编译生成可执行文件,添加到登录项或通过 launchd 启动,确保具备 Full Disk Access 权限。










