Slide 1

Slide 1 text

ojun ϢχοτςετΛֶΜͩ࣍ʹ ஌Γ͔ͨͬͨ 
 Appleඪ४APIʹ ର͢Δςετͷ΍Γํ

Slide 2

Slide 2 text

ࣗݾ঺հ • ໊લ • ojunʢ͓͡ΎΜʣ • ॴଐ • pixivࣄۀຊ෦ΞϓϦΤϯδχΞϦϯά • ࠷ۙ͸·͍ͬͯΔ͜ͱ • αʔϞϯϥϯ

Slide 3

Slide 3 text

ࠓճͷൃදʹ͍ͭͯ

Slide 4

Slide 4 text

ࠓճͷൃදʹ͍ͭͯ • Appleඪ४APIʹରͯ͠ϢχοτςετΛ௥Ճ͠Α͏ͱͯ͠ϋϚͬͨ͜ͱ ͱɺͦͷղܾํ๏Λɺ؆୯ͳσϞΞϓϦΛ௨ͯ͠ൃද͠·͢ • ಛʹࠓճ͸ҎԼͷΦϒδΣΫτʹରͯ͠ςετΛ௥Ճͨ͠࿩Λ͠·͢ • UNUserNoti fi cationCenter

Slide 5

Slide 5 text

ର৅

Slide 6

Slide 6 text

ର৅ • Ϣχοτςετͷॻ͖ํΛֶͼ࢝Ίͨਓ • ΞʔΩςΫνϟʔΛֶͼ࢝Ίͨਓ

Slide 7

Slide 7 text

σϞΞϓϦ֓ཁ

Slide 8

Slide 8 text

σϞΞϓϦ֓ཁ • 1೔1ճ௨஌͕དྷΔϦϚΠϯυΞϓϦ • ෳ਺ͷλεΫ͕ొ࿥Ͱ͖Δ • ొ࿥ͨ͠λΠϛϯά͔Β24 * n࣌ؒޙʹϩʔΧϧ௨஌͕དྷΔ • λεΫΛ࡟আͰ͖Δ

Slide 9

Slide 9 text

σϞΞϓϦ֓ཁ

Slide 10

Slide 10 text

σϞΞϓϦ֓ཁ 􀄫

Slide 11

Slide 11 text

σϞΞϓϦ֓ཁ 􀅉 􀄫

Slide 12

Slide 12 text

σϞΞϓϦ֓ཁ 􀅉 􀄫 􀄫

Slide 13

Slide 13 text

σϞΞϓϦ֓ཁ • ϩʔΧϧ௨஌Λද͢ߏ଄ମΛఆٛ • ߏ଄ମʹ͸ҎԼͷ3͕ͭଘࡏ • ID • λΠτϧจݴ • ϘσΟͷจݴ

Slide 14

Slide 14 text

σϞΞϓϦ֓ཁ • ొ࿥ͨ͠৘ใ͸UserDefaultsͰอଘ • ௥Ճ͞ΕͨλΠϛϯάͰ 
 UNUserNoti fi cationCenterʹ௥Ճ • ͪͳΈʹ 
 UNUserNoti fi cationCenterͷpendingRequest 
 Λ࢖͏Α͏ʹ͢Ε͹UserDefaultsʹอଘ͢Δඞཁ͸ 
 ͳ͘ͳΔ

Slide 15

Slide 15 text

Schedulerͷৄࡉ

Slide 16

Slide 16 text

Schedulerͷৄࡉ

Slide 17

Slide 17 text

Schedulerͷৄࡉ

Slide 18

Slide 18 text

Schedulerͷৄࡉ

Slide 19

Slide 19 text

লུ

Slide 20

Slide 20 text

লུ

Slide 21

Slide 21 text

Schedulerͷৄࡉ

Slide 22

Slide 22 text

Schedulerͷৄࡉ

Slide 23

Slide 23 text

Schedulerͷৄࡉ

Slide 24

Slide 24 text

Schedulerͷৄࡉ

Slide 25

Slide 25 text

Schedulerͷৄࡉ

Slide 26

Slide 26 text

