2023/09/01(金) iOSDC Japan 2023 day0
Appleʹ͓͚ΔϓϥΠόγʔͷશ༰ΛѲ͢ΔiOSDC Japan 2023 day0@akatsuki174
View Slide
ࣗݾհ
• ˏakatsuki174• גࣜձࣾΏΊΈॴଐ• Android/iOS/FlutterΤϯδχΞ• 1ࣇͷ• 9݄Լ०ʹୈೋࢠग़࢈༧ఆͷɹɹͨΊɺࣄલऩʹͯࢀՃ
ࠓͷ
͓ॻ͖• ϓϥΠόγʔશମͷ• ϓϥΠόγʔํɺతจࣈྻɺ৹ࠪΨΠυϥΠϯɺɹHuman Interface Guidelines etc…• ݸʑͷݖݶͷ• ҐஔใɺτϥοΩϯάɺࣸਅ/ಈըɺ࿈བྷઌ etc…
• ൣғΛiOSͷຊମʹߜͬͯ·͢• watchOSͳͲͷଞͷϓϥοτϑΥʔϜɺApp Clips, WidgetɹͳͲର֎Ͱ͢• ࣌ؒͷ্ؔ…͢·Μ…• ۩ମతͳ࣮ํ๏ΘΓͱ͞Βͬͱྲྀ͠·͢ҙॻ͖
Apple͕ߟ͑ΔϓϥΠόγʔͱ
• ϓϥΠόγʔجຊతͳਓݖ• Ϣʔβ͔Βͷ৴པΛҡ࣋͢Δ্ͰॏཁϓϥΠόγʔʹର͢Δߟ͑IUUQTXXXBQQMFDPNKQQSJWBDZ
• ຖϓϥΠόγʔɺηΩϡϦςΟʹؔ͢Δಈը͕ग़͍ͯΔ• WWDC23 5ຊ• WWDC22 13ຊ• WWDC21 18ຊ• WWDC20 14ຊ etc…ϓϥΠόγʔͱWWDCIUUQTEFWFMPQFSBQQMFDPNWJEFPTQSJWBDZTFDVSJUZ
• σʔλͷ࠷খԽ• ΦϯσόΠεॲཧ• ಁ໌ੑͱཧ• ػີอ࣋ϓϥΠόγʔอޢ4ݪଇ
• ඞཁͳ࣌ʹɺඞཁͳ͚ͩσʔλΛऔಘ͢Δ• ྫɿ• ҐஔใΛʮҰ͚ͩڐՄʯ• ҐஔใͷػೳΛར༻͢Δ·ͰɺϢʔβʹڐΛٻΊͳ͍σʔλͷ࠷খԽ
• ػີσʔλΛͰ͖Δ͚ͩϩʔΧϧͰॲཧ͢Δ• ΦϑϥΠϯͰ͑Δɺ௨৴͕ͳ͍ߴͳͲͷϝϦοτ͋Δ• ྫɿ• SiriͷԻೝࣝϞσϧ• Create MLʹΑΔػցֶशΦϯσόΠεॲཧ
• σʔλͷ༻ํ๏ڞ༗ઌΛ໌֬ʹ͢Δ• ࣗͷҙࢥͰσʔλΛཧ͢Δ• ྫɿ• Sign in with Apple• AppϓϥΠόγʔϨϙʔτʢޙड़ʣ• ϓϥΠόγʔϥϕϧʢޙड़ʣಁ໌ੑͱཧ
• ҆શʹอɺཧ͢Δ• ྫɿ• ੜମೝূػີอ࣋ʢηΩϡϦςΟʣ
• ࣍ͷΑ͏ͳใʹΞΫηε͍ͨ͠ͱ͖ɺγεςϜΞϥʔτΛɹग़ͯ͠ڐՄΛಘΔඞཁ͕͋Δ• ҐஔใɺϔϧεέΞɺͦͷଞݸਓΛಛఆͰ͖Δใ• ΧϝϥϚΠΫͳͲͷσόΠεͷػೳ• BluetoothσόΠεͳͲͷอޢ͞ΕͨϦιʔε• σόΠεͷࠂࣝผࢠඞཁͳͱ͖ʹڐՄΛಘΔ
ৄ͘͠…
purpose stringsʢతจࣈྻʣͷॻ͖ํ
• ڐՄͷϦΫΤετΛ͢ΔγεςϜΞϥʔτʹදࣔ͞ΕΔจࣈྻ• Info.plistͰઃఆ͢Δతจࣈྻͱ
• σʔλͷ༻్͕۩ମతʹઆ໌͞Ε͍ͯΔ͔• σʔλͷ༻ํ๏ͷྫ͕ࣔ͞Ε͍ͯΔ͔తจࣈྻͷApp Store৹ࠪ؍
App Tracking TransparencyΞϥʔτྫ༻్❌༻ํ๏❌τϥοΩϯάΛڐՄ͠ͳ͍߹ͷ͜ͱʹ͍ͭͯݴٴ͍ͯ͠Δ👌IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZUFDIUBMLT༻్⭕༻ํ๏⭕
ΧϝϥΞϥʔτྫIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZUFDIUBMLT͗͢Δ ؆ܿ👌
Ґஔใ
ϦΫΤετྫ༻தͷΈڐՄৗʹڐՄ
γεςϜΞϥʔτྫIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED༻தͷΈڐՄ ৗʹڐՄ
• ͬ͘͟Γݴ͏ͱҎԼͷύλʔϯ͕ଘࡏ͢Δ• ະઃఆ• ʮৗʹڐՄʯ• ʮҰ࣌తʹڐՄʯ• ʮ༻தͷΈڐՄʯ• ʮڐՄ͠ͳ͍ʯڐՄঢ়ଶ
ڐՄεςʔλεભҠਤIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
• ࠷খݶͷҐஔใఏڙͰࡁΉΑ͏ɺʮਖ਼֬ͳҐஔใʯΛΦϑʹ͢Δػೳ• ΞϓϦଆͰΦϓτΞτ͢Δ͜ͱͰ͖ͳ͍• iOS 14͔Βొਖ਼֬ͳҐஔใ
γεςϜΞϥʔτྫ
• UIKitCLLocationButtonɺSwiftUILocationButton• ʮඞཁͳͱ͖ʹҰ͚ͩҐஔใͷΞΫηεཁٻΛ͢Δʯ͕؆୯ʹ࣮ݱͰ͖Δ• ͜ͷϘλϯࣗମʹҐஔใऔಘػೳͳ͍• iOS 15Ҏ্Ͱ༻ՄೳLocationButton
App Tracking Transparency
IUUQTEFWFMPQFSBQQMFDPNKQBQQTUPSFVTFSQSJWBDZBOEEBUBVTFγεςϜΞϥʔτྫ
• ࣍ͷ͜ͱΛ͢Δ࣌ϢʔβͷڐՄΛٻΊɺAppTrackingTransparencyϑϨʔϜϫʔΫΛ༻͠ͳ͚ΕͳΒͳ͍• IDFAʹΞΫηε͢Δ• ϢʔβΛτϥοΩϯά͢Δ• iOS 14.5Ҏ߱ରԠඞਢApp Tracking TransparencyʢATTʣͱ
• Identifier for Advertisersʢࠂࣝผࢠʣ• ݸʑͷσόΠεʹׂΓͯΒΕΔҰҙͷࣝผࢠ• ࠂओɺࠂωοτϫʔΫIDFAΛͬͯใΛऩू͠ɺࠂλʔήςΟϯάͳͲʹ׆༻͢Δ• iOS 14.5͔ΒσϑΥϧτͰऔΕͳ͘ͳͬͨIDFAͱ
• ΞϓϦͰऩूͨ͠ಛఆͷΤϯυϢʔβ·ͨσόΠεʹؔ͢ΔσʔλΛ• αʔυύʔςΟͷσʔλͱඥ͚Δߦҝ• σʔλϒϩʔΧʔʹ͢ߦҝτϥοΩϯάͱ
ϦΫΤετྫ
؆ܿʹ·ͱ·ͬͯΔࢿྉIUUQTTQFBLFSEFDLDPNLPPPPPUBLFNJOJEGBBUUTLBEOFUXPSL
IUUQT[FOOEFWTFSJNBBSUJDMFTCEEBB
ࣸਅ/ಈը
γεςϜΞϥʔτྫIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDࣸਅΛબʜ
• iOS 14͔ΒPHAuthorizationStatusʹ.limited͕૿͑ͨ• Ϣʔβ͕બͨࣸ͠ਅ͔͠ΞϓϦ͔ΒΞΫηεͰ͖ͳ͍ঢ়ଶΛ࡞Δ͜ͱ͕Ͱ͖ΔʮࣸਅΛબ…ʯ
ϦΫΤετྫಡΈॻ͖ ॻ͖ࠐΈͷΈॻ͖ࠐΈͷΈಡΈॻ͖
• ࣸਅಈըϐοΧʔΛදࣔͰ͖Δ• Photo LibraryʹΞΫηε͠ͳ͍ͷͰɺγεςϜΞϥʔτΛɹग़͢ඞཁ͕ͳ͍• ࣸਅಈըΛѻ͏ͳΒ͜ͷํ๏͕ਪ͞ΕΔ• iOS 14͔Β͑ΔPHPickerViewController
IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
• PHPickerViewControllerSwiftUI͔Β͑ͳ͔ͬͨ• iOS 16͔ΒPhotosPickerΛSwiftUI͔Β͑Δ• ͪΖΜγεςϜΞϥʔτඞཁͳ͠PhotosPicker
PhotosPicker༻ྫ
࿈བྷઌ
• ࿈བྷઌͷϐοΧʔΛදࣔͰ͖Δ• ϢʔβͷڐՄΛಘΔඞཁͳ͍CNContactPickerViewController
CNContactPickerViewController༻ྫ
AppϓϥΠόγʔϨϙʔτ
• ΞϓϦ͕ͲΜͳσʔλʹΞΫηε͍ͯ͠Δ͔͕Θ͔ΔϨϙʔτ• ઃఆΞϓϦ͔Β֬ೝͰ͖Δ• σϑΥϧτͰOFF• JSONϑΝΠϧͱͯ͠ΤΫεϙʔτͰ͖Δ• iOS 15Ҏ߱ʹࡌAppϓϥΠόγʔϨϙʔτͱ
Privacy Nutrition LabelsʢϓϥΠόγʔϥϕϧʣ
• Ϣʔβ͕ΞϓϦΛμϯϩʔυ͢ΔલʹΞϓϦͷϓϥΠόγʔɹํΛΔͨΊͷͷ• αʔυύʔςΟSDKͷ༰өͤ͞Δඞཁ͕͋Δ• App StoreͰݟΔ͜ͱ͕Ͱ͖Δ• WWDC20Ͱൃද͞Εͨ• 2021ͷय़͔ΒରԠඞਢϓϥΠόγʔϥϕϧͱ
ϓϥΠόγʔϥϕϧྫIUUQTXXXBQQMFDPNKQQSJWBDZMBCFMT
࣮ࡍͷରԠͪ͜ΒIUUQTTQFBLFSEFDLDPNGSPNBUPNJPTEDKBQBO
Privacy Manifests
• αʔυύʔςΟSDK͕ͲΜͳϓϥΠόγʔใΛऩू͍ͯ͠Δͷ͔ΛΞϓϦ։ൃऀ͕ΔͷେมϓϥΠόγʔϥϕϧରԠେม
• WWDC23Ͱൃද͞Εͨ• SDK͕ऩू͢ΔσʔλλΠϓɺͲͷΑ͏ʹ༻͞ΕΔ͔ͳͲ͕એݴ͞Ε͍ͯΔ• αʔυύʔςΟSDK։ൃऀPrivacyInfo.xcprivacyͱ͍͏໊લͷϑΝΠϧΛ࡞͢ΔPrivacy Manifests͕ొ
• ϓϩδΣΫτͷશͯͷPrivacy ManifestsΛूͨ͠Ϩϙʔτ• Xcode 15ͰɺApp Store͚ϏϧυΛ͢Δ࣌ʹग़ྗͰ͖Δ• ͜ΕΛݩʹϓϥΠόγʔϥϕϧΛهड़͢Δͱྑ͍Privacy report
Privacy reportIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
• ར༻͢Δͷʹʮཧ༝͕ඞཁͳAPIʯ• ༻͢Δ߹ɺͦͷཧ༝ΛPrivacy Manifests্Ͱ1ͭҎ্બ͢Δඞཁ͕͋ΔRequired Reason API
• 2023ळҎ߱ɺબ͍ͯ͠ͳ͚Ε։ൃऀʹ௨͕ߦ͘• 2024य़Ҏ߱ɺ৽ن/طଘ྆ํͷΞϓϦʹબ͕͚ٛΒΕΔRequired Reason
• File timestamp APIs• System boot time APIs• Disk space APIs• Active keyboard APIs• User defaults APIsRequired Reason APIϦετIUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOCVOEMFSFTPVSDFTQSJWBDZ@NBOJGFTU@fiMFTEFTDSJCJOH@VTF@PG@SFRVJSFE@SFBTPO@BQJ
ৄ͘͠…ʁIUUQTGPSUFFKQJPTEDKBQBOQSPQPTBMECCFCCEFBECD
ϓϥΠόγʔΫΠζ
• ৹ࠪΨΠυϥΠϯɺHuman Interface GuidelinesΛݩʹΫΠζΛ࡞• ࣍ͷ֤ઃਖ਼͍͠Ͱ͠ΐ͏͔ʁϓϥΠόγʔͷཧղΛਂΊΑ͏
τϥοΩϯάͷڐՄΛಘΔͨΊʹγεςϜΞϥʔτΛग़͢߹ɺɹτϥοΩϯάΛڐՄͯ͠΄͍͠ཧ༝Λઆ໌͢Δը໘ΛલʹڬΜͰྑ͍ ⭕ or ❌Q1.
લʹը໘ΛڬΜͰOKɻHuman Interface GuidelinesͰʮϓϨΞϥʔτɹը໘ɺΠϯυɺϏϡʔʯʹͯɺͦͷද͕ࣔຬ͖ͨ͢ཁ݅Λ͍ࣔͯ͠Δɻͨͩ͠ɺʮΩϟϯηϧʯͳͲͷճආϘλϯΛදࣔɹ͢ΔͷNGɻA1. ⭕IUUQTEFWFMPQFSBQQMFDPNKQEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTQSJWBDZ1SFBMFSUTDSFFOTXJOEPXTPSWJFXT
࣍ͷέʔετϥοΩϯάʹ֘͢Δ ⭕ or ❌ʮࣗͷΞϓϦͰऩूͨ͠ใͱαʔυύʔςΟͷσʔλͷඥ͚͕ϢʔβͷσόΠε্ͰͷΈߦΘΕɺϢʔβσόΠεΛಛఆͰ͖ΔΑ͏ͳํ๏ͰσόΠεͷ֎෦ʹૹ৴͞ΕΔ͜ͱ͕ͳ͍ʯQ2.
σόΠεͷ֎෦ʹૹ৴͞Εͯͳ͍ͷͰτϥοΩϯάʹ֘͠ͳ͍ɻAppTrackingTransparencyϑϨʔϜϫʔΫΛͬͯϢʔβ͔ΒڐՄΛಘΔඞཁͳ͍ɻA2. ❌IUUQTEFWFMPQFSBQQMFDPNKQBQQTUPSFVTFSQSJWBDZBOEEBUBVTF
LocationButtonΛλοϓͯ͠Ґஔใͷ༻ΛڐՄ͠·ͨ͠ɻ͜ͷ߹ɺ࣍ճىಈ࣌ʹλοϓͯ͠࠶γεςϜΞϥʔτ͕ɹग़ͯ͘Δ͜ͱͳ͍ ⭕ or ❌Q3.
࠶γεςϜΞϥʔτ͕ग़ͯ͘Δ͜ͱͳ͍ɻϢʔβ͕ΞϓϦΛΩϧ͢ΔͱڐՄແޮʹͳΔ͕ɺ࣍ʹLocationButtonΛλοϓͨ͠ͱ͖ʹ·ͨڐՄ͕༗ޮʹͳΔɻA3. ⭕IUUQTEFWFMPQFSBQQMFDPNKQEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTQSJWBDZ-PDBUJPOCVUUPO
ݱࡏ͕Θ͔Βͳ͍ͱҙຯ͕ͳ͍ΞϓϦͳͷͰɺҐஔใͷڐ͕ಘΒΕͳ͔ͬͨΒͦͷػೳ͑ͳ͍Α͏ʹͨ͠ ⭕ or ❌Q4.
ڐՄ͕ಘΒΕͳͯ͘ػೳΛར༻Ͱ͖ΔΑ͏ͳସखஈΛߟ͑Δ͖ɻྫ͑༣ศ൪߸ΛखಈͰೖྗ͓͓ͤͯ͞ΑͦͷҐஔΛѲ͢Δɹ͜ͱͰସͰ͖ͳ͍͔ͳͲΛݕ౼͢ΔɻA4. ❌IUUQTEFWFMPQFSBQQMFDPNKQBQQTUPSFSFWJFXHVJEFMJOFTQSJWBDZ
ECαʔϏεͷΞϓϦΛ։ൃ͍ͯ͠·͢ɻੜΫʔϙϯΛɹ͍ͨ͠ͷͰɺϢʔβͷੜཝΛඞਢ߲ʹͨ͠ɻ⭕ or ❌Q5.
ੜཝΛඞਢʹ͢Δ͖Ͱͳ͍ɻECΞϓϦͷओཁػೳγϣοϐϯάͰ͋Γɺੜ͕Θ͔Βͳͯ͘ར༻Ͱ͖ΔͣɻΑͬͯɺҙ߲ʹ͢Δͷ͕ྑ͍ɻA5. ❌IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZUFDIUBMLT
͍͍తจࣈྻ͕ࢥ͍ු͔ͳ͔ͬͨͷͰɺతจࣈྻΛઃఆɹͤͣʹ৹ࠪఏग़ͨ͠ɻ⭕ or ❌Q6.
తจࣈྻඞͣઃఆ͢Δɻઃఆͤͣʹ৹ࠪఏग़ͯ͠ɺϦδΣΫτ͞Εͯ͠·ͬͨྫ͋Δɻɹͦͦઃఆ͠ͳ͍ͱΫϥογϡͯ͠͠·͏߹͋ΔɻA6. ❌
·ͱΊ
• ϓϥΠόγʔΛૄ͔ʹ͠ͳ͍Α͏ʹ͠Α͏• ϓϥΠόγʔ4ݪଇΛक͍ͬͯΔ͔ࣗ͠Α͏• దͳతจࣈྻΛઃఆ͠Α͏ΞϓϦΛ࡞Δͱ͖
એ
• डΛ௨ա͙ͯ͢͠ͷॴʹ͋Γ·͢• ΫΠζ/Ξϯέʔτʹճ͢ΔͱΠΠίτ͕͋ΔͷͰͥͻૣΊʹΏΊΈεϙϯαʔϒʔεʹ͓ӽ͍ͩ͘͠͞• ΤϯδχΞืूͯ͠ΔͷͰڵຯ͋ΔํͥͻͲ͏ͧΏΊΈεϙϯαʔϒʔεΛग़ͯ͠·͢
͓ΘΓ