xcodebuildはスキームが含まれていないと言います


125

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

私が取り組み、常にXCode IDEからビルドしたプロジェクトがありますが、それはうまくいきました。次に、プロジェクトをビルドするためにBambooをセットアップし、コマンドラインからビルドします。

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

XCodeがプロジェクトを開いたとき、または何かおかしなことをしているときにXCodeはどのような魔法をかけていますか?.gitignoreのファイルを除外してはいけないのでしょうか?


xcodeでプロジェクトを開くと.xcschemeファイルが作成されますが、xcuserdata / username.xcuserdatadフォルダーにありますが、ユーザーフォルダーの下にスキームが「生成」される理由がわかりません。それを竹で処理する
Zac Tolley 2013年

回答:


186

あなたは間違いなく.xcschemeファイルに関して正しい軌道に乗っています-自分のプロジェクトの設定中にこの問題が発生しました!

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

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

根本的な原因は、Schemesのデフォルトの動作では、スキームが特に共有としてマークされるまで、スキームを「プライベート」に保つことです。コマンドラインで開始されるビルドの場合、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ではなくコマンドラインを介してビルドを操作するため、Schemesが自動的に生成され、それらのみに依存する機会がありませんワークスペース自体で定義されます。

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

xcodebuildは、<'workspace'パラメータ値> / xcshareddata / xcschemesに存在するファイル<'scheme'パラメータ値> .xcschemeを探します。

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

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

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

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

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


これにより、実際にはランダムなxcodebuildエラーが修正されましたが、エラーは返されませんが、終了コード65が返されました。ありがとう。
Simon Lee

ありがとう!これはまさに私が探していた修正です。
raidfive 2014

MYテストとアーカイブオプションが無効になっているのは、このためです。スキームが共有されていることを確認しました。それでもボットを介してビルドすることはできません。ローカルでビルドすることはできますが、前述のとおり、アーカイブすることはできません。この問題に関連していると思いますか
Alix

ありがとう!スキーマコンテナーをワークスペースに設定すると、TeamCityビルドで発生していた問題が修正されました。
2015年

このメッセージからスキーマを見つける方法。正確にこのメッセージが表示されます。[xcodebuild:エラー:「jamesAppV2」という名前のワークスペースには、「」という名前のスキームが含まれていません。「-list」オプションを使用して、ワークスペース内のスキームの名前を検索できます。]
Qadir Hussain

52

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

xcodebuild -list

またはワークスペース(ポッドなど)を使用している場合

xcodebuild -workspace MyProject.xcworkspace -list

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

ここに画像の説明を入力してください


スキームを共有すると、xcodebuild -list... に表示されます。
Dan Rosenstark、2018

35

答えのほとんどは、Xcodeを使用してスキーマを共有し、変更をリポジトリにコミットすることをお勧めします。もちろん、これは機能しますが、ソースコードにアクセスでき、変更をコミットする権限があり、他のいくつかの前提条件がある場合に限ります。

しかし、考慮すべき「what ifs」がいくつかあります

  • 何らかの理由でXcodeプロジェクトを変更できない場合はどうなりますか?
  • CIサーバーで新しいスキームを自動的に作成するとどうなりますか?
    これは実際にはかなり頻繁に発生します。Calabashのようなテスト自動化フレームワークを使用する場合、通常は既存のターゲットを複製することになります。これにより、スキームも自動的に複製され、元のスキームが共有されていたとしても、新しいスキームは共有されません。

Ruby&xcodeproj gem

xcodeproj Ruby gemの使用をお勧めします。これは非常に優れたオープンソースツールであり、Xcode関連の大量のタスクを自動化するのに役立ちます。

ところで、これはCocoaPodsがXcodeプロジェクトとワークスペースをいじくるために使用する宝石です。

だからそれをインストール

sudo gem install xcodeproj

次に、すべてのスキームを再共有する単純なRubyスクリプトを記述します。gemには、その目的のためのrecreate_user_schemesメソッドがあります。

#!/usr/bin/env ruby
require 'xcodeproj'
xcproj = Xcodeproj::Project.open("MyProject.xcodeproj")
xcproj.recreate_user_schemes
xcproj.save

これは、スキームファイルをユーザーのフォルダーからxcshareddata / xcschemesにコピーするだけでなく、pbxprojファイルを解析して最初にそれらのファイルを作成します。


