嗨,我只是在玩颤振,我正在解决同样的问题。
一般来说,我们需要从 bash 调用 GUI 版本的 sudo。
运行需要 sudo 的 dscacheutil 的 bash 命令示例:
/usr/bin/osascript -e 'do shell script "dscacheutil -flushcache 2>&1 etc" with administrator privileges'
然后我尝试在 flutter 中通过 Process.run() 运行此命令,但没有成功。然后我创建了测试 bash 脚本,并尝试使用 Process.run() 直接运行 bash 脚本。它告诉我我没有特权。
所以我必须在 Xcode 中将 App Sandbox 值更改为 NO。
我们必须打开Runner.xcodeproj
直接在里面macos
folder.
然后将App Sandbox更改为NO:
不,我们必须准备 bash 脚本:
#!/bin/bash
/usr/bin/osascript -e 'do shell script "dscacheutil -flushcache 2>&1 etc" with administrator privileges'
将其保存在某个地方,最后一步我们可以在 flutter 中调用这个 bash 脚本。
void main() {
Process.run('/Users/nikix/Desktop/bash_test.sh',[]).then((result){
stdout.write(result.stdout);
stderr.write(result.stderr);
});
}
现在我用 sudo 得到 GUI 提示,它似乎可以工作。但我真的不知道这是否是正确的方法。我对扑动很陌生。
UPDATE:
我尝试过构建 flutter 应用程序flutter build macos
但bash脚本无法运行。然后我发现这个包名为 process_run https://pub.dev/packages/process_run
然后我可以从构建的应用程序运行自定义 bash 脚本
在您的 yaml pubspec.yaml 中添加该包:
dependencies:
flutter:
sdk: flutter
process_run: any
下一步是允许沙箱应用程序在 xcode 中用于发布版本的应用程序:
最后一步在 Dart 中运行我们的 bash 代码:
import 'package:process_run/shell.dart';
void main() {
var shell = Shell();
shell.run("""
#!/bin/bash
/usr/bin/osascript -e 'do shell script "dscacheutil -flushcache 2>&1 etc" with administrator privileges'
""").then((result){
print('Shell script done!');
}).catchError((onError) {
print('Shell.run error!');
print(onError);
});
};