6
NSString *identifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

上記のコードは、2つのアプリケーションの同じ電話で2つの異なる識別子を提供します-異なるバンドルIDですが、2つのアプリIDと2つの開発プロビジョニングプロファイルが私のAppleアカウントで作成されました。

私の理解では、チームIDが同じである場合、ベンダーの識別子はこれら2つのアプリで同じである必要があります。間違いはどこにありますか?わからないことは? 最初のアプリ

2番目のアプリ

4

3 に答える 3

6

私は今同じ問題と戦っています。「答え」は、identifierForVendor が Apple ドキュメント内の意図した設計に従って壊れていることです。

バンドル ID はリバース DNS 形式であると想定され、最初の 2 つのコンポーネントを使用してベンダー ID が生成されます。たとえば、com.example.app1 と com.example.app2 は同じベンダー ID を持つように見えます。

実際には、identifierForVendor は、同じプロビジョニング プロファイルと署名証明書を使用するアプリでのみ同一です。例として、エンタープライズ環境に複数のアプリがあり、そのすべてが com.mycompany..

identifierForVendor は、bundleID com.mycompany.app1.* とそのプロビジョニング プロファイルを使用するアプリでは同一ですが、com.mycompany.app2 では同じ署名証明書を使用しますが、プロビジョニング プロファイルが異なると異なる identifierForVendor 値が生成されます。

編集:これは iOS7 でのみ発生しますが、iOS6 では問題なく動作します。私は昨日これをしばらくテストし、問題を 7 日中再現することができましたが、6 以内に期待どおりの結果が得られました。

EDIT2: Apple は identifierForVendor の目標投稿を移動しました。彼らは明らかにアルゴリズムの問​​題を特定し、問題を修正する代わりに、ドキュメントの変更により iOS バージョン間で識別子の機能を変更しました。更新されたドキュメントのリンクは以下のとおりです。SMH。

identifierForVendor

于 2014-01-14T20:45:26.730 に答える
4

ベンダーはチーム ID ではなく、次のいずれかによって決定されます。

  • App Store が提供するデータ (App Store からダウンロードした場合)
  • バンドル ID の一部 (他の手段を使用してデプロイされた場合)

これは、デバイスが iOS 6 または 7+ を実行しているかどうかによって異なります。

-[UIDevice identifierForVendor]ドキュメントによると:

通常、ベンダーは App Store から提供されるデータによって決定されます。アプリがアプリ ストアからインストールされていない場合 (エンタープライズ アプリや開発中のアプリなど)、ベンダー ID はアプリのバンドル ID に基づいて計算されます。バンドル ID は、リバース DNS 形式であると見なされます。

iOS 6 では、バンドル ID の最初の 2 つのコンポーネントを使用してベンダー ID が生成されます。バンドル ID にコンポーネントが 1 つしかない場合は、バンドル ID 全体が使用されます。

IOS 7 では、最後のコンポーネントを除くバンドルのすべてのコンポーネントがベンダー ID の生成に使用されます。バンドル ID にコンポーネントが 1 つしかない場合は、バンドル ID 全体が使用されます。

于 2014-11-14T13:38:22.200 に答える
2

2 つの異なるバンドル ID があるためです。

ベンダーは、最初の 2 つのドットで区切られたフィールドによって識別されます。つまり、com.a.app1 と com.a.app2 は同じベンダー (com.a) ですが、com.b.app3 は異なるベンダー (com.b) です。

于 2013-06-26T06:07:07.320 に答える