web-dev-qa-db-ja.com

Xcode 9、カルタゴ。 iTunes Connectエラー:「無効なバンドル-許可されていないLLVMインスツルメンテーション」

今日、Xcode 9をダウンロードし、アプリケーションをコンパイルするために必要な変更を加えました。アプリケーションは問題なくコンパイルおよび実行されています。

Xcode 9を使用して、App Storeにアップロードしました。アップロードはエラーなしで成功しました。

次に、Appleから次のメールを送信します。

親愛なる開発者、

「KiteSpotter-Kitesurf風と天気予報」の最近の配信で1つ以上の問題が発見されました。配送を処理するには、次の問題を修正する必要があります。

無効なバンドル-LLVMインスツルメンテーションは許可されていません。 LLVMプロファイリングインストルメンテーションまたはカバレッジコレクションが有効になっているアプリを送信しないでください。 LLVMプロファイリングまたはコードカバレッジをオフにして、アプリを再構築し、アプリを再送信します。

これらの問題を修正したら、修正したバイナリを再配信できます。

よろしく、

App Storeチーム

ターゲットとココアポッドターゲットの両方のコードカバレッジを無効にしました。これは、見つけることができる唯一の関連設定でした。

enter image description here

アプリケーションを再送信すると、同じエラーが表示されます。

私のプロジェクトでは、15以上の依存関係があるCarthageを使用しています。ソリューションを検索すると、すべてのプロジェクトを上記の設定で更新する必要があることがわかりました。

  • それが問題を引き起こしている場合、すべてのフレームワークでこの設定を自動化する解決策はありますか。
  • 他の誰かがこの問題に直面し、整理しましたか。 Carthageフレームワークは問題を引き起こしたのか、それとも何か他のものを生み出したのか?
28
zirinisp

すべての依存関係に対してコードカバレッジをfalseに設定することを自動化するソリューションは、ターミナルで次のコマンドを実行することです(プロジェクトのディレクトリに移動してください)。

grep -lR "codeCoverageEnabled" --include *.xcscheme --null Carthage | xargs -0 sed -i '' -e 's/codeCoverageEnabled = "YES"/codeCoverageEnabled = "NO"/g'

これにより、コードカバレッジがNOに設定され、iTunes Connectからエラーが発生しなくなります。

すべてを機能させるシーケンスは次のとおりです

  • 実行carthage update --platform iOS --no-use-binaries --no-build。これにより、すべての依存関係が更新およびダウンロードされます。 Carthageがコンパイルを開始したら、ctrl + cを押してキャンセルできます。
  • 上記のコマンドを実行して、コードカバレッジをNOに設定します
  • すべてが整ったので、carthage build --platform iOS。これにより、NOのコードカバレッジですべてが構築されます。

これで、アーカイブしてiTCにアップロードできます。

コマンドは https://github.com/gunterhager によって与えられたため、クレジットは彼に与えられます


fastlaneユーザーの代替として、すべてを自動化するfastlaneファイルに以下を追加します。

  desc "Update Carthage"
  lane :update_carthage do
    carthage(
      command: "update",       # One of: build, bootstrap, update, archive. (default: bootstrap)
      use_binaries: false,         # Check out dependency repositories even when prebuilt frameworks exist
      no_build: true,  # When bootstrapping Carthage do not build
      platform: "iOS"  # Define which platform to build for (one of ‘all’, ‘Mac’, ‘iOS’, ‘watchOS’, ‘tvOS‘, or comma-separated values of the formers except for ‘all’)
    )
    sh("grep -lR 'codeCoverageEnabled' --include *.xcscheme --null Carthage | xargs -0 sed -i '' -e 's/codeCoverageEnabled = 'YES'/codeCoverageEnabled = 'NO'/g'")
    carthage(
      command: "build",       # One of: build, bootstrap, update, archive. (default: bootstrap)
      platform: "iOS"  # Define which platform to build for (one of ‘all’, ‘Mac’, ‘iOS’, ‘watchOS’, ‘tvOS‘, or comma-separated values of the formers except for ‘all’)
    )
  end
34
zirinisp

簡単な修正として、ターミナルで次のコマンドを実行します(必ずプロジェクトのルートフォルダーに移動してください)。

  • carthage update --platform iOS --no-use-binaries --no-buildこれは依存関係を更新しますが、何も構築しません。

  • grep -lR "codeCoverageEnabled" --include *.xcscheme --null Carthage | xargs -0 sed -i '' -e 's/codeCoverageEnabled = "YES"/codeCoverageEnabled = "NO"/g'これにより、コードカバレッジがNOに設定されます。

  • carthage build --platform iOSこれにより、コードカバレッジなしですべてのフレームワークが最終的に構築されます。

これで、プロジェクトをアーカイブし、iTunes Connectにアップロードできます。

CarthageプロジェクトのNiceの人々は、すでにユーザーフレンドリーな修正に取り組んでいるので、必ずリリースを確認してください。

13
Gunter Hager

Carthageを最新バージョンに更新しましたが、Xcode 9.1でも同じエラーが発生しました https://github.com/Carthage/Carthage/releases ビルドをiTunesにアップロードできませんでした

enter image description here

私のためにこのように働いた:-

Xcodeを9.1に更新した場合

https://github.com/Carthage/Carthage/releases からダウンロードするcarthage.pkgを更新します

.pkgをインストールし、

プロジェクトを参照して、Terminalcarthage updateコマンドを指定します

そして

次にプロジェクトに行きますBuild Settings find Enable Code Coverage Supportその設定をYesからNo

enter image description here

次に、アーカイブしてAppStoreにアップロードします。ビルドはreadyになります。 Happy

enter image description here

3
Sanju

Carthageをバージョン0.26.0以降に更新し、carthage updateコマンドを再度実行するだけです。

2
arturgrigor