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

Homekit on tvOS

Homekit on tvOS

HomeKit frameworkを使ったtvOSアプリ開発を通して学んだ事を簡単にまとめました。

Shingo Tamaki

June 05, 2017
Tweet

More Decks by Shingo Tamaki

Other Decks in Technology

Transcript

  1. HomeKit on tvOS

    View Slide

  2. ࣗݾ঺հ

    View Slide

  3. ࣗݾ঺հ
    ۄ৓৴ޛ
    iOS Engineer!
    tvOSΞϓϦͷ։ൃ͸ࠓ೔͜ͷ೔ͷͨΊʹษڧ͠·ͨ͠ɻ
    झຯ"
    ిࢠ޻࡞⚡
    ےτϨ$
    ΨδΣοτ%

    View Slide

  4. tvOSΞϓϦͷ։ൃํ๏ʹ͍ͭͯ
    • ΫϥΠΞϯτ/αʔόܕͷΞϓϦέʔγϣϯ (TVML Kit)

    View Slide

  5. tvOSΞϓϦͷ։ൃํ๏ʹ͍ͭͯ
    • ωΠςΟϒ։ൃ

    View Slide

  6. OrigamiͷtvOSΞϓϦ
    ΫϥΠΞϯτ/αʔόܕͰߏங͓ͯ͠ΓɺOrigamiͷECͷ঎඼Ӿ
    ཡػೳΛఏڙ͍ͯ͠·͢ɻ

    View Slide

  7. OrigamiͷtvOSΞϓϦ
    • TVMLͷTemplate͕ECͷίϯςϯπͱϚονͨ͠
    • ϥΠϒΞοϓσʔτՄೳͰϦϦʔεͷख͕ؒগͳ͍
    • ৽͍͠ϓϥοτϑΥʔϜ΁ͷνϟϨϯδ

    View Slide

  8. Ͱ΋ࠓ೔͸ωΠςΟϒ࣮
    ૷ʹؔ࿈ͨ͠࿩Λ͠·͢
    !
    ޷͖ͳࣄ࿩͍͍ͯͬͯ͠ݴΘΕͨ͠

    View Slide

  9. ૣ଎tvOSͷ࿩Λ
    ͢Δલʹ...

    View Slide

  10. ࠷ۙͷεϚʔτϗʔϜؔ࿈ͷ࿩୊
    Alexa

    View Slide

  11. ࠷ۙͷεϚʔτϗʔϜؔ࿈ͷ࿩୊
    Google Home

    View Slide

  12. ࠷ۙͷεϚʔτϗʔϜؔ࿈ͷ࿩୊
    SiriεϐʔΧʔʁ

    View Slide

  13. ͳͥ͜ͷ࿩୊Λ͔ͨ͠ͱ
    ͍͏ͱʁ

    View Slide

  14. HomeKit

    View Slide

  15. HomeKitͱ͸ʁ
    Apple͕ఏڙ͢ΔεϚʔτϗʔϜͷͨΊͷϑϨʔϜϫʔΫɺ
    HomeKitରԠ୺຤Λൢച͢Δʹ͸MFiೝূ͕ඞཁ

    View Slide

  16. AppleTVͷHomeKitʹ͓͚Δ໾ׂ
    • Remote Gateway
    ϦϞʔτίϯτϩʔϧɺΦʔτϝʔγϣϯ͕ՄೳՄೳ

    View Slide

  17. iOS10
    HomeΞϓϦ͕ొ৔

    View Slide

  18. tvOS͸ʁ

    View Slide

  19. tvOS10
    HomeKitରԠ

    View Slide

  20. tvOS10ͷHomeKitରԠͰԿ͕ग़དྷΔ
    ͷ͔ʁ
    • HomeKit frameworkͷҰ෦ػೳ͕Մೳʹͳͬͨ
    • HomeΞϓϦ͸tvOSʹ͸ଘࡏ͠ͳ͍

    View Slide

  21. ͳͷͰHomeΞϓϦ΋Ͳ
    ͖Λࢼ࡞ग़དྷͳ͍͔΍ͬ
    ͯΈͨ

    View Slide

  22. DEMO

    View Slide

  23. tvOSΞϓϦ։ൃͷಛ௃
    • ը໘αΠζ
    • ੍ݶ͞ΕͨετϨʔδ
    • ύϥϥοΫεΞΠίϯ
    • ϑΥʔΧε

    View Slide

  24. tvOSΞϓϦ։ൃͷಛ௃
    • ը໘αΠζ
    • ੍ݶ͞ΕͨετϨʔδ
    • ύϥϥοΫεΞΠίϯ
    • ϑΥʔΧε ← !

    View Slide

  25. ϑΥʔΧεΤϯδϯ

    View Slide

  26. tvOSΞϓϦͷ։ൃʹ͍ͭͯ
    ϑΥʔΧεͱ͍͏֓೦͸tvOSʹ͔͠ͳ͍΋ͷͰɺ
    tvOSΞϓϦ։ൃͷ࠷େͷצॴͰ͸ͳ͍͔ͱࢥ͍ͬͯ·͢ɻ
    αϯϓϧίʔυΛ࡞੒ͨ࣌͠ʹࢥ͍௨Γʹಈ͔ͳ͔ͬͨέʔε
    ͱɺͦͷରԠʹ͍ͭͯઆ໌͠·͢ɻ
    ※ ϫʔΫΞϥ΢ϯυͳײ͡΋͢ΔͷͰ΋ͬͱςΫχΧϧͳํ๏
    ͕͋Ε͹୭͔͋ͱͰڭ͍͑ͯͩ͘͞ɻ

    View Slide

  27. ͦͷ1

    View Slide

  28. ࢥ͍௨ΓʹϑΥʔΧεग़དྷͳ͍ ͦͷ1

    View Slide

  29. ࢥ͍௨ΓʹϑΥʔΧεग़དྷͳ͍ ͦͷ1

    View Slide

  30. ࢥ͍௨ΓʹϑΥʔΧεग़དྷͳ͍ ͦͷ1
    λϒόʔ͔Βӈଆͷηϧ΁ͷϑΥʔΧεΛېࢭ͢Δ
    override func shouldUpdateFocus(in context: UIFocusUpdateContext) -> Bool {
    if let prev = context.previouslyFocusedView, String(describing:type(of: prev)) == "UITabBarButton" {
    return false
    }
    return true
    }

    View Slide

  31. ͦͷ2

    View Slide

  32. ࢥ͍௨ΓʹϑΥʔΧεग़དྷͳ͍ ͦͷ2

    View Slide

  33. ࢥ͍௨ΓʹϑΥʔΧεग़དྷͳ͍ ͦͷ2

    View Slide

  34. UIFocusEnvironment Protocol
    UIFocusEnvironment ProtocolͷσϦήʔτϝιουͰϑΥʔΧ
    εΛ͏·͘ίϯτϩʔϧग़དྷΔΑ͏ʹ
    ࣮૷͢Δඞཁ͕͋Δɻ
    var preferredFocusEnvironments: [UIFocusEnvironment]
    func shouldUpdateFocus(in context: UIFocusUpdateContext) -> Bool {
    return ൑ఆॲཧ݁Ռ
    }
    override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
    //ϑΥʔΧε࣌ʹߦ͍͍ͨॲཧ
    }
    https://developer.apple.com/reference/uikit/
    uifocusenvironment

    View Slide

  35. Debug
    Quick Look

    View Slide

  36. Debug
    _whyIsThisViewNotFocusable
    σόοά࣌ʹ_whyIsThisViewNotFocusableϝιουΛݺͿ͜
    ͱͰݪҼͱߟ͑ΒΕΔࣄ߲Λग़ྗͯ͘͠Ε·͢ɻ

    View Slide

  37. Θ͔ͬͨࣄ
    શͯͷϝιου͕࢖͑ΔΘ͚Ͱ͸ͳ͍
    addHome(withName homeName: String, completionHandler completion: @escaping (HMHome?, Error?) -> Void)
    removeHome(_ home: HMHome, completionHandler completion: @escaping (Error?) -> Void)
    updatePrimaryHome(HMHome, completionHandler: (Error?) -> Void)
    Homeͷ࡞੒ʹݶΒͣɺRoom΍ΞΫηαϦʹ͍ͭͯ΋ಉ༷

    View Slide

  38. Θ͔ͬͨࣄ
    શͯͷϝιου͕࢖͑ΔΘ͚Ͱ͸ͳ͍
    • ߟ࡯
    • TV͸جຊతʹݟΔ͚ͩͰɺૢ࡞͸͠ͳ͍ࣄ͕ଟ͍(ϦϞί
    ϯͷૢ࡞͸ͩΔ͍...)ͨΊɺͦͷػೳ͕আ֎͞Ε͍ͯΔͷͰ
    ͸!

    View Slide

  39. ͓·͚

    View Slide

  40. ͋ͳ͕ͨtvOSΞϓϦ
    ͷ։ൃΛ͢ΔͷͳΒ
    ग़ઌͰͷ࣮ػσόοάͭΒ͍

    View Slide

  41. ͋ͳ͕ͨtvOSΞϓϦͷ։ൃΛ͢Δͷͳ
    Β

    View Slide

  42. ͋ͳ͕ͨtvOSΞϓϦͷ։ൃΛ͢Δͷͳ
    Β
    • ࣮ػ(AppleTV)͸ܞଳੑʹ๡͍͠ͷͰɺHomeKitͷૢ࡞෦෼
    ͷ։ൃ͸iPhoneͰ΋ߦ͑ΔΑ͏ʹͯͨ͠ํ͕ग़ઌͰ։ൃ͠΍
    ͍͢ɻ

    View Slide

  43. γϛϡϨʔλͰྑ͍ͷͰ
    ͸ʁ!

    View Slide

  44. HomeKitͷDBڞ༗ʹ͍ͭͯ
    HomeKitͷiCloudʹΑΔDBڞ༗͸ γϛϡϨʔλͰ͸ग़དྷͳ͍

    View Slide

  45. ͓Θ͔Γ͍͚ͨͩͨͩΖ
    ͏͔!?

    View Slide

  46. ࣮ػ։ൃΛڧ͍ΒΕΔཧ༝
    • HomeKit DBڞ༗͸࣮ػ͚ͩ
    • HomeKit FrameworkͰ͸Home/Room/AccesoryͳͲͷ৽ن
    ొ࿥ɾ࡟আɾฤू͕ग़དྷͳ͍
    • ඞવతʹσʔλ͸iCloudܦ༝ͷHomeKit DBڞ༗པΈͱͳ
    Δ

    View Slide

  47. Enjoy tvOS App Development

    View Slide

  48. ࢀߟจݙ
    tvOSΞϓϦέʔγϣϯϓϩάϥϛϯάΨΠυ
    https://developer.apple.com/jp/documentation/General/
    Conceptual/AppleTV_PG/
    2017೥ͦ͜tvOSΞϓϦ։ൃΛ࢝Ί͍ͨΤϯδχΞ޲͚ɺUI࣮૷
    ϊ΢ϋ΢ू
    https://techblog.yahoo.co.jp/advent-calendar-2016/tvosapp-
    tips/

    View Slide

  49. ࢀߟจݙ
    Apple TV – tvOSೖ໳ –
    https://developers.cyberagent.co.jp/blog/archives/3642/
    UIKitCatalogͷαϯϓϧίʔυ͔ΒtvOSͷϑΥʔΧεΛֶͿ
    http://qiita.com/hanawat/items/a2542df65e0534979cb0
    ϚωʔϑΥϫʔυͷtvOSΞϓϦέʔγϣϯΛ։ൃͨ͠࿩
    https://moneyforward.com/engineers_blog/2016/02/26/
    moneyforward-tvos/

    View Slide

  50. Ҏ্

    View Slide