Slide 1

Slide 1 text

Ϗϧυ࣌ؒͷվળ 2018/02/23

Slide 2

Slide 2 text

͸͡Ίʹ • 2೥ఔલʹSwiftͷϏϧυ࣌ؒͷ஗͕͞࿩୊ʹ • ରࡦํ๏΋͍͔ͭ͘঺հ͞Ε͍ͯͨΓ΋ͨ͠ • ࣗ෼΋஗͍ͱײ͡Δ͜ͱ͸͋Γࢼͯ͠Έ͍ͨ ͱࢥ͍͕ͬͯͨɺ࣮ࡍʹࢼͨ͜͠ͱ͸ͳ͔ͬ ͨ

Slide 3

Slide 3 text

͸͡Ίʹ • ๭ϓϩδΣΫτͷίʔυΛݟͨ࣌ʹ͜Ε͸Ϡ όͦ͏ͱࢥͬͨ • ࣮ࡍɺ൒୺ͳ͘஗͔ͬͨ • ͕࣌ؒͰ͖ͨͷͰࢼͯ͠Έͨ

Slide 4

Slide 4 text

Ϗϧυ࣌ؒͷܭଌ

Slide 5

Slide 5 text

શମͷϏϧυ࣌ؒ • defaultsίϚϯυͰXcode্ʹϏϧυ࣌ؒΛද ࣔͰ͖ΔΑ͏ʹઃఆ͢Δ

Slide 6

Slide 6 text

શମͷϏϧυ࣌ؒ • DerivedData࡟আ • ΫϦʔϯʢ㵰+⇧+Kʣ • Ϗϧυʢ㵰+Bʣ

Slide 7

Slide 7 text

શମͷϏϧυ࣌ؒ • DerivedData࡟আ • ΫϦʔϯʢ㵰+⇧+Kʣ • Ϗϧυʢ㵰+Bʣ

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

ܭଌ༻ͷϏϧυઃఆΦϓγϣϯ -Xfrontend Swift compiler flags

Slide 10

Slide 10 text

[Build Settings] -> [OTHER_SWIFT_FLAGS] ʹઃఆ

Slide 11

Slide 11 text

-debug-time-function-bodies • -Xfrontend -debug-time-function-bodies • ϝιουผͷίϯύΠϧ࣌ؒΛଌఆ

Slide 12

Slide 12 text

-warn-long-function-bodies • -Xfrontend -warn-long-function-bodies=100 • ίϯύΠϧʹ100msҎ্͔͔͍ͬͯΔίʔυΛܯࠂ • Swift3.0Ҏ߱Ͱ༗ޮʁ • কདྷతʹ࡟আ͞ΕΔՄೳੑ • https://github.com/apple/swift/commit/ 18c75928639acf0ccf0e1fb6729eea75bc09cbd5

Slide 13

Slide 13 text

-warn-long-expression-type- checking • -Xfrontend -warn-long-expression-type- checking=50 • ܕਪ࿦ʹ50msҎ্͔͔͍ͬͯΔίʔυΛܯࠂ • Xcode9 GM͔Β

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

๭ϓϩδΣΫτ • Swift2.2 & Xcode7.1.1 • -warn-long-function-bodies -warn-long-expression-type-checking ͕࢖͑ͳ͍

Slide 17

Slide 17 text

Ҏ߱ Swift2.2+Xcode7.1.1 ͰͷௐࠪͰ͢

Slide 18

Slide 18 text

ϝιουຖͷܭଌ

Slide 19

Slide 19 text

ܭଌπʔϧ • xcodebuild http://irace.me/swift-profiling • Build Time Analyzer for Xcode https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode • xcprofiler

Slide 20

Slide 20 text

ܭଌπʔϧ • xcodebuild http://irace.me/swift-profiling • Build Time Analyzer for Xcode https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode • xcprofiler

Slide 21

Slide 21 text

• gem install xcprofiler • Build Settings -> Other Swift Flagsʹ -Xfrontend -debug-time-function-bodies Λઃఆ • Ϗϧυ • xcprofiler [PRODUCT_NAME or ACTIVITY_LOG_PATH] [options] xcprofiler

Slide 22

Slide 22 text

xcprofiler

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

ίʔυϕʔεͰͷվળ

Slide 25

Slide 25 text

ίʔυϕʔεͰͷվળ 1.ܕਪ࿦ ʢλΠϓώϯςΟϯάɺClosureɺGenericsʢϝιουνΣΠϯʣʣ 2.݁߹ʢ഑ྻɺจࣈྻʣ 3.Closures and lazy properties 4.Ternary Conditional Operatorʢࡾ߲ԋࢉࢠʣ 5.Nil-Coalescing Operatorʢ??ʣ

Slide 26

