起こったこと
- Xcode11.7 -> Xcode12(12.1や12.2でも同様だった)にアップデートしたら、アーカイブビルドがとても長くなった。
- 具体的には、Xcode11.7で15分程度だったのが、Xcode12.2で3時間程度かかるようになった。
- bitriseだと60分でタイムアウトするし、これだと運用が厳しいので対策するべく原因調査した。
原因、対策
後述する通りいろいろと調べたところ、原因は下記の通りだった。
- Xcode12にバンドルされているSwift5.3のコンパイラの
Optimization Level
がOptimize for Speed
やOptimize for Size
のとき(アーカイブビルドのときに指定されている)のswift コンパイルの挙動が変わっていたため - 上記Optimization Levelのときに、コンパイルが特に遅いSwiftファイルが1ファイルあった。
- 対策としては、このSwiftファイルをコンパイルが速くなるように書き換えた。
この記事のメインテーマは、どうやって上記の原因までたどり着いたかのところで、それを下記します。
もしかしたら、当たり前なことなのかもしれないが、わたしはとても苦戦しました。
調べたこと
アーカイブ時のビルド時のログ出力確認
最初、普通にビルドログ見てたが、それだと、Build Phaseの Compile Source(swiftファイルをコンパイルするフェーズ)の直前のshell script実行のところで止まっていて、そのscript自体は単体ではすぐ終わる処理(単体で実行して確認済み)だったので、ログがちゃんと出ていないように思った。
SwiftコンパイラのOptimization Level
デバッグビルドでは問題なかったのと、以前の問題があったので、Archive時のSwiftコンパイラのOptimization Level(Optimize for Speed
)が問題なのではと思って、デバッグビルドのOptimization Levelを Optimize for Speed
にしたらビルドが遅くなったので、SwiftコンパイラのOptimization Levelが問題であることに気付いた。
※デバッグビルドの方がビルドログが細かく出力されるので、これ以降はデバッグビルドのOptimization Levelを Optimize for Speed
にして調査しています。
また、compiler optimization level = Optimize for Size
にしたらビルド速くなったら嬉しいなーと思ってやってみたけど、変わらなかった。。。
Swift Other Flag追加してログ出力確認
結果的に今回の調査では役立ったわけではないが、もうちょっとちゃんとビルドログ出力させたいと思って Other Swift Flags
に下記を追加。これでビルドログが詳細に出るようになった。
- -Xfrontend -warn-long-expression-type-checking=300
- 型推論に300ms以上かかったらwarning
- -Xfrontend -warn-long-function-bodies=300
- コンパイルに100ms以上かかるメソッドをwarning
この辺りは下記の記事を見ながら色々やってみていた。
https://dev.classmethod.jp/articles/investigated_compiletime_swift/
https://techlife.cookpad.com/entry/2017/12/08/124532
ビルドが遅くなっているところを確認
何度やっても下記の赤枠のswiftファイルのコンパイルが遅いので、多分swiftファイルの書き方の問題なんじゃ無いかと思ってきた。
試しに、簡単に直せそうなswiftファイル(10行未満のswiftファイルが含まれた)を全部コメントアウトしても、速くならなかったので、多分この中でも特定のどれかが遅いのだと思ってきた。
※このとき、遅くなっているswift ファイルのコンパイル直後に各frameworkのlinkが走っていたので、実はそこが遅いんじゃ無いかと思った(具体的にはBridging-Header.hに @import
をいくつか書いてたのでそれが問題なのかもと思った)が、違った。。。
コンパイルが遅くなっているswift ファイルがどれかを特定
上記の赤枠のファイルを選択して、コピペすると、下記のようなテキストがペーストされた。
Showing Recent Messages
CompileSwift normal arm64 /プロジェクトのパス/〜〜〜〜〜/〜〜〜〜〜〜〜.swift (in target '〜〜〜〜〜' from project '〜〜〜〜〜')
cd /プロジェクトのパス
/Applications/Xcode12_2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -filelist /var/folders/5t/〜〜〜〜〜〜〜〜〜〜〜〜〜〜/T/sources-4f43a5 -primary-file /プロジェクトのパス/〜〜〜〜〜/〜〜〜〜〜〜〜.swift -emit-module-path /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/Objects-normal/arm64/swiftファイル名\~partial.swiftmodule -emit-module-doc-path /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/Objects-normal/arm64/swiftファイル名\~partial.swiftdoc -emit-module-source-info-path /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/Objects-normal/arm64/swiftファイル名\~partial.swiftsourceinfo -serialize-diagnostics-path /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/Objects-normal/arm64/swiftファイル名.dia -emit-dependencies-path /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/Objects-normal/arm64/swiftファイル名.d -emit-reference-dependencies-path /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/Objects-normal/arm64/swiftファイル名.swiftdeps -target arm64-apple-ios11.0 -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode12_2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk -I /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/APIKit -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/Alamofire -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/AlamofireImage -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/AppAuth -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/BoringSSL-GRPC -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/Cartography -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/Differ -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/GoogleDataTransport -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/JWTDecode -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/MBProgressHUD -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/RxCocoa -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/SwiftGifOrigin -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/YoutubePlayer-in-WKWebView -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜 -F /プロジェクトのパス/Pods/AppsFlyerFramework/iOS -F /プロジェクトのパス/Pods/FirebaseAnalytics/Frameworks -F /プロジェクトのパス/Pods/〜〜〜〜〜/Frameworks -F /プロジェクトのパス/Pods/〜〜〜〜〜/Frameworks -F /プロジェクトのパス/Pods/〜〜〜〜〜/Frameworks -F /プロジェクトのパス/Pods/〜〜〜〜〜/〜〜〜〜〜.embeddedframework -F /プロジェクトのパス/Pods/〜〜〜〜〜 -F /プロジェクトのパス/Pods/〜〜〜〜〜/Build/iOS -F /プロジェクトのパス/Pods/〜〜〜〜〜/Build/iOS -F /プロジェクトのパス -F /プロジェクトのパス/〜〜〜〜〜 -F /プロジェクトのパス/ライブラリ/Frameworks-build -enable-testing -g -module-cache-path /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -swift-version 5 -enforce-exclusivity\=checked -O -D DEBUG -D COCOAPODS -D COCOAPODS -enable-swift3-objc-inference -warn-swift3-objc-inference-minimal -warn-long-function-bodies\=300 -warn-long-expression-type-checking\=300 -serialize-debugging-options -Xcc -working-directory -Xcc /プロジェクトのパス -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/swift-overrides.hmap -Xcc -iquote -Xcc /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/〜〜〜〜〜-generated-files.hmap -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/〜〜〜〜〜-own-target-headers.hmap -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/〜〜〜〜〜-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/all-product-headers.yaml -Xcc -iquote -Xcc /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/〜〜〜〜〜-project-headers.hmap -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/include -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜/〜〜〜〜〜.framework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜/〜〜〜〜〜.framework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜/〜〜〜〜〜.framework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/BoringSSL-GRPC/openssl_grpc.framework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/〜〜〜〜〜/〜〜〜〜〜.framework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/MK2Router/MK2Router.framework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/YoutubePlayer-in-WKWebView/YoutubePlayer_in_WKWebView.framework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/gRPC-Core/grpc.framework/Headers -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Products/Debug-iphoneos/swiftライブラリframework/Headers -Xcc -I/プロジェクトのパス/Pods/Headers/Public -Xcc -I/プロジェクトのパス/Pods/Headers/Public/ライブラリ -Xcc -I/プロジェクトのパス/Pods/Headers/Public/ライブラリ -Xcc -I/プロジェクトのパス/Pods/Firebase/CoreOnly/Sources -Xcc -I/Sources/FBLPromises/include -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/DerivedSources-normal/arm64 -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/DerivedSources/arm64 -Xcc -I/ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/DerivedSources -Xcc -DDEBUG\=1 -Xcc -DCOCOAPODS\=1 -Xcc -DDEBUG\=1 -Xcc -DGPB_USE_PROTOBUF_FRAMEWORK_IMPORTS\=1 -Xcc -DDEBUG\=1 -Xcc -DPB_FIELD_32BIT\=1 -Xcc -DPB_NO_PACKED_STRUCTS\=1 -Xcc -DPB_ENABLE_MALLOC\=1 -target-sdk-version 14.2 -import-objc-header /プロジェクトのパス/〜〜〜〜〜/Bridging-Header.h -pch-output-dir /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/PrecompiledHeaders -pch-disable-validation -module-name 〜〜〜〜〜 -o /ユーザーフォルダのパス/Library/Developer/Xcode/DerivedData/〜〜〜〜〜-ejcjafpdqhgmythgozbispsdrwky/Build/Intermediates.noindex/〜〜〜〜〜.build/Debug-iphoneos/〜〜〜〜〜.build/Objects-normal/arm64/swiftファイル名.o -embed-bitcode-marker
CompileSwift normal arm64 〜〜〜〜が選択したswiftファイル分続く。
上記の、
cd /プロジェクトのパス
/Applications/Xcode12_2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend ~~~~~
のところをそのままshell(ターミナル)で実行したら普通に実行できた(1ファイルのswiftコンパイルができる)ので、それで赤枠の各swiftファイルのコンパイルを試したところ、ある1ファイルだけ、すごく時間がかかったのでそれでどのファイルがコンパイルが遅いのかがわかった。
swiftファイル内のどの処理が遅いか特定
やり方は色々ありそうだがそれほど苦労しなかった。
実際にやったやり方は、一旦問題のswiftファイルを全部コメントアウトしてみてから、上記のshell上でのswiftコンパイルを実行し、少しずつコメントアウトを復活させながら、shell上でのswiftコンパイルの実行繰り返して特定した。
その結果、あるenum(かなり大きめでいろいろなViewControllerを参照したAssociated Values を持つenum。このswiftファイルとは別のswiffファイル内で定義)を引数で参照している箇所が遅いことが発覚したので、それのenumを参照しないようにすることで問題解決した。
最後に
上記対応後、結果的に多分、2分程度はXcode12にしてからアーカイブが速くなったような気がします。
最初、この問題に遭遇した時は、解決できるのだろうか(できればXcode12がアップデートされたら勝手に解決されないかなとおもった)、、、と思ったが、諦めずに1つ1つの問題の原因に向き合っていけば、解決に近づいていける、、、そう信じたいと思った。解決できてよかった。