Flutter-geolocator: iOS๋Š” ์œ„์น˜ ๊ถŒํ•œ์„ ์š”์ฒญํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

์— ๋งŒ๋“  2019๋…„ 01์›” 25์ผ  ยท  15์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Baseflow/flutter-geolocator

๐Ÿ› ๋ฒ„๊ทธ ์‹ ๊ณ 


iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” ์œ„์น˜ ๊ถŒํ•œ์„ ์š”์ฒญํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฅ์น˜๊ฐ€ ์ด๊ฒƒ์„ ๊ฑด๋„ˆ ๋›ฐ๊ฑฐ๋‚˜ '์ค‘๋‹จ'ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. geolocator.getCurrentPosition์„ ์ˆ˜๋™์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•˜๋ฉด(๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ) null ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Android์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. geolocator.checkGeolocationPermissionStatus()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์น˜ ๊ถŒํ•œ์„ ํ™•์ธํ–ˆ์œผ๋ฉฐ
GeolocationStatus.unknown .

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” ์œ„์น˜ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฒˆ์‹ ๋‹จ๊ณ„

๊ตฌ์„ฑ

๋ฒ„์ „: 2.1.1

ํ”Œ๋žซํผ:

  • [12.1 ] : ์•„์ดํฐ: iOS

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@dstuff @kika @JStuve @StephanCassel ,
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์ณค๋‹ค! Info.plist์—์„œ ์ด ๊ถŒํ•œ NSLocationAlwaysUsageDescription์„ NSLocationWhenInUseUsageDescription๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ์€ iOS 8, Flutter ๊ธฐ๋ณธ๊ฐ’์„ ๋Œ€์ƒ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ NSLocationAlwaysUsageDescription์€ iOS 10 ์ด์ƒ์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ iOS ์•ฑ์˜ ๊ถŒํ•œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ œ๊ฑฐํ•˜๊ณ  ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๊ณ  ๊ถŒํ•œ์„ ์š”์ฒญํ–ˆ๊ณ  ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ๋„ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ชจ๋“  15 ๋Œ“๊ธ€

๋‚ด๊ฐ€ ์•Œ์•„์ฐจ๋ฆฐ ๊ฒƒ์€ ์•ฑ์ด ์ฒ˜์Œ ์„ค์น˜๋˜๊ณ  ์œ„์น˜ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ๋•Œ ์‹œ์Šคํ…œ์ด ๊ถŒํ•œ์„ ์š”์ฒญํ•˜๋Š” ๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋™์‹œ์— checkPermissionStatus() ๊ฐ€ unknown ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋ฉด ์•ฑ์—์„œ Position ํš๋“์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Android๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ iOS์—์„œ๋Š” NSLocationWhenInUseUsageDescription ์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ๊ถŒํ•œ ์•ก์„ธ์Šค์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ checkGeolocationPermissionsStatus() ๋Š” ํ•ญ์ƒ unknown ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฌผ๋ฆฌ์  ์žฅ์น˜์—๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ๊ฐ™์€ ๋ฌธ์ œ. ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. iOS๋Š” null์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.
์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ iOS ์•ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„์—๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ—‰.
podfile์— ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์‹œ์ž‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์žฅ์น˜ ๋ฐ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์•ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•ด๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
์œ„์น˜๋ฅผ ์–ป์œผ๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ ์˜ˆ์™ธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ERROR_ALREADY_REQUESTING_PERMISSIONS

@dstuff @kika @JStuve @StephanCassel ,
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์ณค๋‹ค! Info.plist์—์„œ ์ด ๊ถŒํ•œ NSLocationAlwaysUsageDescription์„ NSLocationWhenInUseUsageDescription๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ์€ iOS 8, Flutter ๊ธฐ๋ณธ๊ฐ’์„ ๋Œ€์ƒ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ NSLocationAlwaysUsageDescription์€ iOS 10 ์ด์ƒ์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ iOS ์•ฑ์˜ ๊ถŒํ•œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ œ๊ฑฐํ•˜๊ณ  ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๊ณ  ๊ถŒํ•œ์„ ์š”์ฒญํ–ˆ๊ณ  ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ๋„ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@cetorres ๋“œ๋””์–ด ์–ป์—ˆ์Šต๋‹ˆ๋‹ค! ๊ท€ํ•˜์˜ ๊ถŒ์žฅ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ–ˆ์œผ๋ฉฐ, ๋˜ํ•œ checkGeolocationPermissionStatus ์ „์— getCurrentPosition checkGeolocationPermissionStatus ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ถŒํ•œ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค!

๊ฐ์‚ฌ ํ•ด์š”! :๋งฅ์ฃผ:

๋ฒ„์ „: 3.0.0 ios๋„ ๊ถŒํ•œ ์•ก์„ธ์Šค๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Xcode์—์„œ ๋””๋ฒ„๊น…ํ•  ๋•Œ NSLocationAlwaysAndWhenInUseUsageDescription ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ( NSLocationAlwaysUsageDescription ๋ฐ NSLocationWhenInUseUsageDescription ๋งŒ ์žˆ์œผ๋ฉด Flutter์—์„œ ์ž๋™์œผ๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค)

