Slide 1

Slide 1 text

YUMEMI.swift #7 - 15th/May/2020 Debugging To The Gate! freddi (@_ _ _freddi _ _ _) from LINE Fukuoka

Slide 2

Slide 2 text

ϫΠʹ͍ͭͯ • freddi (@_ _ _freddi _ _ _) • ৽ଔ̎೥໨@ LINE Fukuoka • try! Swift ͱ͔ొஃͨ͠ • Tokyo, NYC 2019

Slide 3

Slide 3 text

λΠτϧʹ͍ͭͯ • STEINS; GATEͱ͍͏Ξχϝͷओ୊Վ͕ݩωλ • ຊ౰͸ओਓެͷཱͪճΓΛΈͯσόοάज़Λ ֶͿ࿩ͩͬͨ • ͕ɺωλόϨʹͳΔͷͰͦͷ෦෼͸ׂѪ • Կ΋લ৘ใͳ͠ʹݟΔͷ͕໘നϙΠϯτ

Slide 4

Slide 4 text

͜ͷτʔΫͷझࢫ • σόοάͰͷߟ͑ํɾඞཁͳ͜ͱΛ਎ʹ͚ͭΔ • ຊ౰ʹ৽ਓ޲͚

Slide 5

Slide 5 text

࿩ͷྲྀΕ • ͍͔ͭ͘ͷʮΑ͋͘ΔσόοάͷέʔεʯΛ঺հ • ͦͷ࣌ͷ๻ͷߟ͑ͨྫΛܰ͘঺հ • ໾ཱͭπʔϧͱ͔΋঺հ • ݁ہσόοάͬͯͳʹʁ

Slide 6

Slide 6 text

σόοάͱ͸

Slide 7

Slide 7 text

σόοάͱ͸ • ίϯϐϡʔλϓϩάϥϜͷόάɾܽؕΛൃݟ͓ Αͼमਖ਼͠ɺಈ࡞Λ࢓༷௨Γͷ΋ͷͱ͢ΔͨΊ ͷ࡞ۀͰ͋Δ • By σόοά - Wikipedia • De “Bug”

Slide 8

Slide 8 text

ͲΜͳσόοάͷέʔε͕͋Δͷ͔ ※ ͍͍ͩͨ๻ͷܦݧྫ

Slide 9

Slide 9 text

ʮ͔͚ͯ͠·͏ʯίʔυ

Slide 10

Slide 10 text

ʮ͔͚ͯ͠·͏ʯίʔυ • ʮॻ͘ʯͱʮܽ͘ʯͷμϒϧϛʔχϯά • Swiftͷศརͳॻ͖ํ͕ىҼ͢Δόά • ৽ػೳΛ࣮૷͢Δࡍʹؒҧͬͯফͨ͠ίʔυ • ίϯύΠϧɾϏϧυ͕௨ͬͯ͠·͏

Slide 11

Slide 11 text

ʮ͔͚ͯ͠·͏ʯίʔυʢྫʣ • ͜ͷΫϥογϡόά͸ॻ͖ํʹىҼ static func showDialog(on viewController: UIViewController) { let viewController = DialogViewController() viewController.present(viewController, animated: true) }

Slide 12

Slide 12 text

͜͏͍͏ͱ͖ͷσόοά • Ϋϥογϡ෦෼ΛաڈͷίʔυͱൺֱΛ͢Δ • ϓϩδΣΫτʹתೳʹͳͬͯΔͱͳ͓ྑ͍ • ม਺໊ͷ࢖͍ํʹ͸ؾΛ͚ͭͯΈΔ • ໾ׂΛߟ໊ྀͨ͠લΛ͚ͭΔ • viewController => dialogViewController

Slide 13

Slide 13 text

ݪҼͱτϦΨʔ͕ಉ͡Ͱ͋Δͱ͸ݶΒͳ͍

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

