Slide 1

Slide 1 text

AKKEY / AKIO ITAYA LLVM ͷυΩϡϝϯτಡΉӋ໨ʹͳͬͨ࿩ MatchingAgent, Inc. SwiftUI ಋೖͰ

Slide 2

Slide 2 text

໊લɿ൘୩ ߊྑɹ/ɹ͖͋ͬʔ झຯɿυϥΠϒ ׆ಈɿ@AkkeyLab Cyberagent, Inc. MatchingAgent, Inc. େֶೖֶޙϓϩάϥϛϯάʹҰ໨ࠍΕɺ18೥৽ଔ iOS ΤϯδχΞ ࣗݾ঺հ

Slide 3

Slide 3 text

AkkeyLab / AutoPreviewableɹ⭐ 5 AkkeyLab / XcodePreviewsTemplateɹ⭐ 1 AkkeyLab / StoryboardPreviewsBySwiftUIɹ⭐ 27 ࣗݾ঺հ I want a ⭐ !! I will do anything !!

Slide 4

Slide 4 text

SwiftUI※ ಋೖͯ͠·͢ʂ ※ XcodePreviews by SwiftUI

Slide 5

Slide 5 text

SwiftUI ಋೖͯ͠·͢ʂ

Slide 6

Slide 6 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 7

Slide 7 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ… iOS13 ະຬͱڞଘͤ͞ΔͨΊ UIKit Λ SwiftUI ʹରԠ

Slide 8

Slide 8 text

AkkeyLab / AutoPreviewableɹ⭐ 5 AkkeyLab / XcodePreviewsTemplateɹ⭐ 1 AkkeyLab / StoryboardPreviewsBySwiftUIɹ⭐ 27 ಋೖ͸؆୯͡Όͳ͔ͬͨ… I want a ⭐ !! I will do anything !!

Slide 9

Slide 9 text

࣮ߦʂ

Slide 10

Slide 10 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ… ͨͬͨ1ߦ҉߸Λు͍ͯϓϨϏϡʔ͕Τϥʔ

Slide 11

Slide 11 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ… ͱΓ͋͑ͣɺάάͬͯΈΔ͜ͱʹ

Slide 12

Slide 12 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 13

Slide 13 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 14

Slide 14 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 15

Slide 15 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 16

Slide 16 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 17

Slide 17 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 18

Slide 18 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 19

Slide 19 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 20

Slide 20 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ…

Slide 21

Slide 21 text

ಋೖ͸؆୯͡Όͳ͔ͬͨ… ৘ใ͕ ແ͍!! ͋Δ͋Δᶃ

Slide 22

Slide 22 text

ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ

Slide 23

Slide 23 text

ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ ਌੾৺͸૿ͨ͠΋ͷͷɺ FirebaseCore ͕ݟ౰ͨΒͳ͍ͱݴΘΕΔ

Slide 24

Slide 24 text

ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ ͱΓ͋͑ͣɺάάͬͯΈΔ͜ͱʹ

Slide 25

Slide 25 text

ݟ͔ͭΔݟ͔ͭΔ͓͓͓͓͓͓͓ͧ͒͒͒͒͒͒͒͒ʂʂʂ ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ

Slide 26

Slide 26 text

ճ౴͸ͳ͍΋ͷͷɺSwiftUI Ͱಉ͡೰ΈΛ๊͑ͯΔ౤ߘΛൃݟ ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ

Slide 27

Slide 27 text

ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ ͑ɺΧόϨοδ༗ޮʹͯ͠Δͱμϝͳͷʂʁ

Slide 28

Slide 28 text

ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ ΧόϨοδ༗ޮʹͨ͠ঢ়ଶͰϓϨϏϡʔෆՄೳ͡ΌͶʁ ͑ɺΧόϨοδ༗ޮʹͯ͠Δͱμϝͳͷʂʁ

Slide 29

Slide 29 text