๋™์ผํ•œ ๋ฌธ์ œ, ๋ชจ๋“  ๊ฒƒ์ด ์ฆ๋ช…๋˜์—ˆ๋‹ค๊ณ  ๋งํ–ˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@cetorres๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์‹ค์ œ๋กœ iOS 10 ์ด์ƒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ž‘๋™ํ•˜๋ ค๋ฉด NSLocationAlwaysUsageDescription ์„ ์ œ๊ฑฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์•ฑ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ ์œ„์น˜ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ์นœ! Apple์€ ํ‰์†Œ์™€ ๊ฐ™์ด TestFlight์šฉ์œผ๋กœ ๋‚ด ์•ฑ์„ ์Šน์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ด ๋นŒ๋“œ๋ฅผ TestFlight ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ App Store์— ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋˜ํ•œ ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์•ฑ, [์ˆ˜์ •๋จ] 1.0.0(12)์— ๋Œ€ํ•œ ์ตœ๊ทผ ์ œ๊ณต์—์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐฐ์†ก๋˜์—ˆ์ง€๋งŒ ๋‹ค์Œ ๋ฐฐ์†ก์—์„œ ๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ITMS-90683: Info.plist์— ๋ชฉ์  ๋ฌธ์ž์—ด์ด ์—†์Œ - ์•ฑ์˜ ์ฝ”๋“œ๊ฐ€ ๋ฏผ๊ฐํ•œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ API๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์˜ Info.plist ํŒŒ์ผ์—๋Š” ์•ฑ์— ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ๋ช…ํ™•ํ•˜๊ณ  ์™„์ „ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€ํ–ฅ ๋ชฉ์  ๋ฌธ์ž์—ด๊ณผ ํ•จ๊ป˜ NSLocationAlwaysUsageDescription ํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 2019๋…„ ๋ด„๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” App Store์— ์ œ์ถœ๋œ ๋ชจ๋“  ์•ฑ์€ ๋ชฉ์  ๋ฌธ์ž์—ด์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” SDK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ชฉ์  ๋ฌธ์ž์—ด์ด ํ•„์š”ํ•œ API๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์—์„œ ์ด๋Ÿฌํ•œ API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชฉ์  ๋ฌธ์ž์—ด์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” SDK ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์—ฐ๋ฝํ•˜์—ฌ API๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์€ ์ฝ”๋“œ ๋ฒ„์ „์„ ๋ฆด๋ฆฌ์Šคํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค(https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

๊ทธ๋ž˜์„œ ์ €๋Š” ์—ฌ๊ธฐ์—์„œ ์—ฌ์ „ํžˆ ํŒฝํŒฝํ•œ ๋ฐง์ค„ ์œ„๋ฅผ ๊ฑท๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ AndroidX ์žฅ์• ๋ฌผ์„ ๋„˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค...

๋‹น์‹ ์€ ๋ฌด์—‡์„ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ? "๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค" ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌด์‹œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์—…๋ฐ์ดํŠธ: info.plist์— ์•„๋ž˜ ์„ธ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜๋ฉด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋„ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.

NSLocationWhenInUseUsageDescription

NSLocationAlwaysAndWhenInUseUsageDescription

ํŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @vejmartin

@kbrmimbyl ๋‹น์‹ ์€ ์ƒ๋ช…์˜ ์€์ธ์ž…๋‹ˆ๋‹ค. Info.plist์— "NSLocationAlwaysAndWhenInUseUsageDescription" ํ‚ค๊ฐ€ ์—†์–ด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค!!

XCode๊ฐ€ ์•„๋‹Œ AndroidStudio์—์„œ info.plist๋ฅผ ์ˆ˜์ •ํ•œ ์‚ฌ๋žŒ์„ ์œ„ํ•œ ์ •๋ณด: ์ €์—๊ฒŒ๋Š” "NSLocationAlwaysAndWhenInUseUsageDescription"์„ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์‹  Xcode์—์„œ ํ•ด๋‹น "๊ฐœ์ธ ์ •๋ณด - ์œ„์น˜ ํ•ญ์ƒ ๋ฐ ์‚ฌ์šฉ ์„ค๋ช… ์‚ฌ์šฉ"์„ ์„ ํƒํ–ˆ์„ ๋•Œ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์›ฌ์ผ์ธ์ง€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์ด๋ฏธ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ํฌ๋งท๋˜์—ˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๊ทธ๋ ‡์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ onError๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์ฃผ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ๋Š” ๋‹จ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ๊ณ  ๊ฒฐ์ฝ” ์ง„ํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ hotReload๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ERROR_ALREADY_REQUESTING_PERMISSIONS๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ํ•ด๋‹น ๊ถŒํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
IOS11์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” Android์—์„œ๋Š” ๋ชจ๋‘ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ IOS์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

IOS ์žฅ์น˜์˜ ํ”Œ๋Ÿฌํ„ฐ ์›น๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ IOS์—์„œ ๊ถŒํ•œ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์ง€๋งŒ Windows ๋ฐ Android ์žฅ์น˜์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