0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity】SystemInfo.deviceUniqueIdentifierの罠(iOS)

Last updated at Posted at 2024-10-15

はじめに

AppStoreにてリリースしているアプリのとある処理で、SystemInfo.deviceUniqueIdentifierを使用していた。
SystemInfo.deviceUniqueIdentifierについて、Unity公式ドキュメントには以下のような記載がある。

A unique device identifier. It's guaranteed to be unique for every device (Read Only).

iOS: Uses UIDevice.identifierForVendor to generate a unique device identifier.

ほう、固有のID!
同じデバイスなら必ず同じ値が返ってくるんや!と思ってたら、大目玉を喰らうらしい。
今回TestFlight版とストアリリース版ビルドの行き来でも値が変わることがわかったので覚え書き。

環境

OS: macOS Sequoia 15.0
Unity: 2022.3.12f1
iPhoneのOSバージョン: 18.0

経緯

私がAppStoreでリリースしているとあるアプリでは、動作確認などにTestFlightを使用している。
リリース後、不具合を見つけたので修正版を作りTestFlightへアップ。
動作確認のため、インストールされていたストアリリース版ビルド(1.0.0)をそのまま更新する形でTestFlight版ビルド(1.0.1)にアップデートした。

すると予期せぬエラーが発生。
調べてみると、どうやらdeviceUniqueIdentifierの値が変わったことによるエラーの模様。
ちなみにTestFlight版ビルド(1.0.0)→TestFlight版ビルド(1.0.1)ではdeviceUniqueIdentifierの値は変わらず、エラーは起きなかった。

どういう時に値が変わるのか

SystemInfo.deviceUniqueIdentifierの値は、iOSにおいてはUIDevice.identifierForVendorを使用して生成しているらしい。
Apple公式ドキュメントには次の記載があった。

The value in this property remains the same while the app (or another app from the same vendor) is installed on the iOS device. The value changes when the user deletes all of that vendor’s apps from the device and subsequently reinstalls one or more of them. The value can also change when installing test builds using Xcode or when installing an app on a device using ad-hoc distribution. Therefore, if your app stores the value of this property anywhere, you should gracefully handle situations where the identifier changes.

DeepL先生↓

このプロパティの値は、アプリ(または同じベンダーの別のアプリ)がiOSデバイスにインストールされている間は同じままです。 ユーザーがデバイスからそのベンダーのアプリをすべて削除し、その後 1 つまたは複数のアプリを再インストールすると、値は変更されます。 また、Xcode を使用してテストビルドをインストールするときや、アドホック配布を使用してデバイスにアプリをインストールするときにも値が変わることがあります。 したがって、アプリがこのプロパティの値をどこかに保存する場合は、識別子が変更される状況を優雅に処理する必要があります。

つまり、
① 同一デベロッパが作ったアプリを端末から一掃して、再インストールした場合
② Xcodeを使用したテストビルドをインストールする時
③ AdHoc配布のビルドをインストールする時

に変わる可能性があって、TestFlightは②に当てはまるってコト…?
端末には同一デベロッパの他のアプリもインストールされていたので①には該当せず、その可能性が高い。

③に関しては、使用する配布方法によっても変わるっぽい。
Firebaseの「AppDistribution」では、アップデートでビルドを更新するたびにエラーが起きていたので、値が変わってたと思われる。
一方、「DeployGate」でのアップデートや、Xcodeの「Device and Simulator」から直接ipaを書き込んだ場合はエラーは起きなかったので、この場合は変わらないと見られる。

おわりに

SystemInfo.deviceUniqueIdentifierを使う場合は、値が変わることを前提とした優雅な設計にしましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?