[iOS] Buildの種類によるIDFVの挙動の違い
要約
StoreBuildとTestflightでは、IDFVが別々の値になる。
AppをUpdateしたときに、IDFVがUpdate前後で一致するかを確認したいときは、StoreBuild→StoreBuild, Testflight→Testflightで確認する必要がある。
環境
- Xcode15.2
- iOS 17
IDFVとは
DeviceとAppのVendorによって一意に決定される、アルファベットと数字からなる文字列。
型はUUID。(e.g. FA793D08-2C53-427A-81E7-047104FE2E1D)
AppStoreからInstallされたAppのVendorは、AppStoreの情報によって決まる。
そうでない場合Vendorは、BundleIDから決まる。
(e.g Testflight, EnterpriseBuildなど?)
その場合は、BundleIDの、最後の部分以外が使用される。
(e.g. Com.example.hoge.app1なら、Com.example.hogeの部分)
IDFVの挙動
Store Release build
同じVendorから公開されているAppは同じIDFVの値になる。Vendorが異なると値も異なる。
- e.g.
- A社のApp(A-shopping, A-Pay)と、B社のApp(B-shopping, B-Pay)が同一デバイスにインストールされているとする。
このとき、A社のApp間ではIDFVの値は同じ。B社のApp間でも同様。(IDFV_A,IDFV_B)
- A社のApp(A-shopping, A-Pay)と、B社のApp(B-shopping, B-Pay)が同一デバイスにインストールされているとする。
そのVendorのすべてのAppをUninstallするまでは、同じ値が使用される。
- e.g.
- A-shoppingとA-PayをInstallした状態で、A-PayをUninstallし、再度Installしても、A-PayのIDFVはIDFV_Aのまま。
- A社のAppをすべて(A-shopping, A-Pay)Uninstallして、再度A-PayをInstallすると、IDFVの値は変更される。(IDFV_A2, IDFV_A != IDFV_A2)
- A-shoppingとA-PayをInstallした状態で、A-PayをUninstallし、再度Installしても、A-PayのIDFVはIDFV_Aのまま。
AppのUpdateでは値は変化しない。
- e.g.
- A-Payをv1.0 → v2.0にUpdateしても、値は同じまま。
- A-Payをv1.0 → v2.0にUpdateしても、値は同じまま。
Deviceが異なると値も異なる。
- e.g.
- Device1とDevice2では、A-Pay, B-PayのIDFVの値は異なる。
- Device1とDevice2では、A-Pay, B-PayのIDFVの値は異なる。
Testflight Build
StoreBuildの場合と同じ挙動
- 同じVendorのAppは同じIDFVの値
- そのVendorのすべてのAppをUninstallすると、IDFVの値は変わる。
TestflightのIDFVは StoreBuildのものとは異なる。 (IDFV_A, IDFV_A**)

そのため、AppをUpdateしたときに、IDFVが同一かを確かめたいときは、Testflight → Testflightか、StoreBuild → StoreBuildで確認する必要がある。
StoreBuildとTestflightではIDFVの値が異なるので、StoreBuild → Testflightの場合ではテストできない。
EnterpriseBuild(e.g. AppCenter Build)
基本的には、InstallするたびにIDFVの値が変化する。(と思われる)
ここからは、挙動からの推測
(推測)BundleIDの最後の部分だけが異なるAppが複数存在し(同じAppのPROD BuildとSTG Buildがある場合)、かつ、それらが同じVersionのときは、同じIDFVの値になる?
AppA_STGとAppA_PRODがあったとする。
それぞれのBundleIDは、
AppA_STG: Com.sample.app.stg
AppA_PROD: Com.sample.app.prod
Case1:
- Install AppA_STG(v1.0)
- Uninstall AppA_STG
- Install AppA_STG(v1.0)
このときは、Step1とStep3でIDFVの値が異なる。
Case2:
- Install AppA_STG(v1.0)
- Install AppA_Prod(v1.0)
このときは、Step1とStep2でIDFVの値は同じになる。
Case3:
- Install AppA_STG(v1.0)
- Install AppA_Prod(v1.1)
このときは、Step1とStep2でIDFVの値が異なる。
Refs
Documentが少なく経験から推測している部分もあるため、お気付きの点があれば、教えてもらえるとうれしいです。
Discussion