Xamarin.iOS アプリを msbuild でビルドする時、.csproj ファイルにプロビジョニング関連の設定値を含めたくないので、msbuild でのビルド時に指定したいと考えた。
Windows と macOS 両方でビルドできるように、前後処理のスクリプトは PowerShell(7.0〜) になっているという前提。
次のようなコマンドで、署名(CodesignKey)とプロビジョニングプロファイル名(CodesignProvision)を指定してビルドできることが分かった。
msbuild .\MyApp.iOS.csproj `
/p:BuildIpa=True `
/p:Configuration=Release `
/p:Platform=iPhone `
/p:CodesignKey="Apple Distribution: XXXXXXX (XXXXXXXX)" `
/p:CodesignProvision="myappprovision" `
/t:Build
と、ここで問題発生。
"Apple Distribution: XXXXXXX (XXXXXXXX)"
のところが、"Apple Distribution: MyCompany.,Ltd. (XXXXXXXX)"
などと「カンマ」が入っている場合、そのパースで次のエラーになってしまう。
MSBUILD : error MSB1006: プロパティが無効です。
スイッチ: Ltd. (XXXXXXXX)
カンマをエスケープする方法をいろいろ(以下)試したが、どれも変わらず。
"Apple Distribution: MyCompany.,Ltd. (XXXXXXXX)"
"""Apple Distribution: MyCompany.,Ltd. (XXXXXXXX)"""
\"Apple Distribution: MyCompany.,Ltd. (XXXXXXXX)\"
"Apple Distribution: MyCompany.\,Ltd. (XXXXXXXX)"
"Apple Distribution: MyCompany.`,Ltd. (XXXXXXXX)"
"Apple Distribution: MyCompany.,,Ltd. (XXXXXXXX)"
最終的には、 MSBuild で特殊文字をエスケープする - MSBuild | Microsoft Learn で紹介されている方法で、カンマ「,」を %2c
と記述することで、エラーなく実行することができた。
msbuild .\MyApp.iOS.csproj `
/p:BuildIpa=True `
/p:Configuration=Release `
/p:Platform=iPhone `
/p:CodesignKey="Apple Distribution: MyCompany.%2cLtd. (XXXXXXXX)" `
/p:CodesignProvision="myappprovision" `
/t:Build
ちょっと不格好だけど、とりあえずはいいや。
PowerShell の仕様か MSBuild の仕様かよく分からなかったが、MSBuild の仕様ということらしい。
この事について ChatGPT(GPT-4) さんに聞いたのだけど、軽くイラッとしたw