127

骨董品の問題があります。

私が取り組んできたプロジェクトがあり、常にXCode IDEから構築されており、正常に機能しました。現在、プロジェクトをビルドするためにBambooをセットアップしているので、コマンドラインからビルドしています。

問題は、GITからコードをチェックアウトし、xcodebuildを使用してビルドすると、スキームが見つからないと表示されますが、プロジェクトを開くとビルドされ、コマンドラインから再度ビルドしようとすると、同じコマンドで動作します。

プロジェクトを開いたとき、または何か馬鹿げたことをしているとき、XCodeはどのような魔法を使っていますか?おそらく、.gitignore内のすべきでないファイルを除外していますか?

4

10 に答える 10

189

.xcscheme ファイルに関しては間違いなく正しい道を進んでいます。自分のプロジェクトをセットアップしているときにこの問題が発生しました。

後世、または少なくとも検索からここにたどり着いた人のために、ここに2つのバージョンがあります.「私は忙しいので、事実だけをお願いします」バージョンと、より複雑な議論と根拠. これらのバージョンは両方とも、ワークスペース ファイルからビルドしようとしていることを前提としています。そうでない場合は、申し訳ありませんが、これは主にワークスペース ベースのプロジェクトに当てはまります。

凝縮された「Fix-it」バージョン

根本的な原因は、スキームのデフォルトの動作が、スキームが共有として明確にマークされるまでスキームを「非公開」に保つことです。コマンドラインで開始されたビルドの場合、Xcode UI は実行されず、xcoderun ツールには、使用するスキームの独自のキャッシュがありません。目標は、Bamboo で実行するスキームを生成、共有、およびコミットすることです。

  1. コードのクリーンな作業コピーで、プロジェクトのワークスペースを開きます。
  2. 製品メニューから [スキーム] > [スキームの管理...] を選択します。
  3. プロジェクトに定義されたスキームのリストが表示されます。
  4. Bamboo が実行しようとしているスキームを見つける
  5. そのスキームの [共有] ボックスがオンになっていること、および [コンテナー] 設定がプロジェクト ファイル自体ではなくワークスペースに設定されていることを確認します。
  6. [OK] をクリックして、[スキームの管理] シートを閉じます。
  7. プロジェクトの WorkspaceName.xcworkspace/xcshareddata/xcschemes に新しい .xcscheme ファイルが作成されました。
  8. このファイルをリポジトリにコミットし、Bamboo ビルドを実行します。

より深い議論と理論的根拠

Xcode 4 では、関連する Xcode プロジェクトを配線し、ターゲットをビルドし、構成をビルドするメカニズムを処理することに固有の混乱の一部を試して飼いならすのに役立つ方法として、ワークスペースとスキームが導入されました。ワークスペース自体には、含まれるデータの小さな「ボックス」のそれぞれを説明する独自の構成データのセットがあり、.xcodeproj ファイルと、各開発者のマシンまたは CI システムにミラーリングされる共有構成データのセットを添付するためのスケルトンとして機能します。 . これは、ワークスペースの力であると同時に落とし穴でもあります。1) 100% 正しく構成されているのに間違ったコンテナーに入れられる方法がたくさんあります。または、2) 正しいコンテナーに入れられているのに、構成が不適切であるためにデータをレンダリングする方法があります。システムの他の部分からはアクセスできません!

Xcode 4 スキームのデフォルトの動作は、プロジェクトがワークスペース ファイルに追加されると、新しいスキームを自動的に生成することです。いくつかの .xcodeproj ファイルを追加した方は、特にプロジェクト ファイルが追加され、削除され、同じワークスペースに再度追加されると、スキーム リストがすぐに手に負えなくなることに気付いたかもしれません。自動生成または手動で作成されたすべてのスキームは、.xcuserdata ファイルがプロジェクトのデータと構成でコミットされている場合でも、現在のユーザーにのみ表示される「プライベート」スキームにデフォルト設定されます。これが、Bamboo が xcodebuild から報告する不可解なビルド エラーの根本的な原因です。Bamboo は Xcode UI ではなくコマンド ラインを介してビルドを操作するため、スキームが自動的に生成される機会がなく、スキームが自動的に生成される機会がありません。ワークスペース自体で定義されます。

xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug

xcodebuild は、<'workspace' Parameter Value>/xcshareddata/xcschemes に存在するファイル <'scheme' Parameter Value>.xcscheme を探します。

明らかに、Bamboo とワークスペースの両方を構成する方法はたくさんあります。そのため、独自の構成がここに示されているものに 100% マッピングされない可能性があることに注意してください。重要なポイント:

  1. Xcode UI が魔法のように処理する特定の自動化されたタスクは、Xcodebuild CLI 経由では利用できません。
  2. 「コンテナ階層」内の多くの場所にスキームとビルド構成データをアタッチできます -- データが適切なコンテナ (ワークスペース、プロジェクト、および/またはビルド ターゲット) に配置されていることを確認してください。
  3. xcodebuild ツールが構成データを探しているコンテナ階層の場所を検討してください。'-workspace' または '-project' 引数の使用に基づいて、どこから検索を開始するかを示す優れた指標となります。

「共有」ボックスはすでにチェックされています。

自分の Bamboo インスタンスでも同じ問題が発生しました。私のリポジトリにコミットされたスキームは古く、最新バージョンのコマンド ライン ツールでは適切に処理されていないことが判明しました。これは以前に存在していたので、設定を調べて、スキームについて明らかにカスタマイズされたものがないことを確認し、スキームを削除して再作成し、「共有」としてマークしたことを確認し、新しい .xcscheme ファイルをリポジトリ。

すべてに問題がなく、再構築しても問題が解決しない場合は、コンテナーの設定を再確認してください。そのスキームが階層内の間違ったコンテナーにアタッチされるのは非常に簡単です。

于 2013-04-17T01:38:15.220 に答える
55

次のように問題をデバッグします。

xcodebuild -list

または、ワークスペースを使用している場合 (例: Pod を使用)

xcodebuild -workspace MyProject.xcworkspace -list

スキームがリストされていない場合は、次のように修正します。

ここに画像の説明を入力

于 2014-04-01T15:18:54.207 に答える
9

2分後にわかりましたが、スキームを共有に設定する必要があるという別のスタックオーバーフローを見つけました... Xcode 4はスキームデータをどこに保存しますか?

于 2013-01-16T22:28:45.710 に答える
0

同じ問題が発生しましたが、xcode をメイン プロジェクトのサブプロジェクトとしてビルド中に発生しました。xcodeスタンドアロンでサブプロジェクトを構築しました-その後、このエラーは消えました。

于 2016-12-01T03:40:57.757 に答える
0

私はこの問題に直面しましたが、ここでの回答のいくつかが実際に解決策を提供したとしても、あまり明確ではありませんでした. というわけで、もう1つだけ追加します。一言で言えば、excode からスキーマを共有する方法です。

Product> Scheme>に移動しますManage Schemes

ここに画像の説明を入力

次に、スキームのリストが表示され、それぞれが共有されているかどうかが示されます。共有したいものにチェックを入れてください (dev ビルドと prod ビルドでは異なる可能性があります)

ここに画像の説明を入力

この記事から取得した画像https://developer.nevercode.io/docs/sharing-ios-project-schemes

于 2018-09-02T09:39:18.353 に答える