macOS Sequoia下Quick Action调用.NET程序无法连接局域网MariaDB
macOS 15.2下Finder Quick Action无法连接局域网MariaDB的问题排查与解决建议
问题背景
- 需求:通过Finder的Quick Action(基于Automator工作流,仅包含启动.NET控制台程序的Shell脚本),利用图片文件更新局域网内的MariaDB数据库。
- 异常现象:旧版macOS中功能正常,升级到macOS 15.2(24C101)后,仅在Quick Action上下文下无法连接数据库,报错
No route to host 192.168.XXX.YYY:3306;但终端直接运行程序、Automator内直接执行工作流均正常。 - 排查动作:已简化程序为仅测试Socket连接,问题依旧;已使用苹果开发者证书签名程序,并配置了包含网络权限的plist文件。
已配置的权限plist文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.network.client</key> <true/> <key>com.apple.security.network.server</key> <true/> <key>com.apple.security.network.host</key> <string>192.168.XXX.YYY</string> <key>com.apple.security.automation.apple-events</key> <true/> <key>com.apple.security.cs.allow-jit</key> <true/> <key>com.apple.security.cs.allow-unsigned-executable-memory</key> <true/> <key>com.apple.security.cs.disable-library-validation</key> <true/> <key>com.apple.security.get-task-allow</key> <true/> </dict> </plist>
测试Socket连接的代码
try { var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect("192.168.XXX.YYY", 3306); // Log success } catch (Exception ex) { // Log Error }
环境信息
- .NET版本:8.0
- macOS版本:15.2(24C101)
解决建议
1. 检查Automator的系统权限
macOS 15对Automator工作流的权限隔离更严格,Quick Action运行时可能未获得完整网络权限:
- 打开「系统设置」→「隐私与安全性」→「完全磁盘访问」,勾选Automator.app;
- 进入「网络」权限列表,确保Automator被允许访问网络。
2. 修正Shell脚本的执行环境
Quick Action的Shell脚本默认使用受限的环境变量,可能导致.NET运行时或网络配置异常:
- 在脚本开头指定.NET运行时的完整路径,例如:
/usr/local/share/dotnet/dotnet /path/to/your/console/app.dll "$@" - 或显式配置PATH环境变量:
export PATH="/usr/local/bin:/usr/bin:$PATH" /usr/local/share/dotnet/dotnet /path/to/your/console/app.dll "$@"
3. 精简权限配置并重新签名
移除不必要的权限项,避免权限冲突,再重新签名程序:
- 保留必需权限:
com.apple.security.network.client和com.apple.security.network.host,移除com.apple.security.network.server、com.apple.security.automation.apple-events等未用到的项; - 执行重新签名命令:
codesign --force --deep --sign "你的开发者证书名称" --entitlements /path/to/your/entitlements.plist /path/to/your/console/app
4. 诊断网络路由差异
在Quick Action的Shell脚本中添加网络诊断命令,对比终端与Quick Action的网络环境:
- 修改脚本,将网络诊断日志写入文件:
ping -c 3 192.168.XXX.YYY >> ~/quick_action_network_log.txt traceroute 192.168.XXX.YYY >> ~/quick_action_network_log.txt /usr/local/share/dotnet/dotnet /path/to/your/app.dll "$@" - 查看
~/quick_action_network_log.txt,确认Quick Action是否能正常ping通服务器,是否存在路由异常。
5. 将.NET程序打包为App Bundle
macOS对App Bundle的权限管理更规范,尝试打包为独立App:
- 执行打包命令:
dotnet publish -c Release -r osx-x64 --self-contained true -p:PublishSingleFile=true -p:UseAppHost=true -p:CreateBundle=true - 对生成的App Bundle进行签名和权限配置,再在Quick Action中调用该App。
内容的提问来源于stack exchange,提问作者Laurent
相关产品推荐
相关产品推荐

