Slide 1

Slide 1 text

Introducing @import Framework 2015/05/16 yidev#19 @dealforest Toshihro Morimoto

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

Crying DFTDebugScreenshot cocoapods-browser Tuna

Slide 4

Slide 4 text

https://github.com/dealforest/Tuna

Slide 5

Slide 5 text

by AlcatrazTour

Slide 6

Slide 6 text

ࠓ೔͸ Xcode 6.3 ͔Β௥Ճ͞Εͨ ػೳʹ͍ͭͯͷ͓࿩Ͱ͢

Slide 7

Slide 7 text

Xcode 6 Release Notes

Slide 8

Slide 8 text

Έͳ͞Μ࢖ͬͯ·͔͢ʁ

Slide 9

Slide 9 text

࢖͍ํ

Slide 10

Slide 10 text

(lldb) p @import Foundation (lldb) p @import UIKit

Slide 11

Slide 11 text

͜Ε·ͫͰศརͰ͢

Slide 12

Slide 12 text

Ͱ͖Δ͜ͱ • Framework ಺Ͱఆٛ͞Εͨఆ਺΍ Enum ΛࢀরͰ͖Δ • ؔ਺ఆ͔ٛΒ࣮ߦ࣌ʹ҉໧తʹΩϟε τͯ͘͠ΕΔ

Slide 13

Slide 13 text

(lldb) po [[NSString alloc] initWithData:data encoding:4]

Slide 14

Slide 14 text

(lldb) p @import Foundation (lldb) po [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]

Slide 15

Slide 15 text

͞Α͏ͳΒ ϚδοΫφϯόʔ

Slide 16

Slide 16 text

(lldb) po (CGRect)[self.view frame]

Slide 17

Slide 17 text

(lldb) p @import UIKit (lldb) po [self.view frame]

Slide 18

Slide 18 text

͞Α͏ͳΒ use of undeclared identifier 'CGRect'

Slide 19

Slide 19 text

͕ͩ ੈͷதͦΜͳʹ؁͘ͳ͔ͬͨ…

Slide 20

Slide 20 text

@import ͢Δͱ ࠶ىಈ͢Δ·Ͱ͸༗ޮ

Slide 21

Slide 21 text

Μʁʁʁ

Slide 22

Slide 22 text

͜͜Ͱצͷ͍͍ਓ͸ ؾ͍ͮͨͰ͠ΐ͏

Slide 23

Slide 23 text

͜Ε… Run ͢Δ౓ʹຖճ ࣮ߦ͠ͳ͍ͱ͍͚ͳ͍ͷʁ

Slide 24

Slide 24 text

ͦ͏Ͱ͢ ͠ͳ͍ͱ͍͚ͳ͍ΜͰ͢

Slide 25

Slide 25 text

/(^o^)\ Φϫλ

Slide 26

Slide 26 text

ࠓ೔͸ͦΕΛ Ͳ͏ʹ͔͓ͨ͠࿩Ͱ͢

Slide 27

Slide 27 text

(ॏཁࣄ߲) ྦͳ͠Ͱ͸ޠΕͳ͍ͳ͍ͷͰ ௐ΂͍ͯͬͨϓϩηεΛશͯࡽ͠·͢

Slide 28

Slide 28 text

1. lldbinit Ͱ࣮ߦ͢Δ lldbinit ʹॻ͚͹ಡΈࠐ·ΕΔ λΠϛϯάͰ ධՁ͞ΕΔ͔Β͍͚Δ͸ͣ

Slide 29

Slide 29 text

~/.lldbinit p @import Foundation p @import UIKit

Slide 30

Slide 30 text

΍ͬͪΌμϝʂʂʂ ઈରʂʂʂʂ

Slide 31

Slide 31 text

΍Δͱޙչ͔͠͠·ͤΜʂ ॻ͍ͯΔਓ͸ଈࠁফ͠·͠ΐ͏ʂ

Slide 32

Slide 32 text

