Upgrade to Pro — share decks privately, control downloads, hide ads and more …

다리는 걸을 뿐.. 만보기 서비스 개발기

kakao
PRO
December 08, 2022

다리는 걸을 뿐.. 만보기 서비스 개발기

#iOS

카카오페이에서 만보기 서비스를 개발하면서 겪었던 이야기들을 소개해 드리려고 합니다

본 세션에서는 만보기 서비스의 소개와 함께 주니어 개발자가 만보기 서비스를 개발하기 위해 어떤 과정을 거쳤는지를 공유하고자 합니다.

발표자 : cado.avo
항상 성장을 하고픈 iOS 개발자 cado입니다.

kakao
PRO

December 08, 2022
Tweet

More Decks by kakao

Other Decks in Programming

Transcript

  1. ݅ࠁӝ ࢲ࠺झܳ ѐߊೞݶࢲ ѻ਷ ੉ঠӝ
    Copyright 2022. Kakao Corp. All rights reserved. Redistribution or public display is not permitted without written permission from Kakao.
    ׮ܻח Ѧਸ ࡺ.. ݅ࠁӝ ࢲ࠺झ ѐߊӝ
    ੉അ੤ cado.avo
    ஠஠য়ಕ੉
    if(kakao)2022

    View Slide

  2. 1. ߊ಴੗ ࣗѐ
    2. ݅ࠁӝ ࢲ࠺झ ߓ҃ ߂ ࣗѐ
    3. पઁ ѐߊ ੉ঠӝ
    4. ߓ਍ ੼ ߂ ഥҊ

    View Slide

  3. 1. ߊ಴੗ ࣗѐ
    2. ݅ࠁӝ ࢲ࠺झ ߓ҃ ߂ ࣗѐ
    3. पઁ ѐߊ ੉ঠӝ
    4. ߓ਍ ੼ ߂ ഥҊ

    View Slide

  4. ஠஠য়ಕ੉ীࢲ Ӕޖೞח
    ઱פয iOSѐߊ੗ ஠بۄҊ ೤פ׮
    Cado.Avo

    View Slide

  5. 1. ߊ಴੗ ࣗѐ
    2. ݅ࠁӝ ࢲ࠺झ ߓ҃ ߂ ࣗѐ
    3. पઁ ѐߊ ੉ঠӝ
    4. ߓ਍ ੼ ߂ ഥҊ

    View Slide

  6. ݅ࠁӝ, যڌѱ द੘೮ਸөਃ?

    View Slide

  7. झఅ
    ݅ࠁӝ ݫੋ

    View Slide

  8. झఅ
    ݅ࠁӝ ݫੋ

    View Slide

  9. View Slide

  10. Ѧ਺ ࣻ Ӓې೐

    View Slide

  11. ب੹੢
    ؀Ѿ Ѿҗ

    View Slide

  12. 1. ߊ಴੗ ࣗѐ
    2. ݅ࠁӝ ࢲ࠺झ ߓ҃ ߂ ࣗѐ
    3. पઁ ѐߊ ੉ঠӝ
    4. ߓ਍ ੼ ߂ ഥҊ

    View Slide

  13. ݅ࠁӝ ࢲ࠺झীࢲ ೙ਃೠ Ѫ਷?

    View Slide

  14. Ѧ਺ ࣻܳ FE৬ Serverী ࠁղӝ

    View Slide

  15. App User
    Server
    FE

    View Slide

  16. App User
    Server
    FE
    Step Data

    View Slide

  17. App User
    Server
    FE
    Ѧ਺ ࣻ ؘ੉ఠ
    Step Data

    View Slide

  18. App User
    Server
    FE
    Ѧ਺ ࣻ ؘ੉ఠ
    Step Data
    Ѧ਺ ࣻ ؘ੉ఠ

    View Slide

  19. App User
    Server
    FE
    Ѧ਺ ࣻ ؘ੉ఠ
    Step Data
    Ѧ਺ ࣻ ؘ੉ఠ
    ־੸ ؘ੉ఠ

    View Slide

  20. Ѧ਺ ࣻ ஏ੿ೞӝ

    View Slide

  21. Ѧ਺ ࣻܳ оઉয়ח ߑߨ਷?

    View Slide

  22. HealthKit, Core Motion.

    View Slide

  23. Core Motion
    HealthKit

    View Slide

  24. HealthKit vs Core Motion
    HealthKit Core Motion
    Main Object
    Get Data
    Historic Data
    Real time

    View Slide

  25. HealthKit vs Core Motion
    HealthKit Core Motion
    Main Object HealthKitStore CMPedometer
    Get Data
    Historic Data
    Real time

    View Slide

  26. HealthKit vs Core Motion
    HealthKit Core Motion
    Main Object HealthKitStore CMPedometer
    Get Data HKQuantityType → query → HKHealthStore startUpdates, queryPedometerData
    Historic Data
    Real time

    View Slide

  27. HealthKit vs Core Motion
    HealthKit Core Motion
    Main Object HealthKitStore CMPedometer
    Get Data HKQuantityType → query → HKHealthStore startUpdates, queryPedometerData
    Historic Data No limits 7 Days
    Real time

    View Slide

  28. HealthKit vs Core Motion
    HealthKit Core Motion
    Main Object HealthKitStore CMPedometer
    Get Data HKQuantityType → query → HKHealthStore startUpdates, queryPedometerData
    Historic Data No limits 7 Days
    Real time ¦ O

    View Slide

  29. HealthKit? Core Motion?

    View Slide

  30. Core Motion

    View Slide

  31. CMPedometer ղࠗ
    import CoreMotion


    class CMPedometer : NSObject {


    open func startUpdates(


    from start: Date,


    withHandler handler: @escaping CMPedometerHandler


    )


    open func stopUpdates()


    open func queryPedometerData(


    from start: Date,


    to end: Date,


    withHandler handler: @escaping CMPedometerHandler


    )


    }

    View Slide

  32. CMPedometer ղࠗ
    import CoreMotion


    class CMPedometer : NSObject {


    open func startUpdates(


    from start: Date,


    withHandler handler: @escaping CMPedometerHandler


    )


    open func stopUpdates()


    open func queryPedometerData(


    from start: Date,


    to end: Date,


    withHandler handler: @escaping CMPedometerHandler


    )


    }
    द੘ զ૞

    View Slide

  33. import CoreMotion


    class CMPedometer : NSObject {


    open func startUpdates(


    from start: Date,


    withHandler handler: @escaping CMPedometerHandler


    )


    open func stopUpdates()


    open func queryPedometerData(


    from start: Date,


    to end: Date,


    withHandler handler: @escaping CMPedometerHandler


    )


    }
    CMPedometer ղࠗ

    View Slide

  34. CMPedometer ղࠗ
    import CoreMotion


    class CMPedometer : NSObject {


    open func startUpdates(


    from start: Date,


    withHandler handler: @escaping CMPedometerHandler


    )


    open func stopUpdates()


    open func queryPedometerData(


    from start: Date,


    to end: Date,


    withHandler handler: @escaping CMPedometerHandler


    )


    }
    द੘ զ૞, ઙܐ զ૞

    View Slide

  35. Background ࢚కীࢲب
    Ѧ਺ ࣻܳ ࠁղ۰ݶ?

    View Slide

  36. Backgroundীࢲ ੘স द ੸੺ೠ ੹ۚ ଺ӝ

    View Slide

  37. - Foreground ੘সਸ Backgroundীࢲ ҅ࣘ೧ঠ ೞח૑
    Backgroundীࢲ ੘স द ੸੺ೠ ੹ۚ ଺ӝ

    View Slide

  38. - Foreground ੘সਸ Backgroundীࢲ ҅ࣘ೧ঠ ೞח૑
    -௼Ҋ য়ې Ѧܻח ੘সੋ૑
    Backgroundীࢲ ੘স द ੸੺ೠ ੹ۚ ଺ӝ

    View Slide

  39. - Foreground ੘সਸ Backgroundীࢲ ҅ࣘ೧ঠ ೞח૑
    -௼Ҋ য়ې Ѧܻח ੘সੋ૑
    -জ੄ Contentܳ সؘ੉౟ೞח ੘সੋ૑
    Backgroundীࢲ ੘স द ੸੺ೠ ੹ۚ ଺ӝ

    View Slide

  40. - Foreground ੘সਸ Backgroundীࢲ ҅ࣘ೧ঠ ೞח૑
    -௼Ҋ য়ې Ѧܻח ੘সੋ૑
    -জ੄ Contentܳ সؘ੉౟ೞח ੘সੋ૑
    -Backgroundীࢲ জਸ ӵ਋ח ੘সੋ૑
    Backgroundীࢲ ੘স द ੸੺ೠ ੹ۚ ଺ӝ

    View Slide

  41. - Foreground ੘সਸ Backgroundীࢲ ҅ࣘ೧ঠ ೞח૑
    -௼Ҋ য়ې Ѧܻח ੘সੋ૑
    -জ੄ Contentܳ সؘ੉౟ೞח ੘সੋ૑
    -Backgroundীࢲ জਸ ӵ਋ח ੘সੋ૑
    -Backgroundীࢲ ੘সਸ ࣻ೯ೞҊ ࢎਊ੗ীѱ ঌܻח ੘সੋ૑
    Backgroundীࢲ ੘স द ੸੺ೠ ੹ۚ ଺ӝ

    View Slide

  42. - Foreground ੘সਸ Backgroundীࢲ ҅ࣘ೧ঠ ೞח૑
    -௼Ҋ য়ې Ѧܻח ੘সੋ૑
    -জ੄ Contentܳ সؘ੉౟ೞח ੘সੋ૑
    -Backgroundীࢲ জਸ ӵ਋ח ੘সੋ૑
    -Backgroundীࢲ ੘সਸ ࣻ೯ೞҊ ࢎਊ੗ীѱ ঌܻח ੘সੋ૑
    Backgroundীࢲ ੘স द ੸੺ೠ ੹ۚ ଺ӝ

    View Slide

  43. - Foreground ੘সਸ Backgroundীࢲ ҅ࣘ೧ঠ ೞח૑
    -௼Ҋ য়ې Ѧܻח ੘সੋ૑
    -জ੄ Contentܳ সؘ੉౟ೞח ੘সੋ૑
    -Backgroundীࢲ জਸ ӵ਋ח ੘সੋ૑
    -Backgroundীࢲ ੘সਸ ࣻ೯ೞҊ ࢎਊ੗ীѱ ঌܻח ੘সੋ૑
    Backgroundীࢲ ੘স द ੸੺ೠ ੹ۚ ଺ӝ
    Backgroundীࢲ ੘সೞӝ ਤೠ بҳח?

    View Slide

  44. BackgroundTasks

    View Slide

  45. BackgroundTask Flow
    BGTaskScheduler
    DidFinishLaunching
    DidEnterBackground
    Register Task
    Submit Task

    View Slide

  46. BGAppRefreshTask BGProcessTask
    Short Task Long Task

    View Slide

  47. BGAppRefreshTask BGProcessTask
    Short Task Long Task

    View Slide

  48. Is it Ok?
    “BackgroundTask, ਗೞח ؀۽ ز੘ਸ ੿݈ ੜ ೡөਃ?”

    View Slide

  49. Backgroundীࢲ
    Testח যڌѱ ೡө?

    View Slide

  50. BackgroundTask Test ݺ۸য
    e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
    _simulateLaunchForTaskWithIdenti
    fi
    er:@“Task_identi
    fi
    er”]
    e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
    _simulateExpirationForTaskWithIdenti
    fi
    er:@“Task_identi
    fi
    er"]

    View Slide

  51. BackgroundTask Test ݺ۸য
    e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
    _simulateLaunchForTaskWithIdenti
    fi
    er:@“Task_identi
    fi
    er”]
    e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
    _simulateExpirationForTaskWithIdenti
    fi
    er:@“Task_identi
    fi
    er"]

    View Slide

  52. BackgroundTask Test ݺ۸য
    e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
    _simulateLaunchForTaskWithIdenti
    fi
    er:@“Task_identi
    fi
    er”]
    e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
    _simulateExpirationForTaskWithIdenti
    fi
    er:@“Task_identi
    fi
    er"]

    View Slide

  53. BackgroundTask Test ݺ۸য
    e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
    _simulateLaunchForTaskWithIdenti
    fi
    er:@“Task_identi
    fi
    er”]
    e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
    _simulateExpirationForTaskWithIdenti
    fi
    er:@“Task_identi
    fi
    er"]

    View Slide

  54. 1. ߊ಴੗ ࣗѐ
    2. ݅ࠁӝ ࢲ࠺झ ߓ҃ ߂ ࣗѐ
    3. पઁ ѐߊ ੉ঠӝ
    4. ߓ਍ ੼ ߂ ഥҊ

    View Slide

  55. ߓ਍ ੼ ߂ ഥҊ

    View Slide

  56. -૕ޙ: ݽܰח ࠗ࠙੉ ࢤӟ ҃਋ח ૕ޙೞӝ
    ߓ਍ ੼ ߂ ഥҊ

    View Slide

  57. -૕ޙ: ݽܰח ࠗ࠙੉ ࢤӟ ҃਋ח ૕ޙೞӝ
    -ӝദ: झಖਸ ೦࢚ ݢ੷ ഛੋೞҊ ҳഅೞӝ
    ߓ਍ ੼ ߂ ഥҊ
    ӝദ झಖਸ ੘ࢿೠ ֢࣌ ղਊ ੌࠗ

    View Slide

  58. -૕ޙ: ݽܰח ࠗ࠙੉ ࢤӟ ҃਋ח ૕ޙೞӝ
    -ӝദ: झಖਸ ೦࢚ ݢ੷ ഛੋೞҊ ҳഅೞӝ
    -ࢸ҅: ݾ੸ী ݏח ӏݽ৬ ߑߨਸ ੿ೞӝ
    ߓ਍ ੼ ߂ ഥҊ

    View Slide

  59. -૕ޙ: ݽܰח ࠗ࠙੉ ࢤӟ ҃਋ח ૕ޙೞӝ
    -ӝദ: झಖਸ ೦࢚ ݢ੷ ഛੋೞҊ ҳഅೞӝ
    -ࢸ҅: ݾ੸ী ݏח ӏݽ৬ ߑߨਸ ੿ೞӝ
    ߓ਍ ੼ ߂ ഥҊ
    -ܻ࠭: PRী ౱ਗٜ੉ ੘ࢿ೧઱न ܻ࠭ ௏ݭ౟ٜ

    View Slide

  60. -૕ޙ: ݽܰח ࠗ࠙੉ ࢤӟ ҃਋ח ૕ޙೞӝ
    -ӝദ: झಖਸ ೦࢚ ݢ੷ ഛੋೞҊ ҳഅೞӝ
    -ࢸ҅: ݾ੸ী ݏח ӏݽ৬ ߑߨਸ ੿ೞӝ
    ߓ਍ ੼ ߂ ഥҊ
    -ܻ࠭: PRী ౱ਗٜ੉ ੘ࢿ೧઱न ܻ࠭ ௏ݭ౟ٜ

    View Slide

  61. ߓ਍ ੼ ߂ ഥҊ

    View Slide

  62. -૕ޙ: ݽܰח ࠗ࠙੉ ࢤӟ ҃਋ח ૕ޙೞӝ
    -ӝദ: झಖਸ ೦࢚ ݢ੷ ഛੋೞҊ ҳഅೞӝ
    -ࢸ҅: ݾ੸ী ݏח ӏݽ৬ ߑߨਸ ੿ೞӝ
    ߓ਍ ੼ ߂ ഥҊ
    -ܻ࠭: PRী ౱ਗٜ੉ ੘ࢿ೧઱न ܻ࠭ ௏ݭ౟ٜ
    -੤޷: ࢲ࠺झ ٜ݅ӝ

    View Slide

  63. খਵ۽ թ਷ Ѫ

    View Slide

  64. -݅ٚ ݅ࠁӝ ݽٕ ܻಂష݂
    খਵ۽ թ਷ Ѫ

    View Slide

  65. -݅ٚ ݅ࠁӝ ݽٕ ܻಂష݂
    -ৡࠁ٬ ചݶ੄ ࠂ੟ೠ ೒۽਋ ѐࢶ
    খਵ۽ թ਷ Ѫ

    View Slide

  66. -݅ٚ ݅ࠁӝ ݽٕ ܻಂష݂
    -ৡࠁ٬ ചݶ੄ ࠂ੟ೠ ೒۽਋ ѐࢶ
    -iOS 16੄ ࢜۽਍ ӝמ ୶о
    খਵ۽ թ਷ Ѫ

    View Slide

  67. “ߔѼ੉ ࠛৈੌޙ”
    ߔ ߣ ࠁח Ѫ੉ ೠ ߣ ޛযࠁח Ѫ݅ ޅೞ׮

    View Slide

  68. Reference
    • Core Motion: https://developer.apple.com/documentation/coremotion
    • HealthKit: https://developer.apple.com/documentation/healthKit
    • Background Tasks: https://developer.apple.com/documentation/
    backgroundtasks


    WWDC: https://developer.apple.com/videos/play/wwdc2019/707/

    https://developer.apple.com/videos/play/wwdc2020/10063


    View Slide

  69. хࢎ೤פ׮

    View Slide