• SchedulerΛੜ੒ͨ͠ޙʹ೚ҙͷϝιουΛݺͼग़͢ • Ҿ਺ʹ͸೚ҙͷLocalNoti fi cationΛ௥Ճ͢Δ Schedulerͷ࢖͍ํ

Slide 27

Slide 27 text

σϞΞϓϦͷ࣮ߦ

Slide 28

Slide 28 text

σϞΞϓϦͷ࣮ߦ • ӈ্ͷʮ+ʯϘλϯ͔ΒλεΫΛ௥Ճ͢Δ • ௥Ճͨ͠λεΫ͕໰୊ͳ͘දࣔ͞ΕΔ • λεΫΛ௥Ճͨ͠ޙͷdebugදࣔ͸࣍ͷΑ͏ʹͳΔ

Slide 29

Slide 29 text

• ໰୊ͳ͘௨஌ͷpending͕Ͱ͖͍ͯΔʂ🎉 λεΫΛ௥Ճͨ࣌͠ͷdebugදࣔ

Slide 30

Slide 30 text

ςετ௥Ճ͢Δͧʂ

Slide 31

Slide 31 text

௥Ճ͢Δςετͷ಺༰

Slide 32

Slide 32 text

• ඞཁͳ߲໨Λclass֎ʹఆٛ ςετ֓ཁ

Slide 33

Slide 33 text

• ඞཁͳ߲໨Λclass֎ʹఆٛ • localNoti fi cationΛม਺ͱͯ͠ 
 ఆٛ ςετ֓ཁ

Slide 34

Slide 34 text

• ҎԼͷςετΛॻ͘৔߹ɺpendig͞ΕͨϩʔΧϧ௨஌ΛऔΓग़͢͜ͱ͕ Ͱ͖ͳ͍ˠSchedulerΛमਖ਼ طଘͷModelͷ໰୊఺

Slide 35

Slide 35 text

লུ

Slide 36

Slide 36 text

লུ

Slide 37

Slide 37 text

লུ

Slide 38

Slide 38 text

• setLocalNoti fi cationΛ௥Ճͯ͠ϩʔΧϧ௨஌Λొ࿥ 
 ʢ಺༰: ຖ೔΍Δ͜ͱ / Ոʹண͍ͨΒ͓ṟΛग़͢ ʣ ςετΛ௥Ճ͢Δ

Slide 39

Slide 39 text

• ͖ͬ͞मਖ਼ͨ͠ม਺Λར༻ͯ͠pending͞Εͨ௨஌ΛऔΓग़͠ςετ͢ Δ ςετΛ௥Ճ͢Δ

Slide 40

Slide 40 text

• ඇಉظͷςετͳͷͰexpectionΛઃఆ͢Δ ςετΛ௥Ճ͢Δ

Slide 41

Slide 41 text

• AssertEqualͷޙʹful fi ll()͢Δ ςετΛ௥Ճ͢Δ

Slide 42

Slide 42 text

• ςετΛ࣮ߦ͢Δͱ੒ޭ͢Δ🎉 ςετΛ௥Ճ͢Δ

Slide 43

Slide 43 text

࣮ػͰΞϓϦΛىಈ͢Δͱɾɾɾ

Slide 44

Slide 44 text

࣮ػͰΞϓϦΛىಈ͢Δͱɾɾɾ 􀃯

Slide 45

Slide 45 text

Կ͕໰୊ͩͬͨͷ͔ʁ

Slide 46

Slide 46 text

Կ͕໰୊ͩͬͨͷ͔ • UNUserNoti fi cationCenter.current()ΛςετͰ௚઀ݺͼग़ͯ͠͠·ͬͨ লུ

Slide 47

Slide 47 text

লུ

Slide 48

Slide 48 text

Ͳ͏͢Ε͹Α͔ͬͨͷ͔

Slide 49

Slide 49 text

• UNUserNoti fi cationCenter.current()ΛMock͢Δ • Mock͢Δ͜ͱͰ • debug / production → UNUserNoti fi cationCenter.current() • test → Mockͨ͠Ϟϊ Ͳ͏͢Ε͹Α͔͔ͬͨ

Slide 50

Slide 50 text