͜ͷهࣄͷ໘ന͍ϙΠϯτ • ۮવʮൃ۷ʯ͞Εͨόά • ϑΥʔΧεͯ͠Δػೳͱҧ͏ͷͰղ໌͕ࠔ೉ • ݪҼͱʮ࠶ݱํ๏ʯͷؔ࿈ੑ͕࠷ॳݟ͑ͳ͍

Slide 16

Slide 16 text

࣮ࡍʹ͋ͬͨ΍ͭʢྫʣ • ຖόʔδϣϯΞοϓޙʹىಈ࣌ͷΫϥογϡ • ى͖ͳ͍৔߹͕ଟ͔ͬͨͬΆ͍ • ͋Δόʔδϣϯ͔ΒϦϦʔε͢Δͨͼʹ … • खݩͰ࠶ݱෆՄ • ώϯτ͸ΫϥογϡղੳπʔϧͷϩάͷΈ

Slide 17

Slide 17 text

͜͏͍͏ͱ͖ͷσόοά • Ͱ͖ΔݶΓελοΫτϨʔεΛಡΉ • ϥΠϒϥϦͷίʔυ·ͰͨͲͬͯݪҼղ໌ • ߟ͑ΒΕΔ͢΂ͯͷέʔεΛચ͍ग़͢ • Ϋϥογϡݩͷؔ࿈ॲཧશ෦

Slide 18

Slide 18 text

ݪҼ • ΞϓϦͷΞοϓσʔτޙ͸ • DBͷϚΠάϨʔγϣϯ͕ඞਢ • ϚΠάϨʔγϣϯલʹDB΁ͷΞΫηε͕ൃՐ • σʔλͷෆ੔߹͕ى͖ͯΫϥογϡ͢Δ

Slide 19

Slide 19 text

ݪҼ • ͋Δόʔδϣϯ͔Β… • ىಈ࣌ʹσʔλΛऔಘ͢Δॲཧ౤ೖ • ऴྃ࣌ʹDBʹσʔλೖΕͯͨ • ͨ·ʹϚΠάϨʔγϣϯ͕஗͘ͳͬͯ

Slide 20

Slide 20 text

ରॲ • ελοΫτϨʔεͨͲͬͨΒDBΞΫηεͩͬͨ • ॳճىಈ࣌ͷDBͷॲཧચ͍ग़͠ • ॳճىಈ࣌ͷDBΞΫηεͷϦϑΝΫλ • ϚΠάϨʔγϣϯऴྃ࣌ʹΞΫηε͢Δ • DBΞΫηεॲཧͷݟ௨͠Λྑ͘͢Δ

Slide 21

Slide 21 text

ʮͰ͖Δʯ͕ʮ޲͍͍ͯΔʯͱ͸ݶΒͳ͍

Slide 22

Slide 22 text

Ͱ͖Δίʔυͷؒҧͬͨ࢖͍ํ • ͦΕͳΓʹ໽հͳ΍ͭ • Ͱ͖Δ͔Βͱ͍ͬͯɺ͍͋ͬͯΔͱ͸ݶΒͳ͍ • ʮͰ͖ΔʯόΠΞε͕͔͔ͬͯ͠·͏ • όΠΞεͰɺࠜຊతͳݪҼΈͳͤͳ͍

Slide 23

Slide 23 text