Slide 26 text

ίʔυϕʔεͰͷվળ 1.ܕਪ࿦ ʢλΠϓώϯςΟϯάɺClosureɺGenericsʢϝιουνΣΠϯʣʣ 2.݁߹ʢ഑ྻɺจࣈྻʣ 3.Closures and lazy properties 4.Ternary Conditional Operatorʢࡾ߲ԋࢉࢠʣ 5.Nil-Coalescing Operatorʢ??ʣ

Slide 27

Slide 27 text

ܕਪ࿦ λΠϓώϯςΟϯά

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

഑ྻͷλΠϓώϯςΟϯάΛ ෇͚Δ

Slide 30

Slide 30 text

Ϗϧυ࣌ؒ NT CFGPSF BGUFS ʢ‑ʣ

Slide 31

Slide 31 text

ܕਪ࿦ Closure

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

$MPTVSFʹܕΛ໌ࣔ

Slide 34

Slide 34 text

Ϗϧυ࣌ؒ NT CFGPSF BGUFS ʢ‑ʣ

Slide 35

Slide 35 text

ܕਪ࿦ GenericsʢϝιουνΣΠϯʣ

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

ϥΠϒϥϦ3VOFTʹΑΔ ΦϖϨʔλʔͷར༻Λ΍ΊΔ ϝιουνΣΠϯΛ΍ΊΔ

Slide 38

Slide 38 text

Ϗϧυ࣌ؒ NT CFGPSF BGUFS ʢ‑ʣ

Slide 39

Slide 39 text

഑ྻͷ݁߹

Slide 40

Slide 40 text

Before

Slide 41

Slide 41 text

ԋࢉࢠΛBQQFOEϝιουʹมߋ

Slide 42

Slide 42 text

Ϗϧυ࣌ؒ NT CFGPSF BGUFS ʢ‑ʣ

Slide 43

Slide 43 text

จࣈྻͷ݁߹

Slide 44

Slide 44 text

Before

Slide 45

Slide 45 text

ԋࢉࢠΛ΍Ίͯ ΠϯϥΠϯల։ʹมߋ

Slide 46

Slide 46 text

Ϗϧυ࣌ؒ NT CFGPSF BGUFS ʢ‑ʣ

Slide 47

Slide 47 text

ԋࢉࢠΛKPJOϝιουʹมߋ

Slide 48

Slide 48 text

Ϗϧυ࣌ؒ NT CFGPSF BGUFS ʢ‑ʣ

Slide 49

Slide 49 text

ίʔυϕʔεҎ֎Ͱͷվળ https://github.com/fastred/Optimizing-Swift- Build-Times

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

·ͱΊ

Slide 52

Slide 52 text

• ͪΐͬͱͨ͠มߋͰ͔ͳΓͷ͕࣌ؒ୹ॖ • ਺ඵʗ໿630ඵͷ୹ॖͳͷͰɺຊ౰ʹվળ͞Εͨͷ͔࣮ ײ͕ͳ͍ʢମײతʹ͸Ϗϧυ࣌ؒ͸໿15෼͙Β͍ʣ • Not Swifty • Swiftݴޠ࢓༷Λ׆͔ͨ͠هड़͕Ͱ͖ͳ͍ • ίʔυྔͷ૿Ճ • ίʔυͷՄಡੑ͕͕͋Δ৔߹΋ • ܕΛ໌ࣔ͢Δ͜ͱͰ೺Ѳ͠΍͘͢ͳΔ

Slide 53

Slide 53 text

• Swift2.2+Xcode7.1.1ͷ؀ڥͰͷௐࠪͳͷͰɺ ࠓͷ࠷৽ͷSwift4+Xcode9ͷ؀ڥͰ͸վળ͞ Ε͍ͯΔ΋ͷ΋͋Δ͸ͣ

Slide 54

Slide 54 text

Swiftyͳίʔυ΋ॻ͖ͭͭɺ ۠੾Γͷ͍͍ͱ͜ΖͰܭଌ͠ ͯΈͯɺۃ୺ʹϏϧυʹ࣌ؒ ͕͔͔͍ͬͯΔ৔߹͸ίʔυ Λݟ௚ͯ͠ΈΔ

Slide 55

Slide 55 text

Appendix • https://developers.cyberagent.co.jp/blog/archives/7815/ • https://medium.com/@fkei/xcodeͷϏϧυ࣌ؒΛ୹ॖ͢Δ ํ๏·ͱΊ-2017-10-20࣌఺-bea6dc4f9fc0 • https://qiita.com/ruwatana/items/21b25781a2f44ccf29e2 • https://qiita.com/you_matz/items/ e95f30023eccc8d96357 • https://qiita.com/rizumita/items/913b05d799b3712260f6