Slide 1

Slide 1 text

Xcode 15 で swift run が遅い tokizo / @tokizuoh 2023/11/08 YUMEMI.grow Mobile #8 1

Slide 2

Slide 2 text

自己紹介 ● tokizo (@tokizuoh) ○ https://info.tokizuoh.dev/ ● 株式会社はてな ○ マンガアプリチーム ○ モバイルアプリケーションエンジニア 2

Slide 3

Slide 3 text

話す内容 3 https://forums.swift.org/t/swift-run-really-slow/67807

Slide 4

Slide 4 text

話す内容 ● Xcode 15 で swift run の実行に3秒以上 掛かっていて遅い ○ “Hello, World!” を出力するだけで3秒 ● 考えられる原因 4

Slide 5

Slide 5 text

5 swift run とは

Slide 6

Slide 6 text

swift run とは ● SwiftPM で executable product, macroを ビルド・実行するコマンド ● executable product は所謂 CLIツール ○ コマンドラインから実行できるネイティブバイナリを 作成する 6

Slide 7

Slide 7 text

7 著名な executable product

Slide 8

Slide 8 text

著名な executable product ● uber/mockolo ○ モック生成 ○ https://github.com/uber/mockolo/blob/master/ Package.swift ● apollographql/apollo-ios-codegen ○ GraphQL のスキーマから Swift ファイル生成 ○ https://github.com/apollographql/apollo-ios-co degen/blob/main/Package.swift 8

Slide 9

Slide 9 text

本題 9

Slide 10

Slide 10 text

swift run 遅い 10

Slide 11

Slide 11 text

swift run 遅い 1. Xcode 15 で swift package init --type executable を実行 2. swift run を実行すると3秒以上掛かる 11

Slide 12

Slide 12 text

swift run 遅い 12

Slide 13

Slide 13 text

毎回3秒 13

Slide 14

Slide 14 text

困る 14

Slide 15

Slide 15 text

原因を探す 15

Slide 16

Slide 16 text

原因を探す ● swift run には -vv (very verbose) オプ ションがある ○ コマンド実行時にデバッグ出力 ○ 内部で実行するコマンドの表示 ● 実行すると、/usr/bin/xcrun --sdk xros --show-sdk-platform-path に時間 が掛かっていることが分かる 16

Slide 17

Slide 17 text

/usr/bin/xcrun --sdk xros --show-sdk-platform-path 17

Slide 18

Slide 18 text

/usr/bin/xcrun --sdk xros --show-sdk-platform-path 18

Slide 19

Slide 19 text

“xros” 19

Slide 20

Slide 20 text

“xros” 20 https://github.com/apple/swift-package-manager/blob/828121137f394125d 03d5ab1e12df869b346bdcd/Sources/PackageModel/MinimumDeploymentTar get.swift#L89-L90

Slide 21

Slide 21 text

visionOS 21

Slide 22

Slide 22 text

visionOS 22 https://developer.apple.com/jp/visionos/

Slide 23

Slide 23 text

visionOS の SDK は Xcode 15 に存在しない 23

Slide 24

Slide 24 text

visionOS の SDK は Xcode 15 に存在しない 24

Slide 25

Slide 25 text

Xcode 15 beta には存在 する 25

Slide 26

Slide 26 text

Xcode 15 beta には存在する 26

Slide 27

Slide 27 text

Xcode 15 beta で swift run 27

Slide 28

Slide 28 text

Xcode 15 beta で swift run 28

Slide 29

Slide 29 text

Xcode 15 から Xcode 15 beta に変えたら 3秒台から0.4秒に 29

Slide 30

Slide 30 text

原因が分かって めでたい 30

Slide 31

Slide 31 text

おわり ● Xcode 15 で使われている SwiftPM は swift run 時に visionOS の SDK を探すが、 Xcode 15 に存在せず、処理に時間がかかる ○ xcrun の内部挙動は不明だが、一定時間探索して 打ち切っているか、決められた範囲の探索が全て 行われていそう 31

Slide 32

Slide 32 text

おわり ● Xcode 15 beta には visionOS の SDK が存在 するため、処理に時間はかからない ● 根本解決するには? ○ SwiftPM にコントリビュートする ■ 原因を見つけたのは11/5(日)で tokizo は まだ手がつけられていない! 32