@import ͷಛੑΛࢥ͍ฦ͍ͯͩ͘͠͞ ͍͜ͰҰ౓ಡΈࠐ·ΕΔͱ ೋ౓ͱಡΈࠐ·ΕΔ͜ͱ͕ͳ͍Ͱ͢

Slide 33

Slide 33 text

lldbinit ͕ಡΈࠐ·Εͨ࣌ʹධՁͯ͠ ͠·͏ͱɺͦͷධՁ͞Εͨ಺༰͸ϒ ϨΠΫͨ͠ࡍʹҾ͖ܧ͛ͳ͍ (ڍಈ͔Βਪଌ͢Δͱ͜Μͳײ͡)

Slide 34

Slide 34 text

/(^o^)\ Φϫλ

Slide 35

Slide 35 text

2. LLDB ͷίϚϯυΛ࡞੒ͯ͠ ஗Ԇ࣮ߦ͢Δ

Slide 36

Slide 36 text

lldbinit Ͱ python ͷίʔυΛ import ͯ͠ɺpython ଆͰ஗ԆධՁͯ͠΍Ε ͹ @import Ͱ͖ΔͷͰ͸ͳ͍͔

Slide 37

Slide 37 text

import_framework.py #!/usr/bin/env python import lldb import time import threading def import_framework(): for framework in [ 'Foundation', 'UIKit' ]: lldb.debugger.HandleCommand('p @import ' + framework) def __lldb_init_module(debugger,internal_dict): threading.Timer(3, import_framework).start() time.sleep(5) print"load ok" .lldbinit command script import import_framework.py

Slide 38

Slide 38 text

ࢼͨ͠ݶΓ Timer ͕ൃՐ͠ͳ͍Ͱ͢ sleep ͯ͠΋ແࢹ͞ΕΔ

Slide 39

Slide 39 text

͜Ε΋ (1) ͱಉ༷ʹ ௚͙ʹޙչͯ͠͠·͏ͷͰ ΍Ίͨ΄͏͕͍͍Ͱ͢

Slide 40

Slide 40 text

/(^o^)\ Φϫλ

Slide 41

Slide 41 text

ͭ·Γ͸ LLDB ͕࣮ߦͰ͖Δ ४උ͕੔ͬͨޙʹ @import Λ͠ ͳ͍ͱ͍͚ͳ͍ʂ

Slide 42

Slide 42 text

3. Xcode Plugin ͳΒ͍͚ΔͷͰ͸…

Slide 43

Slide 43 text

DebuggerLLDB.ideplugin ͱ͍͏ͷΛ ࢖͑͹͍͚ͦ͏…

Slide 44

Slide 44 text

͜Ε͸ͱͯ΋ ͭΒ͍ಓͷΓͰͨ͠

Slide 45

Slide 45 text

ۤ೉ͷ຤ʹΑ͏΍͘ LLDB ىಈ࣌ʹධՁ͢Δ͜ͱʹ ੒ޭ͠·ͨ͠

Slide 46

Slide 46 text

Tuna v0.9.4 Ͱ͸αϙʔτ͍ͯ͠ΔͷͰ Πϯετʔϧ͢Δͱ ຖճೖྗ͢Δඞཁ͕ͳ͘ͳΓ·͢

Slide 47

Slide 47 text

·ͱΊ Tuna v0.9.4 Λ࢖͑͹ࣗಈతʹ Foundation ͱ UIKit ͕ import ͞Εͨ LLDB ϥΠϑΛ͓͘ Δ͜ͱ͕Ͱ͖·͢ʂ

Slide 48

Slide 48 text

·ͱΊ LLDB ͷىಈޙʹίϚϯυΛ࣮ߦ͢Δͷ͸ धཁ͕͋Γͦ͏ͳͷͰ(͓ͦΒ͘ศར)ɺผ Plugin ʹͯ͠ఏڙ͢Δ͔΋͠Ε·ͤΜ

Slide 49

Slide 49 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