【ITニュース解説】StoreKit External Purchase – Regional Restriction Not Working + canPresent() Always Returns False

2025年09月09日に「Dev.to」が公開したITニュース「StoreKit External Purchase – Regional Restriction Not Working + canPresent() Always Returns False」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

Appleのアプリ外決済機能「StoreKit External Purchase」で、EU内のみに限定する地域制限が効かず、テスト時に機能が常に利用不可と判定される不具合が開発者から報告された。テスト環境での地域設定が正しく反映されないことが原因とみられる。(118文字)

ITニュース解説

近年、欧州連合(EU)が定めたデジタル市場法(DMA)という新しい法律により、AppleはiPhoneやiPadのアプリにおいて、これまでは原則禁止していた外部での決済手段を、特定の条件下で許可する必要に迫られた。これは、アプリ開発者がAppleのApp Store決済システムを介さず、自社のウェブサイトなどでユーザーに直接課金できるようにするもので、IT業界における大きなルールの変更点だ。この変更に対応するため、Appleは開発者向けに「StoreKit External Purchase」という新しい技術(API群)を提供した。今回のニュースは、あるアプリ開発者がこの新機能を自身のアプリに組み込もうとした際に直面した、技術的な問題点に関する報告である。

この開発者の目標は、法律で定められている通り、この外部決済機能をEU地域に限定して提供し、米国など他の国では利用できないようにすることだった。特定の機能やサービスを地域限定で提供する仕組みは「リージョンロック」と呼ばれ、各国の法律や企業のビジネス戦略を遵守するために不可欠な技術である。しかし、開発者がテストを進める中で、この地域制限が意図した通りに機能していない可能性が浮上した。具体的には、EU圏外であるはずの米国でも機能が有効になってしまう兆候が見られたのだ。

さらに深刻な技術的問題として、外部決済画面を表示できるかどうかをアプリが判断するための命令であるcanPresent()というAPIが、常に「表示できない」を意味するfalseという値を返してしまう現象が発生した。本来、テスト環境が正しく設定されていれば、このAPIは「表示できる」を意味するtrueを返すべき状況だった。この問題により、開発者は外部決済機能のテストを先に進めることができなくなってしまった。

開発者は、この機能を実現するために必要な設定を正しく行っていた。まず、アプリが外部決済機能を利用する権限を持つことを示す「Entitlement」という特別な許可設定を追加した。また、アプリの基本的な設定ファイルであるInfo.plistに、外部決済を許可する国としてEU加盟国の一つであるデンマーク(国コードdk)を明記した。テスト環境も慎重に準備された。テストには実機のiPadを使用し、Apple IDはテスト専用の「サンドボックスアカウント」と呼ばれるものを利用した。このサンドボックスアカウントの国設定は、正しくデンマークに変更されていた。にもかかわらず、canPresent()falseを返し続けるという問題は解決しなかった。

調査を進める中で、問題の根本的な原因が明らかになってきた。テストに使用しているiPadが、サンドボックスアカウントの国設定(デンマーク)を無視し、アプリが認識しているApp Storeの国(ストアフロント)を「USA」のままと判断していたのだ。つまり、アプリ側から見ると、ユーザーは米国にいると判定されていた。EU圏内のユーザーにのみ許可されている外部決済機能は、米国ユーザーに対しては当然提供できないため、canPresent()falseを返すのは、この誤った地域判定に基づけば論理的には正しい挙動と言える。問題は、なぜテストアカウントの国設定が正しく反映されないのかという点にある。

この事象は、システム開発、特に新しい技術を導入する際に直面しがちな課題を浮き彫りにしている。第一に、開発用のテスト環境(サンドボックス)が、実際のユーザーが利用する本番環境と完全に同じように動作するとは限らないという点だ。特に、国や地域といったグローバルな設定が絡む場合、その設定がシステム全体に反映されるまでに遅延が生じたり、予期せぬ別の設定(例えばデバイス本体の地域設定など)に影響されたりすることがある。第二に、プラットフォーム提供側(この場合はApple)が新しい技術をリリースした直後は、ドキュメントが不十分であったり、未知の不具合が含まれていたりするリスクが伴う。開発者は、公式情報だけを頼りにするのではなく、他の開発者との情報交換を通じて解決策を探る必要に迫られる。

このニュースは、単なる一開発者の技術的な悩みというだけでなく、システムエンジニアを目指す者にとって重要な教訓を含んでいる。それは、プログラミングの知識だけでなく、開発環境の特性を理解し、原因が自身のコードにあるのか、それともプラットフォーム側にあるのかを切り分ける分析能力、そしてリージョンロックのような法的・ビジネス的要件をシステムに正確に実装する責任の重さである。現代のシステム開発は、常に変化する外部環境に適応しながら、粘り強く問題解決に取り組む姿勢が求められることを示す好例と言えるだろう。

【ITニュース解説】StoreKit External Purchase – Regional Restriction Not Working + canPresent() Always Returns False | いっしー@Webエンジニア