iOS iTunes App Store Sandbox でアプリをテストしているときに、奇妙な問題が発生しました。私は 2 つの開発者テスト アカウント (iTunes Connect 経由でセットアップ) を持っています。1 つは英国ストアを使用するためのセットで、もう 1 つはウクライナのストアを使用するためのセットです。
アプリが起動すると、SKProductsRequest を介して利用可能な IAP アイテムのリストを取得します。次に、次のコードを使用して商品価格を表示します (SKProduct のカテゴリとして実装されているため、「self」は SKProduct インスタンスを参照します)。
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[currencyFormatter setLocale:self.priceLocale];
return [currencyFormatter stringFromNumber:self.price];
私が知る限り、これは Apple がこのタスクに推奨するコードです。また、英国のストア アカウントを使用してアプリ内購入をテストすると、価格がポンド単位で表示され、すべてが正常に機能します。ただし、ウクライナのテスト アカウントを使用すると、価格はウクライナの hyrvnia ではなく、米ドルで表示されます。
これをもう少し詳しく調べて、次のように、デバッグ コンソールで priceLocale プロパティのいくつかを出力してみました。
NSLog(@"PriceLocale country Code: %@, localeIdentifier %@", , [self.priceLocale objectForKey:NSLocaleCountryCode], [self.priceLocale localeIdentifier]);
出力は次のとおりです。
PriceLocale country Code: UA, localIdentifier en_UA@currency=USD
ロケール識別子を調べると、@ 記号を使用してロケールを変更し、特定の設定をオーバーライドしているように見えます。この場合、通貨が USD に設定されているようです。事は、私は理由を理解することはできません。問題が何であるか、またはそれをさらに調査する方法について誰かアドバイスを提供できますか?