࣮ࡍʹ͋ͬͨ΍ͭʢྫʣ • UIPageViewControllerͷϖʔδભҠ࣌ͷॲཧ extension PageViewController : UIPageViewControllerDataSource { func pageViewController(…, viewControllerBeforeViewController … { ... callWhenPageChanged() // ϖʔδ͕มΘͬͨΒݺͼ͍ͨॲཧ ... /*Կ͔͠ΒͷViewControllerΛreturn͢Δॲཧ*/ }

Slide 24

Slide 24 text

࣮ࡍʹ͋ͬͨ΍ͭʢྫʣ • લͷίʔυ͸ؒҧ͍ • ͔ͨ͠ʹϖʔδભҠ࣌ʹݺ͹ΕΔ • ͕ɺॲཧͷ౎߹্ෳ਺ճݺ͹Εͯ͠·͏ • ͨ·ʹ͜ΕΛॻ͍ͯΔղઆαΠτ͕͋Δ • ղઆαΠτόΠΞεʹ΋஫ҙ

Slide 25

Slide 25 text

ݪҼ • UIPageViewControllerDataSource ͸ • ϖʔδભҠͷڍಈͷDelegate͡Όͳ͍ • UIPageViewControllerDelegate Λ࢖͓͏

Slide 26

Slide 26 text

͜͏͍͏ͱ͖ͷσόοά • AppleͷެࣜͷϦϑΝϨϯεΛͳΔ΂͘ಡ΋͏ • ୈ̍ʹΑΉ΂͖ղઆαΠτͰ͢ • ผͷղઆαΠτͰಘͨ಺༰͸ˢͰ΋ΈͯΈΔ

Slide 27

Slide 27 text

Ͱ͖Δίʔυͷؒҧͬͨ࢖͍ํʢྫʣ • ਖ਼ղྫͷίʔυ͕ͪ͜Β extension PageViewController: UIPageViewControllerDelegate { // δΣενϟʔʹΑΔભҠ͕ऴΘͬͨ৔߹ʹݺ͹ΕΔ func pageViewController(… previousViewControllers: [UIViewController], transitionCompleted: Bool) { ... callWhenPageChanged() // ϖʔδ͕มΘͬͨΒݺͼ͍ͨॲཧ

Slide 28

Slide 28 text

πʔϧΛ࢖͍͜ͳͦ͏

Slide 29

Slide 29 text

ਓతϨϏϡʔͷݶք • ਓؒ͸ෆ҆ఆʢਅཧʣ • ͦΜͳਓ͕ؒϨϏϡʔͯ͠΋౰વ͍͔ͭϛεΔ • ͳΒ࢖͑ΔπʔϧΛ࢖͓͏ɾ஌͓ͬͯ͜͏

Slide 30

Slide 30 text

ͨ͘͞Μͷπʔϧ • πʔϧ͸࢖͍͜ͳͤΔ΄ͲΑ͍ • όάΛݟ͚ͭΔͨΊͷ෢ثʹͳΔ • ࣗ෼ͰπʔϧΛ࡞Δͷ΋ྑ͍ • πʔϧΛ࡞ͬͨͷ΋ಉ͡໰୊ʹૺͬͨਓؒ

Slide 31

Slide 31 text

LLDB • ϒϨʔΫϙΠϯτઃఆ͢Δͱ͖ʹͰͯ͘ΔίϨ

Slide 32

Slide 32 text

LLDB • ͔͜͜Βݱࡏࢭ·͍ͬͯΔ৔ॴͷ৘ใ͕औΕΔ • po hoge ← ม਺hogeʹத਎͕ϩά͞ΕΔ

Slide 33

Slide 33 text

LLDB • LLDB Code Injection • ίʔυΛ஫ೖ༷ͯ͠ʑͳঢ়ଶΛ૝ఆͰ͖Δ • https://youtu.be/lm4sEcMxua0

Slide 34

Slide 34 text

Network Link Conditioner • ి೾ͷѱ͍ঢ়گͱ͔࠶ݱͰ͖Δ • https://dev.classmethod.jp/articles/network- link-conditioner/ • ͖ͬ͞ͷDBͷରॲͷͱ͖ʹ໾ཱͬͨ

Slide 35

Slide 35 text

XCTAssertNoLeak • ϝϞϦϦʔΫ͸ൃ೤ͱ͔ͷݪҼʹ΋ͳΔ • ϝϞϦϦʔΫΛςετͰݟ͚ͭΔ͜ͱ͕Ͱ͖Δ • ϨϏϡʔͰͷݟམͱ͠ΛΧόʔ • https://techlife.cookpad.com/entry/ 2020/03/03/115000

Slide 36

Slide 36 text

Gedatsu • Auto LayoutͷΤϥʔ͸ը໘ભҠΛ஗͘͢Δ • Auto LayoutͷΤϥʔ͸ݟʹ͍͘ɾɾɾ • ͜ͷΤϥʔϩάΛGedatsu͸ݟ΍͘͢͢Δ • https://bannzai.hatenadiary.jp/entry/ 2020/05/08/091825

Slide 37

Slide 37 text

Gedatsu

Slide 38

Slide 38 text

όά͸Ӆͣ͞ʹใࠂɾमਖ਼͢Δ

Slide 39

Slide 39 text

ʮζϧΛ͢ΔͳʯɺͰ͸ͳ͘ɾɾɾ • ζϧΛ͠ͳ͍ͷͰ͸ͳ͍ʢਓͱͯ͠౰વʣ • OSSͷόάͳΒ͹ Issue Λཱͯͯใࠂ͠Α͏ • ੈքͷ୭͔΋ͦΕʹࠔ͍ͬͯ·͢ • ͡Όͳ͍ͱɺ͍ͭ·Ͱͨͬͯ΋௚Γ·ͤΜ

Slide 40

Slide 40 text

ҙ֎ͱOSS׆ಈ΁ͷۙಓʹͳΔ • OSS ׆ಈ΁ܨ͕Δ • େ୾ʹमਖ਼ύονͱ͔ग़ͯ͠ΈΔ • ୭͔Β΋ධՁ͞ΕΔߦಈͰ͢ʂ • ΤϯδχΞͱͯ͠ͷܦݧ஋Ξοϓ

Slide 41

Slide 41 text

๻ͷྫ • OSSʹཉ͍͠ػೳΛ௥Ճͨ͠

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

ཁ͢Δʹσόοάͬͯܦݧ͡ΌͶʁ

Slide 47

Slide 47 text

ܦݧ஋্͍͛ͯ͜͏ • ͍͍ͩͨଠࣈʹͳ͍ͬͯΔ΍ͭ͸ܦݧ͕ؔ࿈ • πʔϧΛͨ͘͞Μ࢖͍ͬͯΔ͔ • ϦϑΝϨϯεΛͨ͘͞ΜಡΜͰΔ͔ • ͦͷόάΛ஌͍ͬͯΔ͔ • ίʔυΛॻ͍ͯόάʹଟ͘Ϳͪ౰ͨͬͯΔ͔

Slide 48

Slide 48 text

͋·ΓܦݧΛੵΉঢ়گ͕ݟ͔ͭΒͳ͍ • ࣗΒ͢͢ΜͰσόοά͢Δ͔͠ແ͍ • ͳʹ͔ͷϓϩδΣΫτʹ͍ΔͳΒɾɾɾ • όάͷνέοτʢҊ݅ʣΛࣗओతʹ΍Ζ͏ • OSSͰ΋͍͍Ͱ͢

Slide 49

Slide 49 text

·ͱΊ

Slide 50

Slide 50 text

·ͱΊ • ཁ͢Δʹσόοά͸ܦݧ͕ੜ͖ΔͷͰؤுΖ͏ • ୔ࢁίʔυॻ͍ͯόάͷઐ໳ՈʹͳΔ • πʔϧ͸࢖͑Δ͚ͩ࢖͓ͬͯ͘ etc…

Slide 51

Slide 51 text

ࢀߟจݙʢ֤ϖʔδʹࡌͤͯͳ͍΍ͭʣ • iOSDC Japan 2019: ςετέʔεͰ Ambiguous Layout Λൃݟ͢Δ • https://youtu.be/RMicLhmPY84

Slide 52

Slide 52 text

ࢀߟจݙʢ֤ϖʔδʹࡌͤͯͳ͍΍ͭʣ • όχϥͷΞΠεΛങͬͨͱ͖͚ͩंͷΤϯδϯ ͕͔͔Βͳ͘ͳΔෆࢥٞͳݱ৅ɺͦͷݪҼ͸ʁ • https://gigazine.net/news/20200511-vanilla- ice-allergic-car/

Slide 53

Slide 53 text

એ఻

Slide 54

Slide 54 text

try! Swift WorldͷΠϯετϥΫλʔͰ͢