如何在Flutter macOS应用中设置权限运行Unix可执行文件?
解决macOS Flutter应用执行Unix可执行文件的权限问题
1. 给可执行文件添加执行权限
下载完fet-cl后,首先要赋予它执行权限,否则系统会直接拒绝运行。在Flutter中可以通过Process.run执行chmod命令:
// 先为文件添加执行权限 await Process.run('chmod', ['+x', '$directory/fet-cl']); // 再启动进程运行可执行文件 final process = await Process.start('$directory/fet-cl', params);
2. 配置App Sandbox权限
如果你的Flutter应用开启了macOS App Sandbox(默认开启),需要在权限配置中允许执行二进制文件:
- 打开Xcode项目,找到
Runner.entitlements文件; - 添加以下两个键值对:
<key>com.apple.security.cs.allow-executable-memory</key> <true/> <key>com.apple.security.cs.allow-unsigned-executable-memory</key> <true/>
这两个权限分别允许应用在内存中执行代码,以及运行未签名的可执行文件(如果你的fet-cl没有苹果开发者签名的话)。
3. 移除Gatekeeper隔离属性
从网络下载的文件会被macOS标记为“来自互联网”,即使权限正确也可能被阻止执行。可以用xattr命令移除隔离属性:
await Process.run('xattr', ['-d', 'com.apple.quarantine', '$directory/fet-cl']);
4. 避免硬编码路径
不要手动拼接应用支持目录的路径,推荐使用path_provider包获取正确路径,避免因用户名、容器ID变化导致的路径错误:
import 'package:path_provider/path_provider.dart'; // 获取应用支持目录 final appSupportDir = await getApplicationSupportDirectory(); final fetPath = '${appSupportDir.path}/fet-cl';
内容的提问来源于stack exchange,提问作者Hüseyin Dursun
相关产品推荐
相关产品推荐

