質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

3回答

12285閲覧

iPhoneアプリ identifierForVendorの値がアップデートが変わる

norihiko

総合スコア11

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2016/01/07 02:10

編集2022/01/12 10:55

iPhoneアプリで、会員証を表示させるアプリを作っております。
会員証なので、各iPhoneを識別させるために、
[UIDevice currentDevice].identifierForVendor
で、uuidを取得し、各iPhoneを識別し、サーバー側からは会員番号を返し、
それを表示させています。
したがいまして、同じuuidがくれば、常に同じ会員番号が返されるのですが、

アプリをアップデートし、既にインストール済のiPhoneで更新をかけると、
[UIDevice currentDevice].identifierForVendor
で取得するuuidが変わってしまいます。

本現象の原因、解決策がございましたら、ご教授いただけると幸いです。

本件、いろいろ調べてもこの現象が出ているという声はないようで、
一点気になる点は、弊社では、本アプリは元のソースがあり、
元のソースをどんどんカスタマイズさせ、
それを複製させるということを行っております。
(Bundle Identifierをはじめ必要な情報を元のソースから書き換えます)
アップデートする際も、最初に公開したソースを改修するのではなく、
カスタマイズされた元のソースの必要な箇所(Bundle Identifierなど)を
書き換えてアップデートされたソースを作り、app storeにアップいたします。
Bundle Identifierは当該アプリと同じなので、app storeでも当該アプリが
アップデートされたものと認識してくれています。
しかしながら、アップデート後の[UIDevice currentDevice].identifierForVendorで得られるuuidが
別のuuidを返してきてしまいます。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2016/01/07 07:49 編集

「カスタマイズされた元のソースの必要な箇所(Bundle Identifierなど)を書き換えて」と、「Bundle Identifierは当該アプリと同じなので」という記述がありますが、Bundle Identifierは「全く同じ」ということで間違いないでしょうか? あと、上書きでアップデートしてもidentifierForVendorが変わってしまうということでしょうか?(一旦アプリを削除してからアップデートするのではなく)
norihiko

2016/01/07 08:01

Bundle Identifierは全く同じで間違いないかにつきまして、iTunes Connectでアップデートしたソースをアップする際に、別のBundle Identifierだと見た目が同じでも違うアプリになってしまうと思っており、iTunes Connectの方で当該アプリのアップデートになっているので全く同じBundle Identifierで間違いないと思っておりますが、当該アプリのアップデートでも違いBundle Identifierでできてしまうことがありますでしょうか。(逆質問ですみません) identifierForVendorが変わってしまうのは、アプリの削除ではなく、アップデートでということで間違いはないです。 よろしくお願いいたします。
fuzzball

2016/01/07 08:34

質問に関しては分かりません。(出来そうでもあり、出来なさそうでもあり)
guest

回答3

0

https://forums.developer.apple.com/thread/4202
によると、昨年5月〜7月頃にAppStoreにバグがあり、この頃に
アップデートしたアプリは不正なidentifierForVendorが
取得されるそうです。

今回のアップデートでidentifierForVendorの値が変わったと
言われているものは、もしかして前回インストールまたはアップデートした
時期が昨年5月〜7月頃だったりしませんか?
まずはその点から確認してみるとよいと思います。

投稿2016/01/07 06:46

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

norihiko

2016/01/07 07:25

ありがとうございます。forumの内容をよく確認させていただきます。
guest

0

UIDevice Class Reference - identifierForVendor

The value changes when the user deletes all of that vendor’s apps from the device and subsequently reinstalls one or more of them.

「情報の追加・修正の依頼」に書いたことや、norihikoさんのYasuhiroMiyakeさんに対するコメントにも関連するのですが、同一ベンダーのアプリを全て削除するとidentifierForVendorが変わるようなのですが、これと関係はないでしょうか?

投稿2016/01/07 07:54

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

norihiko

2016/01/07 08:05

ありがとうございます。アプリの削除は行っておらず、ユーザーが自動アップデートされてその後アプリを開くとidentifierForVendorで別のuuidになってしまいます。
fuzzball

2016/01/07 08:16 編集

YasuhiroMiyakeさんへのコメントにある「そのiPhoneに同一Vendorのアプリが複数あるとこの問題は起こらず」を見て、まさにこれのことだ!と思ったのですが‥。 ただ、アップデート時のプロセスが「ダウンロード→旧Ver削除→新Verインストール」だとすると、一瞬だけアプリが全て無くなるんですよねw
YasuhiroMiyake

2016/01/07 23:37

> アップデート時のプロセスが「ダウンロード→旧Ver削除→新Verインストール」だとすると、一瞬だけアプリが全て無くなるんですよねw 初めて知りました。参考になります。
fuzzball

2016/01/08 00:12

いや、実際にどういうプロセスなのかは知らないですよ。可能性の話です。
guest

0

気になる内容だったため、少し検証してみました。
画面上にidentifierForVendorの値を表示するだけのアプリをAdHocで生成して
バージョンだけ上げたアプリを作成してiTunes 経由でアップデートしましたが再現しませんでした。

私の場合は、アップルの仕様に振り回されないためにサーバ側でUUIDを生成してデータベース上でユニークになってからクライアント側で保持するようにしています。
もちろんこの仕組みだとアプリをアンインストールされると端末が特定出来ないため、
会員登録などを別途行うことが必要となってしまいます。

うる覚えですが、クライアント側の固有(固定?)の値を使用して端末を特定する手法はリジェクト対象となるような記事を読んだ気がします。
それが広告関連だけだったのか、それとも全てだったのかは定かではないですがその固有の値が万が一、流出した場合に端末を買い換える以外に変更する方法がないのであればかなりリスクだと思います。(値に対してハッシュ値を複数回取得することで元の値を直接保持しない方法を用いれば解読リスクは軽減出来ますが絶対ではありません)

話は少し逸れましたが参考になれば幸いです。

投稿2016/01/07 07:21

YasuhiroMiyake

総合スコア1336

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

norihiko

2016/01/07 07:43

ありがとうございます。 AdHocをiTunes経由でアップデートして確認というのをやったことなかったので、この方法で確認してみます。実際に確認用アプリを申請して、確認してをやろうとしており、かなり時間がかかっていました。 追加情報なのですが、そのiPhoneに同一Vendorのアプリが複数あるとこの問題は起こらず、そのVendorのアプリが1個だった場合に発生しております。そのため、社内のiPhoneには自社のアプリがたくさん入っているので、自社で気づきづらい問題でした。 また、一点教えてください。 「サーバ側でUUIDを生成してデータベース上でユニークになってからクライアント側で保持するようにしています。」 こちらは、そのユニークな値をNSUserDefaultsで保存させているということでしょうか。 よろいくお願いいたします。
YasuhiroMiyake

2016/01/07 23:41

NSUserDefaultsまたはキーチェーン、もしくはSandboxにファイルとして保管など細かい要件があることが多いので場合によって実装方法を変えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問