😬

[iOS] Buildの種類によるIDFVの挙動の違い

2024/07/17に公開

要約

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)

その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)

AppのUpdateでは値は変化しない。

  • e.g.
    • A-Payをv1.0 → v2.0にUpdateしても、値は同じまま。

Deviceが異なると値も異なる。

  • e.g.
    • 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:

  1. Install AppA_STG(v1.0)
  2. Uninstall AppA_STG
  3. Install AppA_STG(v1.0)
    このときは、Step1とStep3でIDFVの値が異なる。

Case2:

  1. Install AppA_STG(v1.0)
  2. Install AppA_Prod(v1.0)
    このときは、Step1とStep2でIDFVの値は同じになる。

Case3:

  1. Install AppA_STG(v1.0)
  2. Install AppA_Prod(v1.1)
    このときは、Step1とStep2でIDFVの値が異なる。

Refs

Documentが少なく経験から推測している部分もあるため、お気付きの点があれば、教えてもらえるとうれしいです。

Discussion