ReactiveCocoa ͷϦϙδτϦ͕ͩɺ͜͜ʹਆ͕ʂʂʂ ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ

Slide 30

Slide 30 text

ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ ਆݱΔ

Slide 31

Slide 31 text

ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ ਆݱΔ static framework Λ dynamic framework ʹϦϯΫ ͢Δͱ͖ʹγϛϡϨʔλͩͱΤϥʔࡇΓͰϚδਏΈʙ

Slide 32

Slide 32 text

ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ ਆݱΔ static framework Λ dynamic framework ʹϦϯΫ ͢Δͱ͖ʹγϛϡϨʔλͩͱΤϥʔࡇΓͰϚδਏΈʙ Linker flags ʹ -fprofile-instr-generate ௥Ճͨ͠Β ͏·͘ಈ͍͚ͨͲɺ͜Ε͕Կ͔͸஌ΒΜ

Slide 33

Slide 33 text

ݸਓΞϓϦͰ΋ࢼͯ͠ΈΔ ਆݱΔ static framework Λ dynamic framework ʹϦϯΫ ͢Δͱ͖ʹγϛϡϨʔλͩͱΤϥʔࡇΓͰϚδਏΈʙ Linker flags ʹ -fprofile-instr-generat ௥Ճͨ͠Β ͏·͘ಈ͍͚ͨͲɺ͜Ε͕Կ͔͸஌ΒΜ ٳܜ͸ େ੾!! ͋Δ͋Δᶄ

Slide 34

Slide 34 text

-fprofile-instr-generate

Slide 35

Slide 35 text

ݸਓΞϓϦͰϓϨϏϡʔͰ͖ͨʂ

Slide 36

Slide 36 text

Ͱ΋ϓϨϏϡʔͰ͖ͨʂ

Slide 37

Slide 37 text

Ұ୴ɺঢ়گ੔ཧ

Slide 38

Slide 38 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍

Slide 39

Slide 39 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍ ➞ ΧόϨοδΛແޮʹ͢Ε͹ಈ͘

Slide 40

Slide 40 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍ ➞ ΧόϨοδΛແޮʹ͢Ε͹ಈ͘ ➞ -fprofile-instr-generate Λ௥Ճ͢Ε͹ಈ͘

Slide 41

Slide 41 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍ ➞ ΧόϨοδΛແޮʹ͢Ε͹ಈ͘ ➞ -fprofile-instr-generate Λ௥Ճ͢Ε͹ಈ͘ ➞ ͜ͷϑϥάͷਖ਼ମ͸·ͩΘ͔Βͳ͍

Slide 42

Slide 42 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍ ➞ ΧόϨοδΛແޮʹ͢Ε͹ಈ͘ ➞ -fprofile-instr-generate Λ௥Ճ͢Ε͹ಈ͘ ➞ Static Framework ؚ͕·Ε͍ͯΔ͜ͱ͕ݪҼͬΆ͍ ➞ ͜ͷϑϥάͷਖ਼ମ͸·ͩΘ͔Βͳ͍

Slide 43

Slide 43 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍ ➞ ΧόϨοδΛແޮʹ͢Ε͹ಈ͘ ➞ -fprofile-instr-generate Λ௥Ճ͢Ε͹ಈ͘ ➞ Static Framework ؚ͕·Ε͍ͯΔ͜ͱ͕ݪҼͬΆ͍ ➞ Firebase ͷ಺෦͸ Static Framework ͔ͩΒے͕௨Δ ➞ ͜ͷϑϥάͷਖ਼ମ͸·ͩΘ͔Βͳ͍

Slide 44

