窓を作っては壊していた人のブログ

この謎のブログタイトルの由来を知るものはもういないだろう

GitHub ActionsでiOSのCIをしていたらDouble-quoted includeほにゃららで怒られてビルドが落ちたことに対する対処法

今日急に今まで通っていたiOSのアプリケーションのビルドが通らなくなりました。 ビルドが通っていたmasterからブランチ生やしてempty commitを通してみても通らない、これはどういうことだ…と思って調べていたら、どうもGitHub ActionsのmacOSのImageのバージョンアップが行われたようでした。

Release macOS 10.15 (20201011 update) · actions/virtual-environments · GitHub

再現環境

実際に使用したCIのフローは以下のファイルです

https://github.com/yamachu/swift-5.2x-5.3-swiftlint-different/blob/9e1fb4c2a67143020c08df268d89831dcdb6be7b/.github/workflows/swift.yml

原因

Xcode 12ではアンブレラヘッダ内のinclude文はヘッダの指定が "" ではなく <> を想定していて、コンパイラ側で "" をwarningではなくエラーに倒すオプションをデフォルトで有効にしているからだそうです。

github.com

対処法

GitHub ActionsのmacOS Hostのイメージはじき全体に行き渡るので(今は20201003とかが降ってくることもある)環境を変えるの困難です。 そのため上記Issueに書かれているように Podfile 側にビルド設定を記載することで対処するのが良いでしょう。

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings['CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER'] = 'NO'
  end
end

変更前のActionsのログ ... · yamachu/swift-5.2x-5.3-swiftlint-different@15a4547 · GitHub

変更後のActionsのログ Set "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER" NO · yamachu/swift-5.2x-5.3-swiftlint-different@9e1fb4c · GitHub

無事にビルドが通りました。(同じXcodeのバージョンだったのに、なんでイメージが20201011.1になったら落ち始めたのかがはっきりしなくて非常に気持ちが悪いですが)

そろそろリリースが予定されているCocoaPods 1.10.0*1ではデフォルトで上記の設定が入るようなので、リリースが待てない、今すぐCIをどうにかしたいという場合は試してみてください。

関連Issue

github.com