애플 iOS 앱에서 네이버 지도를 빌드하기 위해선, 아래와 같이 두가지 추가 작업이 필요합니다.

(안드로이드 강의 후속해서 진행)

1. info.plist 설정

<!-- ✅ 네이버 지도 Client ID (코드에서 init하지 않을 경우 필요) -->
<key>NMFNcpKeyId</key>
<string>**여기에 이버 maps Client ID 붙여넣기**</string>

<!-- ✅ 위치 권한 (내 위치 버튼 쓸 때 필요) -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>이 앱은 현재 위치를 확인하여 지도에 표시합니다.</string>

image.png

2. main.dart 설정 (내 위치 권한 불러오기)

  1. permission handler 패키지 설치 : FF > 세팅 > Project Dependencies > Custom Pub
permission_handler: ^12.0.1

image.png

  1. main.dart 코드 추가
import 'package:provider/provider.dart';
import 'package:flutter/gestures.dart';

import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_web_plugins/url_strategy.dart';
import 'package:firebase_core/firebase_core.dart';
import 'auth/firebase_auth/firebase_user_provider.dart';
import 'auth/firebase_auth/auth_util.dart';

import 'backend/firebase/firebase_config.dart';
import 'flutter_flow/flutter_flow_util.dart';
import 'flutter_flow/nav/nav.dart';
import 'index.dart';

import 'package:flutter_naver_map/flutter_naver_map.dart';
**import 'package:permission_handler/permission_handler.dart'; // ✅ 핸들러 임포트**

Future<void> ensureLocationPermission() async {
  final status = await Permission.locationWhenInUse.status;
  if (!status.isGranted) {
    await Permission.locationWhenInUse.request();
  }
}

**void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  GoRouter.optionURLReflectsImperativeAPIs = true;
  usePathUrlStrategy();**

  // ✅ 안드로이드에서 이미 설정한 지도 초기화 코드
  await FlutterNaverMap().init(
    clientId: '네이버 Client ID',
    onAuthFailed: (ex) {
      debugPrint('NaverMap auth failed: $ex');
    },
  );

  // ✅ iOS 런타임 권한 요청 코드
  **await ensureLocationPermission();**

  await initFirebase();

  final appState = FFAppState(); // Initialize FFAppState
  await appState.initializePersistedState();

  runApp(ChangeNotifierProvider(
    create: (context) => appState,
    child: MyApp(),
  ));
}