ojunϢχοτςετΛֶΜͩ࣍ʹ Γ͔ͨͬͨ Appleඪ४APIʹ ର͢ΔςετͷΓํ
View Slide
ࣗݾհ• ໊લ• ojunʢ͓͡ΎΜʣ• ॴଐ• pixivࣄۀຊ෦ΞϓϦΤϯδχΞϦϯά• ࠷ۙ·͍ͬͯΔ͜ͱ• αʔϞϯϥϯ
ࠓճͷൃදʹ͍ͭͯ
ࠓճͷൃදʹ͍ͭͯ• Appleඪ४APIʹରͯ͠ϢχοτςετΛՃ͠Α͏ͱͯ͠ϋϚͬͨ͜ͱͱɺͦͷղܾํ๏Λɺ؆୯ͳσϞΞϓϦΛ௨ͯ͠ൃද͠·͢• ಛʹࠓճҎԼͷΦϒδΣΫτʹରͯ͠ςετΛՃͨ͠Λ͠·͢• UNUserNotificationCenter
ର
ର• Ϣχοτςετͷॻ͖ํΛֶͼ࢝Ίͨਓ• ΞʔΩςΫνϟʔΛֶͼ࢝Ίͨਓ
σϞΞϓϦ֓ཁ
σϞΞϓϦ֓ཁ• 11ճ௨͕དྷΔϦϚΠϯυΞϓϦ• ෳͷλεΫ͕ొͰ͖Δ• ొͨ͠λΠϛϯά͔Β24 * n࣌ؒޙʹϩʔΧϧ௨͕དྷΔ• λεΫΛআͰ͖Δ
σϞΞϓϦ֓ཁ
σϞΞϓϦ֓ཁ
σϞΞϓϦ֓ཁ
σϞΞϓϦ֓ཁ• ϩʔΧϧ௨Λද͢ߏମΛఆٛ• ߏମʹҎԼͷ3͕ͭଘࡏ• ID• λΠτϧจݴ• ϘσΟͷจݴ
σϞΞϓϦ֓ཁ• ొͨ͠ใUserDefaultsͰอଘ• Ճ͞ΕͨλΠϛϯάͰ UNUserNotificationCenterʹՃ• ͪͳΈʹ UNUserNotificationCenterͷpendingRequest Λ͏Α͏ʹ͢ΕUserDefaultsʹอଘ͢Δඞཁ ͳ͘ͳΔ
Schedulerͷৄࡉ
লུ
• SchedulerΛੜͨ͠ޙʹҙͷϝιουΛݺͼग़͢• ҾʹҙͷLocalNotificationΛՃ͢ΔSchedulerͷ͍ํ
σϞΞϓϦͷ࣮ߦ
σϞΞϓϦͷ࣮ߦ• ӈ্ͷʮ+ʯϘλϯ͔ΒλεΫΛՃ͢Δ• Ճͨ͠λεΫ͕ͳ͘දࣔ͞ΕΔ• λεΫΛՃͨ͠ޙͷdebugදࣔ࣍ͷΑ͏ʹͳΔ
• ͳ͘௨ͷpending͕Ͱ͖͍ͯΔʂ🎉λεΫΛՃͨ࣌͠ͷdebugදࣔ
ςετՃ͢Δͧʂ
Ճ͢Δςετͷ༰
• ඞཁͳ߲Λclass֎ʹఆٛςετ֓ཁ
• ඞཁͳ߲Λclass֎ʹఆٛ• localNotificationΛมͱͯ͠ ఆٛςετ֓ཁ
• ҎԼͷςετΛॻ͘߹ɺpendig͞ΕͨϩʔΧϧ௨ΛऔΓग़͢͜ͱ͕Ͱ͖ͳ͍ˠSchedulerΛमਖ਼طଘͷModelͷ
• setLocalNotificationΛՃͯ͠ϩʔΧϧ௨Λొ ʢ༰: ຖΔ͜ͱ / Ոʹண͍ͨΒ͓ṟΛग़͢ ʣςετΛՃ͢Δ
• ͖ͬ͞मਖ਼ͨ͠มΛར༻ͯ͠pending͞Εͨ௨ΛऔΓग़͠ςετ͢ΔςετΛՃ͢Δ
• ඇಉظͷςετͳͷͰexpectionΛઃఆ͢ΔςετΛՃ͢Δ
• AssertEqualͷޙʹfulfill()͢ΔςετΛՃ͢Δ
• ςετΛ࣮ߦ͢Δͱޭ͢Δ🎉ςετΛՃ͢Δ
࣮ػͰΞϓϦΛىಈ͢Δͱɾɾɾ
࣮ػͰΞϓϦΛىಈ͢Δͱɾɾɾ
Կ͕ͩͬͨͷ͔ʁ
Կ͕ͩͬͨͷ͔• UNUserNotificationCenter.current()ΛςετͰݺͼग़ͯ͠͠·ͬͨলུ
Ͳ͏͢ΕΑ͔ͬͨͷ͔
• UNUserNotificationCenter.current()ΛMock͢Δ• Mock͢Δ͜ͱͰ• debug / production → UNUserNotificationCenter.current()• test → Mockͨ͠ϞϊͲ͏͢ΕΑ͔͔ͬͨ
• UserDefaultsͰ͋Ε suiteName Λར༻͢Δ͜ͱͰςετ͢ΔࡍʹdebugʹӨڹΛ༩͑ͳ͍Α͏ʹ͢Δ͜ͱ͕Մ• UserDefaults(suiteName: “pixiv_app_night_for_test”)• ͔͠͠ɺUNUserNotificationCenterʹଘࡏ͠ͳ͍Ͳ͏ͬͯMock͢Δͷ͔
• protocolΛར༻͢Δ͜ͱͰඪ४APIʹରͯ͠MockΛߦ͑ΔΑ͏ʹ͢Δͦ͜Ͱ6/6TFS/PUJfiQSPUPDPM6/6TFS/PUJfiEFCVHSFMFBTFUFTU
• SchedulerΛ࡞Δ࣌ʹߦ͍ͬͯͨ͜ͱͱಉ༷ͷ͜ͱΛߦ͏ͦ͜Ͱ
protocolΛఆٛ
ར༻͢ΔϝιουΛఆٛ
extensionΛར༻ͯ͠४ڌͤ͞Δ
Jump to DefinitionΛ͏ͱָ
Schedulerͷमਖ਼ ͦͷ1
• test༻ͷϞσϧੜϝιουΛՃSchedulerͷमਖ਼ ͦͷ2
Schedulerͷमਖ਼ ͦͷ2• γϯάϧτϯΫϥεͰ `private init`͕࣮͞Ε͍ͯͨ߹ʹ༗ޮ
Mockͷ࡞
ςετमਖ਼
ςετͷमਖ਼
ࠓͦ͜ςετޭ🎉
·ͱΊ
·ͱΊ• Ϣχοτςετ࣌ʹMockΛར༻͠ͳ͍ͱdebugϏϧυʹӨڹΛ༩͑Δ͜ͱ͕͋Δ• ඪ४APIʹରͯ͠MockΛ͢Δͱ͖protocolΛ࡞ͯ͠ରͷΫϥεʢΦϒδΣΫτʣʹ४ڌͤ͞Δ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