• UserDefaultsͰ͋Ε͹ suiteName Λར༻͢Δ͜ͱͰςετ͢Δࡍʹ debugʹӨڹΛ༩͑ͳ͍Α͏ʹ͢Δ͜ͱ͕Մ • UserDefaults(suiteName: “pixiv_app_night_for_test”) • ͔͠͠ɺUNUserNoti fi cationCenterʹ͸ଘࡏ͠ͳ͍ Ͳ͏΍ͬͯMock͢Δͷ͔

Slide 51

Slide 51 text

• protocolΛར༻͢Δ͜ͱͰඪ४APIʹରͯ͠΋MockΛߦ͑ΔΑ͏ʹ͢Δ ͦ͜Ͱ 6/6TFS/PUJ fi QSPUPDPM 6/6TFS/PUJ fi EFCVHSFMFBTF UFTU

Slide 52

Slide 52 text

• SchedulerΛ࡞Δ࣌ʹߦ͍ͬͯͨ͜ͱͱಉ༷ͷ͜ͱΛߦ͏ ͦ͜Ͱ

Slide 53

Slide 53 text

protocolΛఆٛ

Slide 54

Slide 54 text

ར༻͢ΔϝιουΛఆٛ

Slide 55

Slide 55 text

ར༻͢ΔϝιουΛఆٛ

Slide 56

Slide 56 text

extensionΛར༻ͯ͠४ڌͤ͞Δ

Slide 57

Slide 57 text

Jump to De fi nitionΛ࢖͏ͱָ

Slide 58

Slide 58 text

Jump to De fi nitionΛ࢖͏ͱָ

Slide 59

Slide 59 text

Jump to De fi nitionΛ࢖͏ͱָ

Slide 60

Slide 60 text

Jump to De fi nitionΛ࢖͏ͱָ

Slide 61

Slide 61 text

extensionΛར༻ͯ͠४ڌͤ͞Δ

Slide 62

Slide 62 text

Schedulerͷमਖ਼ ͦͷ1

Slide 63

Slide 63 text

Schedulerͷमਖ਼ ͦͷ1

Slide 64

Slide 64 text

Schedulerͷमਖ਼ ͦͷ1

Slide 65

Slide 65 text

• test༻ͷϞσϧੜ੒ϝιουΛ௥Ճ Schedulerͷमਖ਼ ͦͷ2

Slide 66

Slide 66 text

• test༻ͷϞσϧੜ੒ϝιουΛ௥Ճ Schedulerͷमਖ਼ ͦͷ2

Slide 67

Slide 67 text

Schedulerͷमਖ਼ ͦͷ2 • γϯάϧτϯΫϥε౳Ͱ `private init`͕࣮૷͞Ε͍ͯͨ৔߹ʹ༗ޮ

Slide 68

Slide 68 text

Mockͷ࡞੒

Slide 69

Slide 69 text

Mockͷ࡞੒

Slide 70

Slide 70 text

Mockͷ࡞੒

Slide 71

Slide 71 text

Mockͷ࡞੒

Slide 72

Slide 72 text

Mockͷ࡞੒

Slide 73

Slide 73 text

Mockͷ࡞੒

Slide 74

Slide 74 text

Mockͷ࡞੒

Slide 75

Slide 75 text

ςετमਖ਼

Slide 76

Slide 76 text

ςετͷमਖ਼

Slide 77

Slide 77 text

ςετͷमਖ਼

Slide 78

Slide 78 text

ςετͷमਖ਼

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

No content

Slide 81

Slide 81 text

No content

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

ࠓ౓ͦ͜ςετ੒ޭ🎉 􀇻

Slide 84

Slide 84 text

·ͱΊ

Slide 85

Slide 85 text

·ͱΊ • Ϣχοτςετ࣌ʹMockΛར༻͠ͳ͍ͱdebugϏϧυʹӨڹΛ༩͑Δ ͜ͱ͕͋Δ • ඪ४APIʹରͯ͠MockΛ͢Δͱ͖͸protocolΛ࡞੒ͯ͠ର৅ͷΫϥε ʢΦϒδΣΫτʣʹ४ڌͤ͞Δ

Slide 86

Slide 86 text

·ͱΊ

Slide 87

Slide 87 text

·ͱΊ

Slide 88

Slide 88 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