1
他の誰かがこれに遭遇した場合、それはrecreate_user_schemesテストターゲットを正しく処理しないようです。バグレポートを提出まし
Matt Kantor 2014年

私はそれについてブログを書いた。nsbogan.com/xcode/2014/05/29/share-xcode-schemes。残念ながら、単体テストの問題はまだ修正されていません。
i4niac 2014年

まあ、私はこの解決策を試しました。しかし、実行するxcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity"と、「Scheme <IDEScheme:0x7fc9ea5e5fd0: 'Finance'>をビルドしてアーカイブするように求められましたが、実行先<IDERunDestination:0x7fc9eb47c6c0: 'iPad 2'>は展開プラットフォームではないため、このアクションを実行する必要はありません。許可されました。しかし、私のオープンXCodeのすべてが正常に動作したときに
ІгарЦімошка

2
archiveアクションには常に署名が含まれ、宛先は実際のデバイスに設定する必要があります。あなたの場合、宛先はですiPad 2。これはシミュレータなので、アーカイブはできません。コマンドに欠けている重要なオプションが1つあります-sdk iphoneos。それは、最初にそれを試してみて、それがどうなるかを確認することです。Xcode IDEから実行すると、おそらく宛先が設定されているiOS Deviceか、実際のデバイスが接続されているため、宛先として設定されています。そのため、アーカイブはIDEから機能します。コマンドラインはより「ダム」であり、デフォルトで「間違った」オプションを使用できる場合があるため、より具体的にする必要があります。
i4niac 2014年

1
これはもっと賛成されるべきです-ありがとう!Swiftフレームワークを使用するCalabashプロジェクトは、スキームからビルドする必要があるため、XCode6.1.1でビルドできません。この宝石は素晴らしいです。
David


3

スキームが欠落している一般的な理由の1つは、コミットをオリジンにプッシュし忘れていることです。スキームが見つからないというメッセージが表示された場合は、最初にスキームが共有されていることを確認してから、変更をコミットし、元のサーバーにプッシュしたことを確認してください。


1

CIの実装中にこのエラーが発生しました。上記の質問は、Gitlab独自のCIツールを使用していることを除いて、私の問題と同じです。Bambooにそのようなファイルがあるかどうかを確認できます。ファイルに
変更を加えることで解決しましたgitlab-ci.yml
あなたschemeが共有した後にあなたの利用可能なものを作った後。Xcodeでに移動しProducts>Scheme>Manage Scheme、共有を確認します。

変化

すべての場所に絶対パスを設定します。
例えば。xcodebuild clean archive -archivePath /path/to/your/project/build/testDemo -scheme testDemo | xcpretty
ここ/path/to/your/project/では、パスとtestDemoプロジェクト名を変更する必要があります。


0

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


0

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

に移動Product> Scheme>Manage Schemes

ここに画像の説明を入力してください

次に、スキームのリストが表示され、それぞれが共有されているかどうかが示されます。共有したいものをチェックするだけです(開発ビルドと製品ビルドでは異なる場合があります)

ここに画像の説明を入力してください

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


0

このスレッドに関連する私のケースのソリューションを追加したいと思います。これは、既存のプロジェクトを複製するあなたのためのもので、必要なスキームはすべてすでに共有されています。

ここに画像の説明を入力してください

fastlane lanesすべてのスキームを含むすべてのレーンを正しく表示します。

ここに画像の説明を入力してください

、ただしfastlane gymメインスキームのみを表示(開発およびテストスキームは非表示):

ここに画像の説明を入力してください

解決策はしているスキームの共有オプションのチェックを外しによって記載されていないfastlane gym、再びそれを確認します。スキームの.xcschemeを生成します。

ここに画像の説明を入力してください

ここで、でチェックするとfastlane gym、すべてのスキームがリストされます。

ここに画像の説明を入力してください

次に、それらの.xcshemesファイルをリポジトリにコミットする必要があります。そうすると、プロジェクトを複製する他の開発者がファイルを取得できます。


0

Xcode 11.4を使用しているユーザーがスキームの「共有」ボタンを見つけようとすると、個別のスキームに移動します。

  1. 必要なスキームを選択します
  2. 「編集」を押します
  3. [共有]チェックボックスをオンにします

スキーム編集に共有ボックスが含まれるようになりました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.