본문 바로가기
Flutter/Flutter FAQ

Flutter SocketException: 연결 실패 (OS 오류: 허가되지 않은 작업, errno = 1) macOS에서 플러터 앱과 함께, SocketException: Connection failed (OS Error: Operation not permitted, errno = 1) with flutter app on macOS

by 베타코드 2023. 8. 12.
반응형

질문


저는 Flutter 앱에서 다음과 같은 코드를 가지고 있습니다. 여기서 MyDataLoadermain.dart에서 시작되는 위젯입니다.

코드:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class MyDataLoader extends StatefulWidget {
  @override
  _MyDataLoaderState createState() => _MyDataLoaderState();
}

class _MyDataLoaderState extends State<MyDataLoader> {
  void getData() async {
    final response = await http.get('https://jsonplaceholder.typicode.com/albums/1');
    print(response);
  }

  @override
  void initState() {
    super.initState();
    getData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Text('MyDataLoader 화면'),
    );
  }
}

질문:
위의 코드는 https://flutter.dev/docs/cookbook/networking/fetch-data에서 영감을 받았습니다. MyDataLoader 위젯이 로드될 때 다음과 같은 오류가 발생합니다:

[ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: SocketException: Connection failed (OS Error: Operation not permitted, errno = 1), address = jsonplaceholder.typicode.com, port = 443

위의 오류는 물론 다음과 같은 코드 라인 때문에 발생합니다.

final response = await http.get('https://jsonplaceholder.typicode.com/albums/1');

하지만, 브라우저에서 https://jsonplaceholder.typicode.com/albums/1을 열면 응답으로 받을 dummy json이 있는 것을 확인할 수 있습니다. 즉, 인터넷에 잘 연결되어 있다는 것을 의미합니다.

저는 macOS Big Sur 버전 11.1에서 앱을 실행하고 있습니다.

무엇이 잘못되었을까요? macOS 환경에서 인터넷에 액세스하기 위해 어떤 권한을 선언해야 할까요?


답변


macOS는 네트워크에 액세스하기 위해 특정한 권한을 요청해야합니다. 이를 위해 macos/Runner/DebugProfile.entitlements을 열고 다음 키-값 쌍을 추가하십시오.

<key>com.apple.security.network.client</key>
<true/>

그런 다음 macos/Runner/Release.entitlements에서도 동일한 작업을 수행하십시오.

이에 대해 더 자세히 알아보려면 Flutter의 데스크톱 지원 문서를 참조하십시오.

반응형

댓글