Slide 44 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍ ➞ ΧόϨοδΛແޮʹ͢Ε͹ಈ͘ ➞ -fprofile-instr-generate Λ௥Ճ͢Ε͹ಈ͘ ➞ Static Framework ؚ͕·Ε͍ͯΔ͜ͱ͕ݪҼͬΆ͍ ➞ Firebase ͷ಺෦͸ Static Framework ͔ͩΒے͕௨Δ ➞ tapple ΋ىಈ଎౓ߴ଎ԽͷͨΊʹҰ෦ϥΠϒϥϦΛ ɹ Static Framework Խͯ͠Δ͔Βے͕௨Δ ➞ ͜ͷϑϥάͷਖ਼ମ͸·ͩΘ͔Βͳ͍

Slide 45

Slide 45 text

flag ͷਖ਼ମΛௐ΂Δ

Slide 46

Slide 46 text

flag ͷਖ਼ମΛௐ΂Δ Ҿ༻ݩɿClang 10 documentation / Clang command line argument reference -fprofile-instr-generate, -fno-profile-instr-generate Generate instrumented code to collect execution counts into default.profraw file (overridden by ‘=’ form of option or LLVM_PROFILE_FILE env var) Instrumentation ʢܭଌɾ਍அ༻ͷίʔυΛૠೖ͢Δ͜ͱʣ͞ΕͨίʔυΛੜ੒ ͠ɺΧόϨοδ౳ͷ৘ใΛ default.profraw ϑΝΠϧʹอଘ͠·͢ɻ -fprofile-instr-generate= Generate instrumented code to collect execution counts into (overridden by LLVM_PROFILE_FILE env var) ग़ྗϑΝΠϧΛࢦఆ͢Δ͜ͱ͕Ͱ͖·͢ɻ https://clang.llvm.org/docs/ClangCommandLineReference.html

Slide 47

Slide 47 text

flag ͷਖ਼ମΛௐ΂Δ Ҿ༻ݩɿClang 10 documentation / Clang command line argument reference -fprofile-instr-generate, -fno-profile-instr-generate Generate instrumented code to collect execution counts into default.profraw file (overridden by ‘=’ form of option or LLVM_PROFILE_FILE env var) Instrumentation ʢܭଌɾ਍அ༻ͷίʔυΛૠೖ͢Δ͜ͱʣ͞ΕͨίʔυΛੜ੒ ͠ɺΧόϨοδ౳ͷ৘ใΛ default.profraw ϑΝΠϧʹอଘ͠·͢ɻ -fprofile-instr-generate= Generate instrumented code to collect execution counts into (overridden by LLVM_PROFILE_FILE env var) ग़ྗϑΝΠϧΛࢦఆ͢Δ͜ͱ͕Ͱ͖·͢ɻ https://clang.llvm.org/docs/ClangCommandLineReference.html

Slide 48

Slide 48 text

flag ͷਖ਼ମΛௐ΂Δ Ҿ༻ݩɿClang 10 documentation / Clang command line argument reference -fprofile-instr-generate, -fno-profile-instr-generate Generate instrumented code to collect execution counts into default.profraw file (overridden by ‘=’ form of option or LLVM_PROFILE_FILE env var) Instrumentation ʢܭଌɾ਍அ༻ͷίʔυΛૠೖ͢Δ͜ͱʣ͞ΕͨίʔυΛੜ੒ ͠ɺΧόϨοδ౳ͷ৘ใΛ default.profraw ϑΝΠϧʹอଘ͠·͢ɻ -fprofile-instr-generate= Generate instrumented code to collect execution counts into (overridden by LLVM_PROFILE_FILE env var) ग़ྗϑΝΠϧΛࢦఆ͢Δ͜ͱ͕Ͱ͖·͢ɻ https://clang.llvm.org/docs/ClangCommandLineReference.html

Slide 49

Slide 49 text

