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

Widget watchOSのプライバシー対応とBeta版iOSでの開発 / Supporting Privacy for Widget watchOS and Development under Beta iOS.

Widget watchOSのプライバシー対応とBeta版iOSでの開発 / Supporting Privacy for Widget watchOS and Development under Beta iOS.

Widget/watchOSのプライバシー対応とBeta版iOSでの開発

鶴川 純一/LINE株式会社 iOS/Androidエクスペリエンス開発チーム
2021年4月中途入社。LINEアプリのクライアントエンジニアとして、iOSプラットフォームにおける新機能のアプリへの導入や機能改善を担当。コーヒーが好き。

※この資料は以下のイベントで発表されました。
https://line.connpass.com/event/228428/

LINE Developers
PRO

November 02, 2021
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. Widget/watchOSのプライバシー対応と
    Beta版iOSでの開発
    LINE株式会社 iOS/Androidエクスペリエンス開発チーム
    鶴川 純一
    2021.11.02 ヤフー × LINE iOS Meetup

    View Slide

  2. • ௽઒ ७Ұ
    • -*/&גࣜձࣾ J04"OESPJEΤΫεϖϦΤϯε։ൃνʔϜ
    • ೥݄த్ೖࣾ
    • "QQMF8BUDI4FSJFTಧ͖·ͨ͠🙂
    ࣗݾ঺հ

    View Slide

  3. 8JEHFUͱXBUDI04ΞϓϦʹؔ͢ΔɺJ04XBUDI04 ͰͷϓϥΠόγʔରԠ
    ࠓ೔ͷτϐοΫ

    View Slide

  4. • ϓϥΠόγʔ؍఺ͰΈͨ8JEHFUͱXBUDI04 BQQ
    • ϓϥΠόγʔʹؔ͢Δ৽ػೳͱ࣮૷ʹ͍ͭͯ
    • ࣮૷ʹ͋ͨͬͯૺ۰ͨ͠໰୊ͱͦͷରԠ
    • #FUB൛J04Ͱͷ։ൃͷϋϚΓͲ͜Ζ
    • ·ͱΊ
    Contents

    View Slide

  5. ϓϥΠόγʔ؍఺ͰΈͨ
    8JEHFUͱXBUDIBQQ

    View Slide

  6. • 8JEHFU͸ϩοΫεΫϦʔϯʹ΋දࣔͰ͖Δ
    • ϩοΫΛղআ͍ͯ͠ͳͯ͘΋ɺ8JEHFUͷ಺༰ΛݟΔ͜ͱ͕ग़དྷΔ
    • ࿈བྷઌͳͲͷݸਓ৘ใ͕ɺ୭͔ʹݟΒΕͯ͠·͏ϦεΫ͕͋Δ
    8JEHFU

    View Slide

  7. • "MXBZT0O ৗʹදࣔ
    ͱ͍͏ػೳ͕͋Δ
    • จࣈ൫͕ࣗ෼ʹ޲͍͍ͯͳͯ͘΋ɺը໘͕දࣔ͞Εଓ͚Δػೳ
    • 4FSJFTҎ߱ͷ୺຤ͰରԠ
    • XBUDI04·Ͱ
    • ࿹ΛԼ͛Δͱ
    • ࣌ܭ͕දࣔ͞Εɺഎܠ͕ϘέͯɺΞϓϦέʔγϣϯͷίϯςϯπ
    ΛೝࣝͰ͖ͳ͘ͳΔ
    XBUDI04 BQQ
    ˞*NBHFGSPN88%$8IBUTOFXJOXBUDI04
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    ˞

    View Slide

  8. • XBUDI04͔Β "MXBZT0Oͷڍಈ͕มΘͬͨ
    • ࿹ΛԼ͛ͨͱ͖ʹ΋"QQͷ಺༰ΛදࣔͰ͖ΔΑ͏ʹͳͬͨ
    • ϝοηʔδͷ಺༰͕֎෦ʹҙਤͤͣݟ͑ͯ͠·͏ϦεΫ͕͋Δ
    XBUDI04 BQQ
    ˞*NBHFGSPN88%$8IBUTOFXJOXBUDI04
    IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

    View Slide

  9. ͲͷΑ͏ʹରԠͰ͖Δ͔

    View Slide

  10. • J04XBUDI04 ͔ΒɺϩοΫ࣌΍"MXBZT0O͕༗ޮͳ৔߹ʹ೚ҙͷ6*ΛӅ͢͜ͱ͕
    ग़དྷΔΑ͏ʹͳͬͨ
    • γϯϓϧʹ࣮૷͢ΔͳΒɺҎԼͷ"1*Λ࢖͏͚ͩ
    • 4XJGU6* ͷ QSJWBDZ4FOTJUJWF @
    7JFX.PEJpFS
    ࣮૷
    var body: some View {
    Text(Date(), style: .time)
    Text("Secret Text.")
    .privacySensitive()
    }

    View Slide

  11. • ΑΓࡉ੍͔͘ޚ͍ͨ͠৔߹͸ʁ ϩοΫத͸දࣔΛม͍͑ͨ FUD

    • 3FEVDUJPO3FBTPOT ͱ͍͏ &OWJSPONFOU7BMVF ΛݟΔ
    • J04XBUDI04͔ΒɺQSJWBDZͱ͍͏ϓϩύςΟ͕௥Ճ͞Εͨ
    ࣮૷
    @Environment(\.redactionReasons) var redactionReasons
    var body: some View {
    Text(Date(), style: .time)
    if redactionReasons.contains(.privacy) { // Locked
    Text("Unlock to see the text.")
    }
    else {
    Text("Secret Text.")
    }
    }

    View Slide

  12. -*/&ΞϓϦʹద༻ 8JEHFU

    6OMPDL࣌ -PDL࣌

    View Slide

  13. -*/&ΞϓϦʹద༻ XBUDIBQQ

    例: トークリスト画面 例: トーク画面

    View Slide

  14. %POFʂ

    View Slide

  15. ຊ౰ʹʁ🤔

    View Slide

  16. -*/&ΞϓϦʹద༻ 8JEHFU

    6OMPDL࣌ -PDL࣌

    View Slide

  17. ϓϨʔεϗϧμʔ͕ͣΕͯදࣔ͞ΕΔ
    var body: some View {
    VStack(alignment: .leading) {
    Text(Date(), style: .time)
    .privacySensitive()
    Text("English text")
    .privacySensitive()
    Text("Это русский текст.")
    .privacySensitive()
    Text("⽇本語のテキスト")
    .privacySensitive()
    Text("이것은 한국어 텍스트입니다.")
    .privacySensitive()
    Text("🍎🖥📱⌚")
    .privacySensitive()
    }
    }

    View Slide

  18. • 3FEVDUJPO3FBTPOT Λར༻ͯ͠໰୊Λճආ͢Δ
    • ϩοΫ࣌ʹ͸ΧελϜͳ6*ͰϓϨʔεϗϧμʔΛදݱ
    ϓϨʔεϗϧμʔ͕ͣΕͯදࣔ͞ΕΔ
    var customPlaceholder: some View {
    Rectangle()
    .cornerRadius(2)
    .foregroundColor(Color(UIColor.lightGray))
    .frame(width: 140, height: 10, alignment: .leading)
    }
    var body: some View {
    VStack(alignment: .leading) {
    if redactionReasons.contains(.privacy) { // Locked
    customPlaceholder
    customPlaceholder
    }
    else {
    Text("English text").privacySensitive()
    Text("⽇本語のテキスト").privacySensitive()
    }
    }
    }

    View Slide

  19. ϓϨʔεϗϧμʔ͕ͣΕͯදࣔ͞ΕΔ
    6OMPDL࣌ -PDL࣌
    04%FGBVMU

    -PDL࣌
    $VTUPN6*

    View Slide

  20. • ઃఆՄೳͳϓϩύςΟΛ࣋ͬͨ8JEHFU *OUFOU$POpHVSBUJPO

    • ઃఆ͕มߋ͞Εͨ͋ͱʹɺຊདྷϚεΫ͞ΕΔ΂͖৔ॴ͕ϩοΫதͰ΋
    දࣔ͞Εͨ··ʹͳΔ😨
    • ΞϓϦͷ࣮૷͕ѱ͔ͬͨͷ͔ʁ
    • 8JEHFUͷදࣔΛ؅ཧ͍ͯ͠Δͷ͸J04ଆ
    • ΞϓϦͰ͸Կ΋ग़དྷͳ͍😇
    8JEHFUͷઃఆΛมߋ͢ΔͱϓϨʔεϗϧμʔ͕දࣔ͞Εͳ͍

    View Slide

  21. #FUB൛Ͱͷ։ൃͷϋϚΓͲ͜Ζ

    View Slide

  22. • 6OEPDVNFOUFEͳ࢓༷΍ڍಈͷมߋ͕͋Δ
    • طଘͷ"1*ʹରͯ͠αΠϨϯτͳڍಈมߋ΋͋ͬͨΓ͢Δ
    • ڍಈ͕·ͩෆ҆ఆ
    • ࢥͬͨͱ͓Γʹಈ͔ͳ͍ͷ͸ɺΞϓϦͷ࣮૷͕ѱ͍ͷ͔ɺ04ଆͷ໰୊ͳͷ͔ʁ
    #FUB൛Ͱͷ։ൃͷϋϚΓͲ͜Ζ

    View Slide

  23. • 'FFECBDL"TTJTUBOU
    • όά΍ո͍͠ڍಈΛݟ͚ͭͨΒ·ͣ͜͜ʹ౤ߘ͢Δ
    • සൟʹ΍ΓऔΓ͕ൃੜ͢ΔΘ͚Ͱ͸ͳ͍఺ʹ஫ҙ
    • "QQMF%FWFMPQFS'PSVN
    • "QQMFͷΤϯδχΞ΋νΣοΫ͍ͯ͠Δ
    • 'FFECBDL"TTJTUBOUʹՃ͑ͯɺ'PSVNͰ΋ڞ༗͢ΔͱରԠ͕͸΍͘
    ͳΔ ͔΋

    • $PEF-FWFM4VQQPSUͱ͍͏ͷ΋͋Δ
    Կ͕ग़དྷΔ͔

    View Slide

  24. View Slide

  25. ·ͱΊ

    View Slide

  26. • 8JEHFUXBUDI04 ϓϥΠόγʔରԠ
    • Ϣʔβʔ͞ΜʹΑΓ҆৺ͯ͠ΞϓϦΛར༻͍͚ͯͨͩ͠Δ৽͍͠ػೳ
    • γϯϓϧͳ࣮૷Ͱ࣮ݱͰ͖Δ
    • ·ͩڍಈʹ໰୊͕͋ΔͷͰɺϫʔΫΞϥ΢ϯυͷରԠ͕ඞཁʹͳΔ͔΋
    ·ͱΊ

    View Slide

  27. • #FUB൛J04Ͱͷ։ൃ
    • ະ஌ͱͷૺ۰
    • Կ͕ग़དྷΔ͔ग़དྷΔΑ͏ʹͳ͔ͬͨग़དྷͳ͍͔Λܧଓͯ͠ௐࠪ
    • গͳ͍৘ใͰղܾࡦΛ໛ࡧ͍͔ͯ͠ͳ͚Ε͹ͳΒͳ͍
    • ίϛϡχέʔγϣϯ
    • ࣾ಺ ϓϥϯφʔσβΠφʔΤϯδχΞ
    ͚ͩͰͳࣾ͘֎ "QQMF
    ͱͷ࿈ܞ΋ඞཁ
    • 04ͷ৽͍͠ػೳΛ࢖ͬͯɺ৽͍͠ମݧΛ͍ͪૣ͘Ϣʔβʔ͞Μʹಧ͚ΒΕΔָ͠͞
    ·ͱΊ

    View Slide

  28. • 88%$4FTTJPOT
    • 1SJODJQMFTPGHSFBUXJEHFUT
    • IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    • 8IBUTOFXJOXBUDI04
    • IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
    • "QQMF%PDVNFOUBUJPOT
    • QSJWBDZ4FOTJUJWF @

    • IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOTXJGUVJPVUMJOFTVCHSPVQDIJMESFOQSJWBDZTFOTJUJWF @

    • 3FEBDUJPO3FBTPOT QSJWBDZ
    • IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOTXJGUVJSFEBDUJPOSFBTPOTQSJWBDZ
    • #VH3FQPSUJOH
    • 'FFECBDL"TTJTUBOUGPS%FWFMPQFST
    • IUUQTEFWFMPQFSBQQMFDPNCVHSFQPSUJOH
    ࢀߟ

    View Slide

  29. View Slide