기존 앱 테스트 시 ios 14.2 버전인 기기를 사용하고 있었는데 permisson_handler 라는 패키지를 사용하여 위치 권한을 가져올 수 있었다.
그런데 ios 15.2 기기를 사용 시 위처럼 위치 권한을 요청하는 코드를 구성해도 기기에서 권한 요청 창이 뜨지 않는 것이다.......
리얼 ios 너무 싫다..
그래서 패키지 사이트를 찾아보니
PodFile에 다음을 추가해야 한다고 한다.
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
... # Here are some configurations automatically generated by flutter
# You can enable the permissions needed here. For example to enable camera
# permission, just remove the `#` character in front so it looks like this:
#
# ## dart: PermissionGroup.camera
# 'PERMISSION_CAMERA=1'
#
# Preprocessor definitions can be found in: https://github.com/Baseflow/flutter-permission-handler/blob/master/permission_handler/ios/Classes/PermissionHandlerEnums.h
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: PermissionGroup.calendar
# 'PERMISSION_EVENTS=1',
## dart: PermissionGroup.reminders
# 'PERMISSION_REMINDERS=1',
## dart: PermissionGroup.contacts
# 'PERMISSION_CONTACTS=1',
## dart: PermissionGroup.camera
# 'PERMISSION_CAMERA=1',
## dart: PermissionGroup.microphone
# 'PERMISSION_MICROPHONE=1',
## dart: PermissionGroup.speech
# 'PERMISSION_SPEECH_RECOGNIZER=1',
## dart: PermissionGroup.photos
# 'PERMISSION_PHOTOS=1',
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
# 'PERMISSION_LOCATION=1',
## dart: PermissionGroup.notification
# 'PERMISSION_NOTIFICATIONS=1',
## dart: PermissionGroup.mediaLibrary
# 'PERMISSION_MEDIA_LIBRARY=1',
## dart: PermissionGroup.sensors
# 'PERMISSION_SENSORS=1',
## dart: PermissionGroup.bluetooth
# 'PERMISSION_BLUETOOTH=1',
## dart: PermissionGroup.appTrackingTransparency
# 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
## dart: PermissionGroup.criticalAlerts
# 'PERMISSION_CRITICAL_ALERTS=1'
]
end
end
end
<perisson_handler> 사이트
https://pub.dev/packages/permission_handler
14.2에서 동작한 내 코드를 보자면
<기존 PodFile>
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
## dart: PermissionGroup.bluetooth
'PERMISSION_BLUETOOTH=0'
end
end
따로 위치 권한을 세팅해두지 않았다. 물론 info.plist에 위치 권한은 추가해둔 상태.
그래서 맨 위 사이트에 있는 코드로 PodFile에 위치권한도 추가 했더니 flutter.h 파일이 없다는 둥 별별 이상한 에러들이 다 뜨더라...
이건 아니다 싶어 다른 코드를 찾아보았다..
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
# You can enable the permissions needed here. For example to enable camera
# permission, just remove the `#` character in front so it looks like this:
#
# ## dart: PermissionGroup.camera
# 'PERMISSION_CAMERA=1'
#
# When enabled here, corresponding metadata should be added to info.plist
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=1',
## dart: PermissionGroup.bluetooth
'PERMISSION_BLUETOOTH=1',
]
end
end
end
이 코드를 삽입하니 에러 없이 위치 권한 요청도 잘 되었다.
물론 permission_handler를 사용해 권한 요청을 할 땐 아래와 같이 해주면 된다.
await Permission.location.request();
++++
위와 같이 해도 위치 권한이 뜨지 않는다면 다음을 plist 파일에 추가해주자.
Availability - ios 14.0+이상
<key>NSLocationDefaultAccuracyReduced</key>
<true/>
true 이면 모든 핵심 위치 서비스에서 정확도가 낮은 수준에서 서비스를 받아 구체적이 아닌 대략적인 위치만 파악할 수 있고
false 이면 전체 위치 정확도를 묻는 메시지가 표시된다. 앱이 사용자의 구체적인 위치를 사용하도록 허용한다.
즉, 위치 정확도 수준을 제어하기 위한 것.
진심 ios 넘 까다롭다............. 곧 출시인데 15버전으로 테스트 안해봤으면 어쩔뻔..?