flag ͷਖ਼ମΛௐ΂Δ ͖ͭͶ͞ΜͰ΋Θ͔ΔLLVMʙίϯύΠϥΛࣗ࡞͢ΔͨΊͷΨΠυϒοΫʙ Clang ͸ɺ LLVM Core ΛόοΫΤϯυͱͯ͠࢖༻͢Δ C/C++/Objective-C/ Objective-C++ ͷ LLVM ϑϩϯτΤϯυ࣮૷ʢίϯύΠϥʣͰ͢ɻ LLVM Core ͸ɺ LLVM ϓϩδΣΫτʹ͓͍ͯίϯύΠϥج൫ٴͼ JIT ίϯ ύΠϥͷػೳΛఏڙ͢ΔϓϩδΣΫτͰ͋Γɺͦͷ໊ͷͱ͓Γ LLVM ͷίΞͱ ͳΔαϒϓϩδΣΫτͰ͢ɻ LLVM ͸ɺίϯύΠϧ࣌ɾϦϯΫ࣌ɾ࣮ߦ࣌ͳͲ͋ΒΏΔ࣌఺ͰϓϩάϥϜΛ ࠷దԽ͢ΔΑ͏ʹઃܭ͞Εͨɺ೚ҙͷϓϩάϥϛϯάݴޠʹରԠՄೳͳίϯύΠ ϥج൫Ͱ͢ɻ

Slide 50

Slide 50 text

flag ͷਖ਼ମΛௐ΂Δ ͖ͭͶ͞ΜͰ΋Θ͔ΔLLVMʙίϯύΠϥΛࣗ࡞͢ΔͨΊͷΨΠυϒοΫʙ Clang ͸ɺ LLVM Core ΛόοΫΤϯυͱͯ͠࢖༻͢Δ C/C++/Objective-C/ Objective-C++ ͷ LLVM ϑϩϯτΤϯυ࣮૷ʢίϯύΠϥʣͰ͢ɻ LLVM Core ͸ɺ LLVM ϓϩδΣΫτʹ͓͍ͯίϯύΠϥج൫ٴͼ JIT ίϯ ύΠϥͷػೳΛఏڙ͢ΔϓϩδΣΫτͰ͋Γɺͦͷ໊ͷͱ͓Γ LLVM ͷίΞͱ ͳΔαϒϓϩδΣΫτͰ͢ɻ LLVM ͸ɺίϯύΠϧ࣌ɾϦϯΫ࣌ɾ࣮ߦ࣌ͳͲ͋ΒΏΔ࣌఺ͰϓϩάϥϜΛ ࠷దԽ͢ΔΑ͏ʹઃܭ͞Εͨɺ೚ҙͷϓϩάϥϛϯάݴޠʹରԠՄೳͳίϯύΠ ϥج൫Ͱ͢ɻ

Slide 51

Slide 51 text

flag ͷਖ਼ମΛௐ΂Δ ͖ͭͶ͞ΜͰ΋Θ͔ΔLLVMʙίϯύΠϥΛࣗ࡞͢ΔͨΊͷΨΠυϒοΫʙ Clang ͸ɺ LLVM Core ΛόοΫΤϯυͱͯ͠࢖༻͢Δ C/C++/Objective-C/ Objective-C++ ͷ LLVM ϑϩϯτΤϯυ࣮૷ʢίϯύΠϥʣͰ͢ɻ LLVM Core ͸ɺ LLVM ϓϩδΣΫτʹ͓͍ͯίϯύΠϥج൫ٴͼ JIT ίϯ ύΠϥͷػೳΛఏڙ͢ΔϓϩδΣΫτͰ͋Γɺͦͷ໊ͷͱ͓Γ LLVM ͷίΞͱ ͳΔαϒϓϩδΣΫτͰ͢ɻ LLVM ͸ɺίϯύΠϧ࣌ɾϦϯΫ࣌ɾ࣮ߦ࣌ͳͲ͋ΒΏΔ࣌఺ͰϓϩάϥϜΛ ࠷దԽ͢ΔΑ͏ʹઃܭ͞Εͨɺ೚ҙͷϓϩάϥϛϯάݴޠʹରԠՄೳͳίϯύΠ ϥج൫Ͱ͢ɻ

Slide 52

