Flutter-geolocator: iOS์—์„œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜

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

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

ํ”„๋กœ์ ํŠธ์— geolocator: ^2.1.1์„ ์ถ”๊ฐ€ํ•˜๊ณ  iOS๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•  ๋•Œ ๋นŒ๋“œ ์‹คํŒจ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

iOS ์•ฑ ๋นŒ๋“œ ์‹คํŒจ
Xcode ๋นŒ๋“œ์˜ ์˜ค๋ฅ˜ ์ถœ๋ ฅ:
โ†ณ
* ๋นŒ๋“œ ์‹คํŒจ *

Xcode์˜ ์ถœ๋ ฅ:
โ†ณ
/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-2.1.2/ios/Classes/PermissionManager. swift:50 :59: ์˜ค๋ฅ˜: 'openSettingsURLString'์ด 'UIApplicationOpenSettingsURLString'์œผ๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€๋“œ url = URL(๋ฌธ์ž์—ด: UIApplication.openSettingsURLString),
^ ~ ~ ~ ~
UIApplicationOpenSettingsURL๋ฌธ์ž์—ด
UIKit.UIApp plication:64 :22: ์ฐธ๊ณ : 'openSettingsURLString'์€ Swift 4.2์—์„œ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ณต๊ฐœ ํด๋ž˜์Šค let openSettingsURLString: ๋ฌธ์ž์—ด
^^
/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-2.1.2/ios/Classes/PermissionManager. swift:55 :45: ์˜ค๋ฅ˜: ์ธ์ˆ˜ ๋ ˆ์ด๋ธ” '(rawValue:)'๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ค๋ฒ„๋กœ๋“œ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
let optionsKeyDictionary = [UIApplication.OpenExternalURLOptionsKey(rawValue: "universalLinksOnly"): NSNumber(๊ฐ’: true)]
^ ~ ~ ~ ~ ~ ~ ~
/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-2.1.2/ios/Classes/PermissionManager. swift:55 :45: ์ฐธ๊ณ : ๋ถ€๋ถ„์ ์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก๊ณผ ํ•จ๊ป˜ 'UIApplication.OpenExternalURLOptionsKey'์— ๋Œ€ํ•œ ์˜ค๋ฒ„๋กœ๋“œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค: (coder: NSCoder), (stringLiteral: StaticString), (format: NSString, CVarArg...), (string: NSString ), (utf8String: UnsafePointer), (UTF8String: UnsafePointer), (๋ฌธ์ž์—ด: ๋ฌธ์ž์—ด), (contentsOfFile: ๋ฌธ์ž์—ด), (contentsOf: URL), (contentsOfURL: URL), (cString: UnsafePointer), (CString: UnsafePointer)
let optionsKeyDictionary = [UIApplication.OpenExternalURLOptionsKey(rawValue: "universalLinksOnly"): NSNumber(๊ฐ’: true)]
^^
/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-2.1.2/ios/Classes/PermissionManager.swift:59:91: ์˜ค๋ฅ˜: 'openSettingsURLString'์˜ ์ด๋ฆ„์ด ' UIApplicationOpenSettingsURL๋ฌธ์ž์—ด'
์„ฑ๊ณตํ•˜์ž = UIApplication.shared.openURL(URL.init(string: UIApplication.openSettingsURLString)!)
^ ~ ~ ~ ~
UIApplicationOpenSettingsURL๋ฌธ์ž์—ด
UIKit.UIApplication:64:22: ์ฐธ๊ณ : 'openSettingsURLString'์€ Swift 4.2์—์„œ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ณต๊ฐœ ํด๋ž˜์Šค let openSettingsURLString: ๋ฌธ์ž์—ด
^^
/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-2.1.2/ios/Classes/PermissionManager.swift:99:54: ์˜ค๋ฅ˜: ํด๋กœ์ € ํŠœํ”Œ ๋งค๊ฐœ๋ณ€์ˆ˜ '(ํ‚ค: ๋ฌธ์ž์—ด , ๊ฐ’: Any)'๋Š” ๊ตฌ์กฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ฐ˜ํ™˜ ์‚ฌ์ „(uniqueKeysWithValues: input.map { ํ‚ค, ๊ฐ’์˜ ๊ฐ’(UIApplication.OpenExternalURLOptionsKey(rawValue: ํ‚ค), ๊ฐ’)})
^ ~ ~~(์ธ์ˆ˜) -> <#๊ฒฐ๊ณผ#> let (ํ‚ค, ๊ฐ’) = ์ธ์ˆ˜;























