2

謎のエラーメッセージは次のとおりです。

LaunchServices: vendorID の取得に失敗しました

私は、現在ダウンしている Apple サーバーの一部であると推測していますが、近いうちにオンラインに戻るでしょう。

バックグラウンド:

私の iOS アプリには、以前に承認されたアプリ内購入がありません。そのため、これはまだ、アプリの新しいバージョンを新しいアプリ内購入製品と共に提出する必要がある段階です。iTunes Connect には 3 人のテスト ユーザーが構成されています。

今日までのテストでは、テスト製品を購入し、以前に購入した情報を取得することに成功しています。

「休憩」の時間に何が起こったのか

今日、トランザクションを検証するためのサーバー フェッチ コードがいくつか追加されました。このコードは、トランザクション キューの処理後、つまり情報の取得が成功した後に実行されます。

今何が起きているのですか

アプリ内購入コードは、StoreKit フレームワークを使用して製品を要求し、それらを受け取り、UI を適切に表示します。そのため、現時点では StoreKit で少なくともある程度の成功を収めています。

UI ボタン​​をタップして、retrieve-past-purchases コードを起動するときに、テスト ユーザーの資格情報を入力し、座って待ちます。タイムアウト、数秒後、「iTunes Store に接続できません」というエラーが表示されるようです。

これは、iPhone デバイスとシミュレーターの両方で発生します。

しかし、アプリの実行中に Xcode の出力ペインに表示されるエラー メッセージには、次のエラーが表示されます。ボタンを押してトランザクションを復元するとすぐに表示され、テスト ユーザーで接続が失敗すると再び表示されます。

LaunchServices: vendorID の取得に失敗しました

それを修正するために私がしたこと

iPhone では、実際のユーザーからサインアウトし、テスト ユーザーの資格情報を使用しました。シミュレーターでは、~/Library/Application Support/iPhone Simulator/6.1/Library/com.apple.itunessstored/* ファイルを消去しました。

MacBookを再起動しましたが、同じです。

+"vendorID の取得に失敗しました" の Google 検索

ゼロの実数結果を返します。私は途方に暮れています。

4

2 に答える 2

3

スタティック ライブラリ プロジェクトは vendorID にアクセスできないようですが、advertiserID にはアクセスできます。

これは、XCode のシミュレーター内でテストを実行した結果の成果物である可能性があります。おそらく、静的ライブラリーは、実際のデバイスで実行される実際のアプリにリンクされたときに vendorID にアクセスできます。

2 つの異なるシナリオで簡単なテストを実行したところ、いずれかのシナリオで確実にLaunchServices: failed to get vendorIDエラーを表示することができました。

まず、組み込みのテンプレートを使用して、XCode で「空のアプリケーション」を作成しました。このメソッドのみを変更しました:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSLog(@"Vendor ID: %@", [UIDevice currentDevice].identifierForVendor);

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

これは一度も問題がありませんでした。アプリをシミュレーターで直接実行したときと、その (生成された) 単体テストを実行したときの両方で、ベンダーのこのデバイスの UUID を問題なく取得できました。

次に、XCode テンプレートに「Cocoa Touch Static Library」を作成しました。生成されたソース ファイルにクラス メソッドを 1 つだけ作成しました。

+ (void)logDeviceIDs
{
    NSLog(@"Vendor ID: %@", [UIDevice currentDevice].identifierForVendor);
    NSLog(@"Advert ID: %@", [ASIdentifierManager sharedManager].advertisingIdentifier);
}

次に、生成されたテストを変更しました

- (void)testExample
{
    [ReportDevice logDeviceIDs];
}

そして最後に、「ReportDeviceTests」ターゲットを変更し、AdSupportリンクするライブラリを追加したことを確認しました。そして、テストを実行すると、シミュレーターがポップアップし、これが私が見た出力です:

ReportDeviceTests.octest(Tests)' started at 2013-08-04 03:56:00 +0000
Test Suite 'ReportDeviceTests' started at 2013-08-04 03:56:00 +0000
Test Case '-[ReportDeviceTests testExample]' started.
2013-08-03 21:56:00.786 otest[61857:303] LaunchServices: failed to get vendorID
2013-08-03 21:56:00.786 otest[61857:303] Vendor ID: (null)
2013-08-03 21:56:00.787 otest[61857:303] Advert ID: <__NSConcreteUUID 0x24bab30> 5801847F-4679-4701-8B07-28449EF92CB4
Test Case '-[ReportDeviceTests testExample]' passed (0.002 seconds).

したがって、このテストでは、スタティック ライブラリは、advertisingIdentifier を取得できましたが、identifierForVendor を取得できず、「正常に」failed to get vendorIDエラーをトリガーすることができました。

自分で書いた、または外部ベンダー (Flurry など) から提供された静的ライブラリを使用している可能性はありますか? これらは、2 つのテスト ケースの最後のものと同様の動作を引き起こす可能性のあるソースです。

それが役立つことを願っています!

于 2013-08-04T04:01:20.120 に答える
0

xctoolホストアプリケーションのないプロジェクトでテストを実行すると、これと同じ問題が発生しました。つまり、テストターゲットしかありませんでした。私にとっての解決策は、アプリケーション ターゲットを追加し、これをテスト ターゲットのホスト アプリケーション (テスト ターゲットの一般タブ) として設定することでした。これは基本的に、Xcode で新しいプロジェクトを作成するときに通常セットアップされるものを再作成しています。私の場合、次のものも追加する必要がありAppDelegateました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return YES; }

于 2015-09-02T15:04:56.493 に答える