Slide 1

Slide 1 text

iOS13޲͚ʹҐஔ৘ใपΓΛ ରԠ͠Α͏ͱͨ͠Βۤ࿑ͨ͠࿩ @n3k0w3n/͓͑Ͷ͜

Slide 2

Slide 2 text

͓͑Ͷ͜ גࣜձࣾAzitͰiOSΤϯδχΞ΍ͬͯ·͢ɻ ݸਓͰ࠷دӺΛݕ஌ͨ͠Γ௨஌͢ΔΞϓϦΛ࡞ͬͯ·͢ɻ Twitter: @n3k0w3n Qiita: @owen Github: @nekowen

Slide 3

Slide 3 text

Ґஔ৘ใΛऔಘ͢ΔྲྀΕΛ ͓ܰ͘͞Β͍

Slide 4

Slide 4 text

iOSʹରͯ͠ Ґஔ৘ใͷΦʔιϦΛཁٻ let lm = CLLocationManager() lm.delegate = self lm.requestAlwaysAuthorization() // lm.requestWhenInUseAuthorization()

Slide 5

Slide 5 text

ݖݶͷมߋΛݕ஌ (Optional) func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { switch status { // Ϣʔβʔ͕ʮৗʹʯબ୒ͨ࣌͠ case .authorizedAlways: break // Ϣʔβʔ͕ʮΞϓϦΛ࢖༻தͷΈʯΛબ୒ͨ࣌͠ case .authorizedWhenInUse: break // Ϣʔβʔ͕ڋ൱ͬͨ࣌ case .denied: break // Ϣʔβʔ͕·ͩݖݶʹ͍ͭͯબ୒͍ͯ͠ͳ͍࣌ case .notDetermined: break // ϖΞϨϯλϧίϯτϩʔϧͳͲͰ੍ݶ͞Ε͍ͯΔͱ͖ case .restricted: break } }

Slide 6

Slide 6 text

Ґஔ৘ใΛऔಘ lm.startUpdatingLocation() … func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { // ͜͜ͰಘͨҐஔ৘ใʹରͯ͠ॲཧΛ͢Δ }

Slide 7

Slide 7 text

iOS13͔Βͷมߋ఺

Slide 8

Slide 8 text

iOS12 iOS13

Slide 9

Slide 9 text

࠷ॳ͔ΒৗʹڐՄΛબ΂ͳ͘ͳͬͨ • requestAlwaysAuthorization()ΛݺͿͱΦʔιϦ͸
 .alwaysͰฦͬͯ͘Δ • WWDC2019ͷηογϣϯͰ͸͜ΕΛʮԾͷৗʹڐՄʯ ͱઆ໌͞Ε͍ͯΔ • Core Location͸Ͳ͔͜ͷλΠϛϯάͰ1౓͚ͩϢʔβʔ ʹରͯ͠ʮΞϓϦΛ࢖༻தͷΈڐՄʯʹ͢Δ͔ɺʮৗʹ ڐՄʯʹ͢Δ͔ฉ͍ͯ͘Δ

Slide 10

Slide 10 text

࠷ॳ͔ΒৗʹڐՄΛબ΂ͳ͘ͳͬͨ • requestAlwaysAuthorization()ΛݺͿͱΦʔιϦ͸
 .alwaysͰฦͬͯ͘Δ • WWDC2019ͷηογϣϯͰ͸͜ΕΛʮԾͷৗʹڐՄʯ ͱઆ໌͞Ε͍ͯΔ • Core Location͸Ͳ͔͜ͷλΠϛϯάͰ1౓͚ͩϢʔβʔ ʹରͯ͠ʮΞϓϦΛ࢖༻தͷΈڐՄʯʹ͢Δ͔ɺʮৗʹ ڐՄʯʹ͢Δ͔ฉ͍ͯ͘Δ ʮৗʹڐՄʯ Λબ͹ͤΔϋʔυϧ͕ߴ͘ͳͬͨ

Slide 11

Slide 11 text

ରԠͨ͜͠ͱ • Ґஔ৘ใڐՄͷϑϩʔݟ௚͠
 ඞཁͰ͋Ε͹Ϣʔβʔʹઃఆ͔Βมߋͯ͠΋Β͏Α͏ଅ͢
 • ຊ౰ʹʮৗʹڐՄʯ͕ඞཁͳͷ͔ݟ௚͢
 ىಈதʹόοΫάϥ΢ϯυͰಈ࡞ͤ͞Δఔ౓Ͱ͋Ε͹
 ʮ࢖༻தͷΈڐՄʯͰे෼

Slide 12

Slide 12 text

< શવେม͡Όͳ͘Ͷʁ

Slide 13

Slide 13 text

͜Ε͔Β͕஍ࠈͰͨ͠

Slide 14

Slide 14 text

̍౓͚ͩڐՄ͕௥Ճ͞Εͨ • ѻ͍ͱͯ͠͸ʮΞϓϦΛ࢖༻தͷΈڐՄʯͱಉ͡ • ΞϓϦΛkill͢Δͱ.notDetermined(ະఆ)ʹ໭Δ • ΞϓϦ͕όοΫάϥ΢ϯυʹભҠͨ͠ޙ
 ͠͹Βͯ͘͠΋.notDeterminedʹ໭Δ
 ※όοΫάϥ΢ϯυͰҐஔ৘ใΛ࢖͏৔߹͸໭Βͳ͍

Slide 15

Slide 15 text

̍౓͚ͩڐՄ͕௥Ճ͞Εͨ • ѻ͍ͱͯ͠͸ʮΞϓϦΛ࢖༻தͷΈڐՄʯͱಉ͡ • ΞϓϦΛkill͢Δͱ.notDetermined(ະఆ)ʹ໭Δ • ΞϓϦ͕όοΫάϥ΢ϯυʹભҠͨ͠ޙ
 ͠͹Βͯ͘͠΋.notDeterminedʹ໭Δ
 ※όοΫάϥ΢ϯυͰҐஔ৘ใΛ࢖͏৔߹͸໭Βͳ͍ ͖ͪΜͱϋϯυϦϯάͰ͖͍ͯͳ͍ ͱɺϑΥΞάϥ΢ϯυʹ෮ؼͨ࣌͠ ʹҐஔ৘ใΛऔಘͰ͖ͳ͘ͳΔʂ

Slide 16

Slide 16 text

< ŝƄŚŚ

Slide 17

Slide 17 text

΍ͬͪ·࣮ͬͨ૷ (.notDeterminedΛϋϯυϦϯά͍ͯ͠ͳ͍ύλʔϯ) override func viewDidLoad() { super.viewDidLoad() self.lm.delegate = self self.lm.requestAlwaysAuthorization() } func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { switch status { case .authorizedAlways, .authorizedWhenInUse: manager.startUpdatingLocation() default: break } }

Slide 18

Slide 18 text

ରԠํ๏

Slide 19

Slide 19 text

Ϣʔβʔ͕Ґஔ৘ใͷऔಘΛ ৗʹٻΊ͍ͯΔ৔߹ ex) ϚοϓΞϓϦͳͲɺΞϓϦΛ։͍ͨΒৗʹࣗ෼ ͷҐஔ৘ใΛ஌Δඞཁ͕͋Δ৔߹ → ΞϓϦ͕ϑΥΞάϥ΢ϯυʹೖͬͨΒ ΦʔιϦΛٻΊΔ

Slide 20

Slide 20 text

func applicationWillEnterForeground(_ application: UIApplication) { if CLLocationManager.authorizationStatus() == .notDetermined { self.lm.requestWhenInUseAuthorization() } }

Slide 21

Slide 21 text

Ϣʔβʔ͕Ґஔ৘ใͷ औಘλΠϛϯάΛܾΊΔ৔߹ ex) νΣοΫΠϯϘλϯΛԡͨ͠Βݱࡏ஍Λαʔ όʔʹૹΓ͚ͭΔ৔߹ → Ґஔ৘ใΛऔಘ͢Δ࣌ʹΦʔιϦΛٻΊΔ

Slide 22

Slide 22 text

func startCheckIn() { switch CLLocationManager.authorizationStatus() { case .authorizedAlways, .authorizedWhenInUse: self.lm.requestLocation() case .notDetermined: self.lm.requestWhenInUseAuthorization() case .denied, .restricted: self.showErrorAlert() } }

Slide 23

Slide 23 text

·ͱΊ • ࠓͷΞϓϦ͕ཁٻ͢Δݖݶ͕ຊ౰ʹਖ਼͍͠ͷ͔ݟ௚͢
 ʮҐஔ৘ใʁ͏ʔΜɺৗʹڐՄʂwʯ͸ආ͚Δ
 • ʮΞϓϦΛ࢖༻தͷΈڐՄʯ͕બ୒͞Εͨ࣌ͷ͜ͱΛߟ͑Δ
 ඞཁͰ͋Ε͹ɺϢʔβʔʹݖݶͷมߋΛଅ͢
 • ݖݶ͕ະఆͷঢ়ଶʹ໭Δ͜ͱΛߟྀ͢Δ
 ඞཁͳ࣌ɺ͍ͭͰ΋ΦʔιϦΛཁٻͰ͖ΔΑ͏ʹઃܭ͓ͯ͘͠

Slide 24

Slide 24 text

͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