You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple M4芯片Mac上Flutter应用无法读取项目内配置文件(权限错误errno=1)

Apple M4芯片Mac上Flutter应用无法读取项目内配置文件(权限错误errno=1)

看起来你遇到的是Apple Silicon Mac上Flutter桌面应用的沙箱权限+路径使用不当的双重问题,我来一步步帮你排查解决:

1. 先改掉硬编码绝对路径的坏习惯

你现在直接写死了绝对路径,这不仅在项目移动/换环境时会直接失效,更关键的是:如果你运行的是Flutter macOS桌面应用(而非单纯的Dart脚本),应用的沙箱会默认限制它访问你项目目录下的文件——哪怕你给了Terminal/VSCode权限也没用,因为桌面应用是独立进程,有自己的权限沙箱。

换成相对路径结合运行时工作目录来构建路径会更可靠:

import 'dart:io';
import 'package:path/path.dart' as p;

// 用相对路径(相对于项目根目录)拼接,避免硬编码
final configRelativePath = p.join(
  'embedded-configurations', 
  'build', 
  'system_config', 
  'Gecko', 
  'lab_spa_config.json'
);
final configPath = p.join(Directory.current.path, configRelativePath);
final File file = File(configPath);
final String jsonString = file.readAsStringSync();

2. 解决Flutter macOS应用的沙箱权限问题

如果你是用flutter run -d macos运行桌面应用,Flutter默认会给应用开启App Sandbox(沙箱机制),这个机制会严格限制应用的文件访问范围,和Terminal/VSCode的权限是完全分开的。

调试阶段临时关闭沙箱(最省事)

打开项目下的两个权限配置文件:

  • macos/Runner/DebugProfile.entitlements
  • macos/Runner/Release.entitlements

把里面的com.apple.security.app-sandbox改成false:

<key>com.apple.security.app-sandbox</key>
<false/>

改完后重启应用,应该就能正常读取文件了。

发布版本的权限配置(可选)

如果之后要发布应用,建议重新开启沙箱,同时添加对应目录的访问权限。比如可以在entitlements文件里添加com.apple.security.files.user-selected.read-only(允许用户手动选择文件),或者更精准的目录权限,但开发阶段临时关闭沙箱是最高效的解决方案。

3. 验证基础权限是否生效

先在终端里直接执行以下命令,确认文件本身能被正常读取:

cat /Users/denismorin/source/Flutter/eco2-test-tool/embedded-configurations/build/system_config/Gecko/lab_spa_config.json

如果终端能正常输出内容,说明系统级权限没问题,问题确实出在Flutter应用的沙箱或路径上。

另外,有时候Apple Silicon的权限设置需要重启进程才会生效,不妨重启下Terminal/VSCode甚至Mac,再试一次。

4. 更优方案:把配置文件作为Flutter Assets管理

如果你的配置文件是静态的(不会动态生成),完全可以用Flutter官方推荐的Assets方式来管理,彻底绕开文件权限问题:

  1. 在pubspec.yaml里添加Assets声明:
flutter:
  assets:
    - embedded-configurations/build/system_config/Gecko/lab_spa_config.json
  1. 用rootBundle读取文件:
import 'package:flutter/services.dart';

// 注意这里直接用Assets路径,不需要处理文件系统
final jsonString = await rootBundle.loadString(
  'embedded-configurations/build/system_config/Gecko/lab_spa_config.json'
);

按上面的步骤一步步试,应该能解决你的问题。如果还是不行,不妨告诉我你是在运行Dart脚本还是Flutter桌面应用,我再帮你进一步排查~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 09:53:05