web-dev-qa-db-ja.com

Xcode 7-コードカバレッジデータの生成に失敗しました

テストを実行するとエラーが発生します:

コードカバレッジデータの生成に失敗しました。
「UIDevice」からプロファイルデータファイルを取得できません。

enter image description here

コンソールに警告が出力されました:

シミュレーターが起動するのを120秒待機してタイムアウトしました。現在の状態は1です。

理由は何ですか?

プロジェクトをサードパーティの動的フレームワークと統合する場合、ビルド設定にパスを追加する必要がある場合があります。 -> Build Settings-> "Runpath search paths"を探し、フレームワークへのパスが含まれていることを確認します。

自分のチームが取り組んでいるフレームワークを使用するようにプロジェクトを設定した後、自分でこの問題を自分で見ていました。この特定の設定を更新すると、問題はなくなりました。私の場合、このパスは、「フレームワーク検索パス」設定で設定する必要があったパスと同じでした。

15
Cruinh

これらのXCodeの問題のほとんどを解決するように、この問題を解決しました。

  1. DerivedDataXcode>Preferences>Locations>DerivedData→そこからFinderにジャンプします)
  2. Product>Clean
  3. (altボタンを押したままにする)Product>Clean Build Folder
  4. XCodeを終了します
  5. XCodeを再起動します
  6. デバイス/シミュレーターからアプリを削除する

再試行する。それでも動作しない場合は、別のシミュレータ/デバイスを数回実行してください。遅かれ早かれ、それは再び元のものに再び機能します。

12
MarkHim

ココアポッドを使用している場合は、Cocoapodsリポジトリで次のスレッドを確認してください。 https://github.com/CocoaPods/CocoaPods/issues/5385#issuecomment-226269847

これは私の問題を修正しました:

@dfleming応答のコピー:

何らかの理由で、CocoaPodsはプロジェクトワークスペースを生成するときに「[CP] Embed Pods Frameworks」ビルドフェーズをUIテストターゲットに追加していないようです。

これを手動で追加すると、UIテストが再び実行可能になりました。

このビルドフェーズでは、次のスクリプトを実行する必要があります({YourProject}をプロジェクト名に置き換えます)。

"${SRCROOT}/Pods/Target Support Files/Pods-{YourProject}UITests/Pods-{YourProject}UITests-frameworks.sh"

8
Nuno Gonçalves

私はまったく同じエラーを経験し、最終的には機能するようになりました。これらは私がとったステップです。

  1. アプリをクリーニングして削除した後、Xcodeとシミュレーターを再起動しようとしましたが、うまくいきませんでした。

  2. その後、提案どおりにMacを再起動しましたが、それでも動作しませんでした。

  3. 次に、シミュレータでテストする新しいデバイスを選択しました。以前は5を使用していたが、6に切り替えましたが、それは機能していました。

興味深いことに、iPhone 6シミュレーターに切り替えたとき、アプリを実行して動作する前に、Appleロゴと読み込みバーが表示されました。

5sシミュレーターに戻ると、Appleローディングバーを使用して、以前は実行していなかったため、5sは動作しました。

そのため、シミュレーターの問題のように見え、別のデバイスへの切り替えが機能しました。コンテンツと設定をリセットすると、機能しないデバイスの解決策になる場合があります。

5
danfordham

この問題は、依存関係が欠落しているフレームワークでCocoapodsを使用する場合にも発生する可能性があります。たとえば、Framework Aを使用しており、このフレームワークがFramework Bに依存しているが、Framework AのPodspecでは依存関係が宣言されていない場合。

3
balkoth

Cocoapods link_withメソッドはこの問題を引き起こす可能性があります!

Xcode 7.2でもまったく同じエラーが発生していました。シミュレータやデバイスのリセットを何回もクリアしていないようです。 UITestターゲットを完全に再構築した後、物事はうまくいきました。 .pbxprojファイルの大規模なgit diffで多くの時間を費やした後、プロジェクトの解決策を見つけました。このエラーが発生しているすべての人の根本的な原因に対処するかどうかはわかりませんが、間違いなく私にとっては明確になります。

「配置ターゲット」の下のプロジェクト情報から、「構成」にアプリケーションのすべての可能な構成がリストされます。実行しようとしている構成を展開すると、すべてのターゲットのリストが表示されます。私の場合、cocoapodsはUITestターゲットの基本構成を自動的に追加しました:

