XCodeでビルド時にPreprocessed-Info.plistで"error: unable to read property list from file:..."エラー

XCode 10.3で確認。

ビルド設定でPreprocess Info.plist FileYESに設定している場合、ビルド時に以下のエラーが発生する。

"error: unable to read property list from file:<Preprocessed-Info.plistのファイルパス>"エラー: The operation couldn't be completed. (XCBUtil.PropertyListConversionError error 1.)

エラーの原因を調査

ファイルパスで表示されているPreprocessed-Info.plistファイルをplutilでチェックすることで原因が分かる。

$ plutil -lint Preprocessed-Info.plist
Preprocessed-Info.plist: Encountered unexpected character k on line 33 while looking for close tag

これはファイルの33行目にXMLのクローズタグが存在しないために発生していることを意味している。実際に確認すると、以下のようにクローズタグが無く途中で終わっている。

<string>http:

エラーの原因

このエラーは以下に記載の通り、Info.plistファイル内にURLが含まれている場合にInfo.plistのPreprocessを有効にすると発生する。解決方法も記載されている。 developer.apple.com

原因は//がコメントとして認識されるため。URLがあると "http://..." の //以降がコメントとして扱われて無視されてしまう。

解決方法

上記に記載の通り、XCodeのビルド設定Info.plist Other Preprocessor Flagsに対して-traditionalを設定する。これで//がコメントとして扱われることがなくなる。

注意

Info.plist Preprocessor Prefix Fileにファイルを指定している場合、上記のフラグを指定するとこのファイル内でコメントとして // を使用できなくなる。

// を使用した場合、その行はコメントとして認識されず、そのままInfo.plistファイルの先頭部分に追加されてしまい、ビルド時にエラーになる。

コメントを使用する場合は /* */ を使用する。