Slide 52 text

׬શཧղʢΘ͔ΒΜʣ

Slide 53

Slide 53 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍ ➞ ΧόϨοδΛແޮʹ͢Ε͹ಈ͘ ➞ -fprofile-instr-generate Λ௥Ճ͢Ε͹ಈ͘ ➞ ͜ͷϑϥάͷਖ਼ମ͸·ͩΘ͔Βͳ͍

Slide 54

Slide 54 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍ ➞ ΧόϨοδΛແޮʹ͢Ε͹ಈ͘ ➞ -fprofile-instr-generate Λ௥Ճ͢Ε͹ಈ͘ ➞ ͜ͷϑϥάͷਖ਼ମ͸·ͩΘ͔Βͳ͍ ➞ ΧόϨοδΛ༗ޮʹ͢ΔΦϓγϣϯͩͬͨ

Slide 55

Slide 55 text

Ұ୴ɺঢ়گ੔ཧ ɾXcodePreviews ͕ಈ͔ͳ͍ ➞ ΧόϨοδΛແޮʹ͢Ε͹ಈ͘ ➞ -fprofile-instr-generate Λ௥Ճ͢Ε͹ಈ͘ ➞ ͜ͷϑϥάͷਖ਼ମ͸·ͩΘ͔Βͳ͍ ➞ ΧόϨοδΛ༗ޮʹ͢ΔΦϓγϣϯͩͬͨ

Slide 56

Slide 56 text

׬શཧղʢ͸ʁʣ

Slide 57

Slide 57 text

ϏϧυํࣜΛௐ΂Δ

Slide 58

Slide 58 text

ϏϧυํࣜΛௐ΂Δ C ܥίϯύΠϥ clang Swift ίϯύΠϥ swiftc Linker

Slide 59

Slide 59 text

ϏϧυํࣜΛௐ΂Δ C ܥίϯύΠϥ clang Xcode/Contents/Plugins/Xcode3Core.ideplugin/ Contents/SharedSupport/Developer/Library/Xcode/ Plug-ins/Clang LLVM 1.0.xcplugin/Contents/Resources/ Clang LLVM 1.0.xcspec Xcode ➞ *.xcspec ➞ command

Slide 60

Slide 60 text

ϏϧυํࣜΛௐ΂Δ C ܥίϯύΠϥ clang Xcode/Contents/Plugins/Xcode3Core.ideplugin/ Contents/SharedSupport/Developer/Library/Xcode/ Plug-ins/Clang LLVM 1.0.xcplugin/Contents/Resources/ Clang LLVM 1.0.xcspec Xcode ➞ *.xcspec ➞ command

Slide 61

Slide 61 text

ϏϧυํࣜΛௐ΂Δ C ܥίϯύΠϥ clang Xcode/Contents/Plugins/Xcode3Core.ideplugin/ Contents/SharedSupport/Developer/Library/Xcode/ Plug-ins/Clang LLVM 1.0.xcplugin/Contents/Resources/ Clang LLVM 1.0.xcspec Xcode ➞ *.xcspec ➞ command

Slide 62

Slide 62 text

ϏϧυํࣜΛௐ΂Δ C ܥίϯύΠϥ clang Xcode/Contents/Plugins/Xcode3Core.ideplugin/ Contents/SharedSupport/Developer/Library/Xcode/ Plug-ins/Clang LLVM 1.0.xcplugin/Contents/Resources/ Clang LLVM 1.0.xcspec Xcode ➞ *.xcspec ➞ command

Slide 63

Slide 63 text

ϏϧυํࣜΛௐ΂Δ Xcode/Contents/Plugins/Xcode3Core.ideplugin/ Contents/SharedSupport/Developer/Library/Xcode/ Plug-ins/XCLanguageSupport.xcplugin/Contents/ Resources/Swift.xcspec Xcode ➞ *.xcspec ➞ command Swift ίϯύΠϥ swiftc