enter image description here

これをドロップダウンでnoneに設定します。
次に、左側のメニューでUITestターゲットを選択し、build phasescheck pods manifest.locklink binary with librariesemebd pods frameworksおよびcopy pods resourcesを削除する必要があります。

最後にポッドファイルに移動し、UITestターゲットの言及がないか確認します。私の場合、ポッドファイルの先頭で指定していました。

platform :ios, '8.4'
use_frameworks!

link_with 'My App', 'My UITesting Target' 

pod 'A Pod', '~> 1.0'

代わりに、podfileは各ターゲットの特定の依存関係をリストする必要があります。

platform :ios, '8.4'
use_frameworks!

target 'My App', :exclusive => true do
    pod 'A Pod I want to use in my app', '~> 1.0'
end

UITestsでポッドを使用していないと仮定すると、ターゲットはエラーなしで再ビルドされ、テストが実行されます!

この問題の原因についての私の理解は、各UITestターゲットが、アプリ用とUITestコントローラー用の2つの別個のバンドルを構築することです。残念ながら、cocoapods link_withロジックは、指定されたすべてのターゲットを変更して、バンドル内のpods.frameworkを期待します。ビルドフェーズスクリプトはフレームワークをアプリバンドルに追加しますが、UITestコントローラーバンドルは追加しないため、テストを起動すると、UITestコントローラーバンドルにはフレームワークがなく、xcodeはインストールを中止します。

UITestsでポッドを使用していた場合、これらを同じ方法で指定できるはずです。

target 'My UITesting Target', :exclusive => true do
    pod 'Another Pod I want only for UITesting', '~> 1.0'
end

pod installを実行すると、すべてが正しくリンクされるはずです。

3
Tucker Sherman

私の問題は、unittestターゲットの展開バージョンが正しくないことが原因でした。テスト済みのアプリの展開バージョンは7.0でしたが、unittestのバージョンは自動的に正しくセットアップされませんでした。私のシミュレーターのバージョンは8.4でしたが、10.0に設定されていました。ビルド設定でUTターゲットの展開バージョンを8.0に変更すると、すべての問題が消えました。

2
Henry Sou

私は運のないこれらの解決策をたくさん試しました。 SchemeのTestセクションでCode Coverageオプションをオフにしたため、エラーは抑制されましたが、テストは実行されませんでした。それから、NSLogコンソールにかなりのものがあることに気付きました。そこのどこかで、私はもう使っておらずロードしようとしているフレームワークへの言及に言及しました。

アプリを検索して、[ビルド設定]-> [その他のリンカーフラグ]が、もう存在しないフレームワークを読み込もうとしていました。

削除しました:-framework 3rd_party_libname

その後、テストが再び機能しました。これは混乱を招きましたが、NSLogメッセージを確認してください。 XCode 8.3を使用していました

2
Miro

これが発生する理由の1つは、テスト対象がテストしているホストアプリケーションが正しい依存関係にリンクされていない場合です。たとえば、フレームワークをテストしている場合は、ホストアプリがそれらのフレームワークにリンクされ、埋め込まれていることを確認してください。 enter image description here

2
Mustafa

私の場合、私はSwiftファイルをフレームワークに追加し、それまでは純粋にObjective-Cでした。テストバンドルdid not have any Swiftのコード。

Swift=ファイルをテストバンドルに追加すると、Xcodeは自動的にいくつかのプロジェクト設定を更新し、エラーはなくなりました。

コードが含まれていない場合でも、テストバンドルにSwiftファイルを保持する必要があります。XcodeまたはCocoapodsは、Swift= 「Swiftモード」でテストを実行するかどうかを決定するテストバンドル。

1
aapierce

1つまたは複数のシミュレータがスタックしました。これを修正するために常に機能する唯一のことは、シミュレーターメニューからシミュレーターのコンテンツと設定をリセットすることです。

Reset Content and Settings...

注:これにより、シミュレータからすべてのアプリデータが削除されます。

1
phatblat

長い間これを理解しようとして、新しいテストターゲットを作成する必要があることがわかりました。その後、デバイスを再起動した後、問題が再浮上しなくなりました。

1
Pellet

根本的な原因は、おそらくシミュレーターの障害です。特に最初の起動時には、シミュレータの問題が一般的です。