~ ~ ~ ^ ~


~ ~ ~ ~ ~ ^ ~/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/ios/Classes/UrlLauncherPlugin.m:108:18: ๊ฒฝ๊ณ : ' openURL:options :completionHandler:' iOS 10.0 ์ด์ƒ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [-Wunguarded-availability][์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜คํ”ˆURL:url^ ~ ~/Volumes/PROJECTS/nomadradar-app/repo/nomadradar/ios/Pods/Target Support Files/url_launcher/url_launcher-prefix์—์„œ ๊ฐ€์ ธ์˜จ 'UIKit' ๋ชจ๋“ˆ์—์„œ.

*) ์˜ต์…˜ completionHandler:(void (^ __nullable)(BOOL ์„ฑ๊ณต))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");^^/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/ios/Classes/UrlLauncherPlugin.m:108:18: ์ฐธ๊ณ : enclose ' openURL:options :completionHandler: ' @available ๊ฒ€์‚ฌ์—์„œ ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.[์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜คํ”ˆURL:url^^ ~ ~/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/ios/Classes/UrlLauncherPlugin.m:140:3: ๊ฒฝ๊ณ : 'SFSafariViewController'๋Š” iOS์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 9.0 ์ด์ƒ [-Wunguarded-availability]SFSafariViewController *safari = [[SFSafariViewController ํ• ๋‹น] in itWithURL:url ];^ ~ ~ ~ ~/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/ios/Classes/UrlLauncherPlugin.m:5์—์„œ ๊ฐ€์ ธ์˜จ 'SafariServices' ๋ชจ๋“ˆ์—์„œ:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/SafariServices.framework/Headers/SFSafariViewController.h:27:12: ์ฐธ๊ณ : ' SFSafariViewController'๋Š” ์—ฌ๊ธฐ์— ๋ถ€๋ถ„์ ์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.@interface SFSafariViewController : UIViewController^^/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/ios/Classes/UrlLauncherPlugin.m:140:3: ์ฐธ๊ณ : 'SFSafariViewController'๋ฅผ @available ์— ๋ฌถ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๋ ค๋ฉด ํ™•์ธSFSafariViewController *safari = [[SFSafariViewController ํ• ๋‹น] in itWithURL:url ];^ ~ ~ ~ ~/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/ios/Classes/UrlLauncherPlugin.m:140:38: ๊ฒฝ๊ณ : 'SFSafariViewController'๋Š” iOS์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 9.0 ์ด์ƒ [-Wunguarded-availability]SFSafariViewController *safari = [[SFSafariViewController ํ• ๋‹น] in itWithURL:url ];^ ~ ~ ~ ~
/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/ios/Classes/UrlLauncherPlugin.m:5์—์„œ ๊ฐ€์ ธ์˜จ 'SafariServices' ๋ชจ๋“ˆ์—์„œ:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/SafariServices.framework/Headers/SFSafariViewController.h:27:12: ์ฐธ๊ณ : ' SFSafariViewController'๋Š” ์—ฌ๊ธฐ์— ๋ถ€๋ถ„์ ์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
@interface SFSafariViewController : UIViewController
^^
/Users/dirkeisold/programming/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.3/ios/Classes/UrlLauncherPlugin.m:140:38: ์ฐธ๊ณ : 'SFSafariViewController'๋ฅผ @available ์— ๋ฌถ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๋ ค๋ฉด ํ™•์ธ
SFSafariViewController *safari = [[SFSafariViewController ํ• ๋‹น] in itWithURL:url ];

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

์˜ค๋ฅ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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

๊ตฌ์„ฑ

๋ฒ„์ „: ^2.1.1

[โœ“] Flutter(Mac OS X 10.13.6 17G4015, de-DE ๋กœ์ผ€์ผ์—์„œ ์•ˆ์ •์ ์ธ ์ฑ„๋„, v1.0.0)
โ€ข /Users/dirkeisold/programming/flutter์˜ Flutter ๋ฒ„์ „ 1.0.0
โ€ข Framework ๊ฐœ์ • 5391447fae(7์ฃผ ์ „), 2018-11-29 19:41:26 -0800
โ€ข ์—”์ง„ ๋ฒ„์ „ 7375a0f414
โ€ข Dart ๋ฒ„์ „ 2.1.0(๋นŒ๋“œ 2.1.0-dev.9.4 f9ebf21297)