Slide 64

Slide 64 text

ϏϧυํࣜΛௐ΂Δ Xcode/Contents/Plugins/Xcode3Core.ideplugin/ Contents/SharedSupport/Developer/Library/Xcode/ Plug-ins/XCLanguageSupport.xcplugin/Contents/ Resources/Swift.xcspec Xcode ➞ *.xcspec ➞ command Swift ίϯύΠϥ swiftc

Slide 65

Slide 65 text

ϏϧυํࣜΛௐ΂Δ Xcode/Contents/Plugins/Xcode3Core.ideplugin/ Contents/SharedSupport/Developer/Library/Xcode/ Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/ Ld.xcspec Xcode ➞ *.xcspec ➞ command Linker ֘౰ͳ͠

Slide 66

Slide 66 text

΋ͬͱ޿͘ݟͯΈΔ

Slide 67

Slide 67 text

Xcode Build System

Slide 68

Slide 68 text

Xcode Build System Compiler Assembler Linker Loader Modified source program Target assembly program Relocatable machine code Executable machine code https://www.vadimbulavin.com/xcode-build-system/ Source program in Swift Memory Relocatable object files Library files Preprocessor Active Compilation Conditions

Slide 69

Slide 69 text

Xcode Build System Compiler Assembler Linker Loader Modified source program Target assembly program Relocatable machine code Executable machine code https://www.vadimbulavin.com/xcode-build-system/ Source program in Swift Memory Relocatable object files Library files Preprocessor Active Compilation Conditions

Slide 70

Slide 70 text

Xcode Build System Compiler Assembler Linker Loader Modified source program Target assembly program Relocatable machine code Executable machine code https://www.vadimbulavin.com/xcode-build-system/ Source program in Swift Memory Relocatable object files Library files Preprocessor Active Compilation Conditions -fprofile-instr-generate *.xcspec

Slide 71

Slide 71 text

Xcode Build System Compiler Assembler Linker Loader Modified source program Target assembly program Relocatable machine code Executable machine code https://www.vadimbulavin.com/xcode-build-system/ Source program in Swift Memory Relocatable object files Library files Preprocessor Active Compilation Conditions -fprofile-instr-generate -fprofile-instr-generate OTHER_LDFLAGS *.xcspec

Slide 72

Slide 72 text

ߟ࡯

Slide 73

Slide 73 text

ߟ࡯ Code Instrumentationʢinstrʣ ͕༗ޮͰɺ Static Framework Λ Link ͢Δͱ͖ɺ
 Linker ʹରͯ͠ instr Λ༗ޮʹ͢ΔΑ͏ʹࢦఆ͠ͳ͚Ε͹ͳΒͳ͍

Slide 74

Slide 74 text

ߟ࡯ Code Instrumentationʢinstrʣ ͕༗ޮͰɺ Static Framework Λ Link ͢Δͱ͖ɺ
 Linker ʹରͯ͠ instr Λ༗ޮʹ͢ΔΑ͏ʹࢦఆ͠ͳ͚Ε͹ͳΒͳ͍ ͱ͍͏ݱ৅͕ SwiftUI ͷ XcodePreviews ಈ࡞࣌ʹൃੜ͢Δ

Slide 75

Slide 75 text

ߟ࡯ Code Instrumentationʢinstrʣ ͕༗ޮͰɺ Static Framework Λ Link ͢Δͱ͖ɺ
 Linker ʹରͯ͠ instr Λ༗ޮʹ͢ΔΑ͏ʹࢦఆ͠ͳ͚Ε͹ͳΒͳ͍ ͱ͍͏ݱ৅͕ SwiftUI ͷ XcodePreviews ಈ࡞࣌ʹൃੜ͢Δ օ͞Μͷҙݟେืूதʂօ͞Μͷ஌ܙΛି͍ͯͩ͘͠͞ʂ

Slide 76

Slide 76 text

Thank you !!