Flutter - http.get 在 macos 构建目标上失败:连接失败

kos*_*cki 13 permissions http flutter flutter-desktop

我开始将我的 Flutter 应用程序移植到macos Desktop。用户界面开始很好。但是,一旦应用程序进行网络调用,它就会立即失败并显示Connection failed (OS Error: Operation not allowed)

运行单行:

final response = await http.get('https://jsonplaceholder.typicode.com/posts/1');
Run Code Online (Sandbox Code Playgroud)

失败:

Unhandled Exception: SocketException: Connection failed (OS Error: 
    Operation not permitted, errno = 1),
         address = jsonplaceholder.typicode.com, port = 443
#0      IOClient.send (package:http/src/io_client.dart:33:23)
Run Code Online (Sandbox Code Playgroud)

macos 构建目标来自此处的Google 示例。

Flutter (Channel master, v1.9.8-pre.108)

kos*_*cki 23

您的 macOS XCode 项目缺少名为“传出连接(客户端)”的Internet 权限

打开你的 macos xcode 项目 - [root]/macos/Runner.xcworkspace

单击项目导航器中的“Runner” - 将显示常规设置。从选项卡栏中选择“功能”并勾选选项“传出连接(客户端)”

在此处输入图片说明

在 XCode 中重建您的应用程序并启动项目。

  • 您不应该*使用 macOS Flutter Runner 的功能 UI。请参阅 https://github.com/google/flutter-desktop-embedding/blob/master/macOS-Security.md。您很可能只启用了 Debug+Profile 或 Release 的传出连接,但没有同时启用两者。 (3认同)
  • @smorgan 感谢您的澄清。我很惊讶默认情况下未启用“<key>com.apple.security.network.client</key><true/>”。但是,有问题的文件是:“/macos/Runner-DebugProfile.entitlements”和“/macos/Runner-Release.entitlements”。 (2认同)

smo*_*gan 19

按我对对方的回答评论,你应该使用Xcode的功能,UI这一点。它不会正确处理 Flutter 项目中的两个单独的权利文件。

您需要添加:

<key>com.apple.security.network.client</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

macos/Runner/DebugProfile.entitlementsmacos/Runner/Release.entitlements

在此处记录