【Xcode】暦法を指定したユニットテスト


概要

暦法付きロケールIDを引数 AppleLocale に設定すると暦法指定のテストができます。Test Plansと組み合わせると便利です。

xctestplanファイルの用意

Test Plans未導入の場合は、Product -> Scheme -> Edit Scheme 画面TestタブのConvert to use Test Plans からxctestplanファイルを生成してください。ファイルの Configurations タブを開くと、様々な設定項目があることを確認できます。

これらの中でも地域設定には Localization -> Application Region を使用すれば良さそうですが、Xcode11現在、暦法すなわちCalendarを指定する仕組みはありません。
そこで、 Arguments Passed On Launch から地域を直接指定します。

指定する引数の用意

地域の設定には、引数 AppleLocale を利用します。( 参考: Testing Your Internationalized App )
引数には、カレンダー指定込みロケールIDを渡します。下記は和暦指定の例です。カレンダーIDは、Calendar.Identifier の値を参考にすると良さそうです。

-AppleLocale ja_JP@calendar=japanese 

また、この指定を有効にするため、 Localization -> Application RegionSystem Region とします。
以上を反映させた画面が下記です。

値の詳細

この値は、下記処理の出力を元に作成しました。

print(Locale.current)

# 和暦設定時
# ja_JP@calendar=japanese (current)

# 西暦設定時
# ja_JP (current)

実行

Cmd + U等から通常実行します。すると、指定した暦法の元ユニットテストが行われます。

参考

Test plansの詳細な使い方は、下記を参考にさせていただきました。