シミュレーターの起動と接続が成功した後でも問題が発生する場合は、エラーの詳細を投稿してください。

シミュレーターを起動するには、最初の実行をキャンセルして(Xcodeを正常に起動した後)、何度か再実行してみます。

これが繰り返し可能で、複数のプロジェクトで発生し、プロジェクトの再起動およびクリーニング後も持続する場合は、Stack Overflowコミュニティが支援できない場合は、Appleに欠陥を送信することを検討してください。

0
rholmes

これと同じ問題がありましたが、テストターゲットがあり、アプリケーションのターゲットの名前を変更したことが原因でした。有効なホストアプリケーションが設定されていることを確認してください。

  • プロジェクトページでテスト対象を選択します
  • [全般]タブの下に、[ホストアプリケーション]選択ボックスがあります。
  • テストするターゲットを選択します
0
Jason

私も同じ問題に直面しました:

さまざまなプロジェクトで次のことを試みました:

1.プロジェクトにサードパーティのフレームワークがあった場合、問題はテストバンドルが実行時にフレームワークを見つけられないことでした。この更新テストターゲットのRunpath Search Pathsビルド設定では、$(PROJECT_DIR)/Frameworksを追加して(フレームワークをその場所に保持すると仮定します)、このプロジェクトの問題を修正しました。

Project file -> Test target -> Build Settings -> Runpath Search Paths
  1. 他のワークスペースで、テストデバイスを他のシミュレータに変更したとき、またはデバイス自体を変更したとき。助けた。

  2. XcodeまたはMacシステムを再起動します。

それがあなたを助けることを願っています

0
Aks

私のケースで機能した手順スキームを削除し、「スキームの管理」->「スキームの自動生成」をクリックして、私のケースの問題を解決しました。

問題は、シミュレーターおよびキーチェーンに証明書をインストールすることにより発生しました

0
Priya

Sierra 10.12.4のXcode 8.3でこの問題が発生していました

MacでKeychain Accessアプリケーションを開きました

数秒後、キーチェーンアイテムへのアクセス許可を付与するために、パスワードを要求するいくつかのシステムポップアップが表示されました。

パスワードをポップアップに入力すると、テストが機能し始めました。

0
Chris

カルタゴユーザー:

Cartfileに新しいフレームワークを追加した後、これが起こりました。

carthage updateしかし、.frameworkファイルをFinderからアプリターゲットの埋め込みバイナリセクションに追加します。

それをやると、問題はなくなりました。

(これは、上記の@Mustafaが言及した一般的な問題の特定のケースであることに注意してください。)

0
Mike Taverne

Xcode 9.1と複数のビルドターゲットおよび標準コンパイラを使用して、UIテストに取り組んでいたところ、この問題が発生し始めました。だから、おそらくあなたはこの答えに対して私を嫌うでしょう、そして私はそれがダウン投票されることを完全に期待しています、しかしこれは実際に私のために働いた:このエラーを消すために私のマシンからXcodeと私のプロジェクトを完全に削除しなければなりませんでした。

私はこのスレッドですべての提案を何度か試行し、キャッシュファイルのクリア、派生データの削除、ビルド設定の変更、ポッドファイルの更新、クリーニング、各試行後の再構築、シミュレーターのクリーニング、「デバイスの管理」でシミュレーターを手動で再作成しました。数時間のフラストレーションの後、このマシンがUIテストをビルドできなかった理由はまだ完全な謎でした。他のマシンやCIでは正常に機能するように見えました。このスレッドの項目に加えて、pbxprojファイルを手動で変更して、コードカバレッジに関連するすべてのオプションを「NO」に設定しました。

最後に、マシン全体の再フォーマットから1歩離れました。ここの提案に従ってXcodeを完全に削除することにしました: Stackoverflow:Xcodeを完全にアンインストールする方法

具体的には、ワークスペースを破壊し、すべてのプログラムを終了し、リストされたすべてのファイルを削除し、シミュレーターからコンテンツと設定をクリアし、シミュレーターを削除し、20分間マシンの電源を切り、戻ってきて、Xcodeを再インストールし、リポジトリーのクローンを作成し、 !エラーなし。

それが誰かの問題を解決することを願っています。これは「核」オプションであり、これを行う必要はありませんが、私が言ったように、これは私のために働いた唯一のものです。

0
Brooks DuBois