Xcode 12新しいビルドシステムは、複数のコマンドが資産を生産することを警告します.車


Xcode 12の新しいビルドシステムでエラーが発生した場合、

この場合、1つの説明は、コピーリソースビルドフェーズが1つ(または複数)を含むことです.xcassetバンドル( s )Xcodeだけではなく、これらのバンドルをコピーしない代わりに、それらを組み合わせて、変換し、その内容を最適化し、ファイルと呼ばれるファイルを作成します.あなたのプロジェクトのすべての資産カタログの内容を含む車.
しかし、あなたが他のポッドといくつかのポッドを統合するならば、資産カタログも持っていますAssets.car ファイルが作成され、現在Xcodeは問題がありますAssets.car ファイル.どちらが勝つかこれらの2つのファイルのうちどちらが最終的なアプリケーションで終わるか?そして、このファイルに依存する他のステップはどうですか?ビルドステップの後に実行する必要がありますか?これはXcodeが解決できない深刻な問題です.
回避策はいくつかあります.
(1)迅速で汚れた方法は、レガシービルドシステム(ファイル→職場設定)に戻ることです.だがこれは問題を解決しないが回避する.あなたのアプリはまだ動作しますが、いつかアップルはあなたがトラブルになるレガシービルドシステムを終了することを決めた.
(2)場所disable_input_output_paths: true Podfileでは、最適化をスキップし、常にビルドの間、バンドルされた資産をコピーしていないので、毎回、きれいにPODから資源をダウンロードしてください.ビルドに余分なオーバーヘッドを追加する最適化されません、ローカルアプリケーション開発中に悪い経験につながる.
# Podfile
platform :ios, '10.3'
install! 'cocoapods', :disable_input_output_paths => true
( 3 )検索[CP] Copy Pods Resources プロジェクトビルドフェーズで.出力されたパスリストで、${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.car 代わりにこの行をInputHeightパスリストに追加します.これはビルドを通過します.しかしながら、これは手動のステップです、あなたのCIがpod - installをしているたびに、あなたはまだ出力されて、構築に失敗したOutputLand Pathリストのこのエントリーを見ることができました.
さて、自動化するスクリプトを書くことができます.
# Podfile
post_install do |installer|
   project_path = './AdaEmbedFramework.xcodeproj'
   project = Xcodeproj::Project.open(project_path)
   project.targets.each do |target|
    puts target
     if target.name == "AdaEmbedFramework"
         phase = target.shell_script_build_phases.find { |bp| bp.name == '[CP] Copy Pods Resources' }
         if !phase.nil?
            phase.input_paths.push('${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.car')
            phase.output_paths.delete('${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.car')
         end
     end
   end
   project.save(project_path)
end
しかし、これはどのくらいの時間、ここでは、XcodeやCocoapodを解決するために待ってこれをスティックする予定ですか?
( 4 )ライブラリプロジェクトで開いたターゲットの「ビルドフェーズ」で定義済みの「コピーファイル」という名前を作成し、*をドラッグします.XCosSetを新しいフェーズに設定する.
それから、図書館は資産を作りません.車から.代わりに、cocoapodsは*をコピーします.libをインポートするメインプロジェクトにXCosSetを設定し、メインプロジェクトをビルドします.XCosSetを単一に設定するAssets.car ファイル.

これは非常にエレガントな、コピー段階を別の段階に分離することによって、xcode新しいビルドシステムをyellingから停止します.クレジットStackoverFlow
更新:アプリケーションのアイコンが表示されない問題と他の画像資産と安定性に表示されることがあります.このアプローチを選択した場合はチェックしてください.
( 5 )これを解決する最も適切な方法は、推奨されないものを使用するPODを識別することですresources そのpodspecでは、それらを更新するresource_bundles 代わりに.podがこの修正に付属する後者のバージョンを持っていないならば、あなたはrepoをforkして、あなた自身を修理しなければならないかもしれません.公式フィックスがポッドで行われるまで、これは耐えやすい短期的です.あなたが何を破ることができたかわからないかもしれないのでresource_bundles そのpodspecのパッチ.