能登 要

札幌在住のiOSアプリ開発者。SwiftUI により分割されたデバイス間を縦横にやりとりできる考え方に転換しています。

iOSアプリ開発者。2009年のiPhoneアプリ開発開始時期から活動。開発言語のアップデートの中でSwiftUIおよび周辺技術に着目中。

Xcode12 でのDeployment Target変更後ビルトエラーに対処する

Cocoapodsでミドルウェア導入しているiOSプロジェクト。Deployment TargetをiOS13からiOS14へ変更する場合のメモ。

Xcode11 のプロジェクトをXcode12 beta5 でビルドした際に対応OSを13から14へ変更し、ミドルウェア導入用のCocoapodsの設定をPodfileをエディタで開きターゲットOSを13.0から14.0へ変更した(watchOSも含まれていた6.0から7.0へ変更)。

pod update

Cocoapodsアップデート後にワークスペースファイル(xcworkspace)をXcode12 beta5でオープンするとプロジェクトのアップデートをXcode12から勧められるのでこれを実行。この時CLANGWARNQUOTEDINCLUDEINFRAMEWORKHEADER という設定がワークスペースは以下のプロジェクト(アプリプロジェクト、Podsプロジェクト)に追加される。

CLANGWARNQUOTEDINCLUDEINFRAMEWORKHEADERはダブルクォートでフレームワークを指定すると警告するという一見無害な警告オプションのように思える。

ただしビルド可能なOS範囲警告に対処しようとすると問題が発生する。

ビルド可能なOS範囲警告は以下のようなもの。

Showing Recent Messages
The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.0.99.

XcodeはPodsプロジェクトのアップデートタイミングでビルド可能はOS範囲を修正してくれるが、Podfileで指定も可能。

CocoaPodsでインストールしたライブラリをXcode12でビルドするとDeployment Targetに関する警告が出る - Qiita

ビルド可能なOS範囲から8.0を除外後、CLANGWARNQUOTEDINCLUDEINFRAMEWORKHEADER由来の警告でビルドできなくなり焦ってしまうが、ここはおちついてCLANGWARNQUOTEDINCLUDEINFRAMEWORKHEADERの設定を、

CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER=YES

から、

CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER=NO

に変更すれば良い。変更箇所はワークスペース内のアプリプロジェクトおよびPodプロジェクトの二箇所となる。

Note(備考)

Cocoapods(1.9.3) でミドルウェアを更新するとCLANGWARNQUOTEDINCLUDEINFRAMEWORKHEADER の設定が=YESに戻ってしまう。Cocoapods更新時にビルドエラーとなった場合は落ち着いてCLANGWARNQUOTEDINCLUDEINFRAMEWORKHEADERを確認する。

pod update

参照元はAppleの開発者フォーラムの内容。 Xcode 12 Framework: 'Double-quoted… | Apple Developer Forums