始めに
SwiftLintやSwiftFormatをビルドフェーズで実行している場合、Previewが更新されるたびにこれらが実行され、頻繁にクラッシュが発生してしまいました。そのため、以下の対応を試してみましたが、どうやら期待通りに機能していないようなので、解決策を調べてみました。環境変数のENABLE_PREVIEWS
はPreviewビルド時にYES
が入るらしいです。
# Xcode Preview のビルド時はスクリプトを実行しない
if [ \"$ENABLE_PREVIEWS\" == \"YES\" ]; then
exit 0
fi
# Formatter, Generator の実行
...
調査
Xcode16だとデバッグビルドとPreviewビルドの違いがなくなり、ENABLE_PREVIEWS
は機能しなくなったみたいです。短期的な解決策として、以下が提示されていましたが、OpenAPIらへんでエラー出まくりだったのでLegacyPreviewsの使用はできなかったです。私の場合、ビルド時に生成して使用しているOpenAPIがPreviewで使えなくなっている感じでした。
Editor > Canvas > Use Legacy Previews Execution
Preview表示時の環境変数を見てみたましたが、期待した値は取ってこれないですね、、
ENABLE_PREVIEWS: NO
XCODE_RUNNING_FOR_PREVIEWS: // 空
面倒ですが、シミュレーターの場合、ビルド時は実行しないという方法で手を打つ、、?
実機ビルドをする必要があるので、解決策としてはよくない気がします。なので、Previewのクラッシュが目立つ場合、一時的に設定を消す、手動で行うなどの対応が必要かも?
if [ -z $CI ] || [ $CI = false ] && [ "$EFFECTIVE_PLATFORM_NAME" != "-iphonesimulator" ]; then
xcrun --sdk macosx mint run swiftlint
else
echo 'warning: skip SwiftLint run script'
fi
終わりに
良い方法を知っている方がいらっしゃいましたら、ご教授願います🙇
参考