[โœ“] Android ํˆด์ฒด์ธ - Android ๊ธฐ๊ธฐ์šฉ ๊ฐœ๋ฐœ(Android SDK 28.0.3)
โ€ข /Users/dirkeisold/programming/android-sdk-macosx์˜ Android SDK
โ€ข Android NDK ์œ„์น˜๊ฐ€ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์Œ(์„ ํƒ ์‚ฌํ•ญ, ๊ธฐ๋ณธ ํ”„๋กœํŒŒ์ผ๋ง ์ง€์›์— ์œ ์šฉ)
โ€ข ํ”Œ๋žซํผ android-28, ๋นŒ๋“œ ๋„๊ตฌ 28.0.3
โ€ข ANDROID_HOME = /Users/dirkeisold/programming/android-sdk-macosx
โ€ข Java ๋ฐ”์ด๋„ˆ๋ฆฌ: /Applications/Android Studio 3.2.app/Contents/jre/jdk/Contents/Home/bin/java
โ€ข Java ๋ฒ„์ „ OpenJDK ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ(๋นŒ๋“œ 1.8.0_152-release-1136-b06)
โ€ข ๋ชจ๋“  Android ๋ผ์ด์„ ์Šค๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

[โœ“] iOS ํˆด์ฒด์ธ - iOS ๊ธฐ๊ธฐ์šฉ ๊ฐœ๋ฐœ(Xcode 10.1)
โ€ข /Applications/Xcode.app/Contents/Developer์˜ Xcode
โ€ข Xcode 10.1, ๋นŒ๋“œ ๋ฒ„์ „ 10B61
โ€ข ios-deploy 2.0.0
โ€ข CocoaPods ๋ฒ„์ „ 1.5.3

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

@deisold , @tommaso1 , ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ์•„๋งˆ๋„ ์ด์ „ SWIFT ๋ฒ„์ „์— ๋Œ€ํ•ด ์ปดํŒŒ์ผ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ˜„์žฌ ๊ธฐ๋ณธ๊ฐ’์€ 4.1์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ๋‹ค์Œ ์ง€์นจ์— ๋”ฐ๋ผ Podfile ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Podfile์—์„œ use_frameworks ๋ผ์ธ์„ ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”! (๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋Œ€์ƒ Runner ๋ฐ”๋กœ ์•„๋ž˜์— ์ด ์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

target 'Runner' do
  use_frameworks!

๋˜ํ•œ Podfile์—์„œ config.build_settings['SWIFT_VERSION'] = '4.2' ํ–‰์„ post_installer ๋ธ”๋ก์— ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ด ์ค„์„ ์ถ”๊ฐ€ํ•œ ํ›„ post_installer ๋ธ”๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
      config.build_settings['SWIFT_VERSION'] = '4.2'
    end
  end
end

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

+1

ํ”Œ๋Ÿฌํ„ฐ ํด๋ฆฐ ์‹œ๋„ flutter clean

@deisold , @tommaso1 , ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ์•„๋งˆ๋„ ์ด์ „ SWIFT ๋ฒ„์ „์— ๋Œ€ํ•ด ์ปดํŒŒ์ผ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ˜„์žฌ ๊ธฐ๋ณธ๊ฐ’์€ 4.1์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ๋‹ค์Œ ์ง€์นจ์— ๋”ฐ๋ผ Podfile ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Podfile์—์„œ use_frameworks ๋ผ์ธ์„ ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”! (๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋Œ€์ƒ Runner ๋ฐ”๋กœ ์•„๋ž˜์— ์ด ์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

target 'Runner' do
  use_frameworks!

๋˜ํ•œ Podfile์—์„œ config.build_settings['SWIFT_VERSION'] = '4.2' ํ–‰์„ post_installer ๋ธ”๋ก์— ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ด ์ค„์„ ์ถ”๊ฐ€ํ•œ ํ›„ post_installer ๋ธ”๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
      config.build_settings['SWIFT_VERSION'] = '4.2'
    end
  end
end
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