xcodebuild каже, що не містить схеми


125

У мене є питання цікавинок.

У мене є проект, над яким я працював і завжди будувався з XCode IDE, і він працював чудово. Тепер я налаштовую Bamboo для створення проекту і як такий будую його з командного рядка.

Проблема полягає в тому, що якщо я перевіряю свій код у GIT, а потім використовую xcodebuild для його створення, він говорить, що схему знайти не можна, але якщо я відкрию проект, він будує, і якщо я спробую побудувати його знову з командного рядка з тією ж командою вона працює.

Якою магією займається XCode, коли я відкриваю проект чи роблю щось німе, можливо, виключаючи файл у своєму .gitignore, що я не повинен?


Щойно я помітив, що коли я відкриваю проект у xcode, створюю .xcscheme файл, але у папці xcuserdata / username.xcuserdatad ... але я не розумію, чому схема отримує "генерування" під папкою користувачів .. і як я збирається впоратися з цим у бамбуку
Зак Толлі

Відповіді:


187

Ви, безумовно, на правильному шляху щодо файлу .xcscheme - у мене ця проблема з’явилася під час налаштування власних проектів!

Що стосується нащадків чи, принаймні, когось, хто потрапляє сюди з пошуку, ось дві версії речей - версія "Я зайнята, тому просто факти, будь ласка", версія та більше обговорення та обґрунтування. Обидві ці версії передбачають, що ви намагаєтеся створити з файлу Workspace; якщо ви цього не зробите, вибачте, оскільки це в основному стосується проектів на основі робочої області.

Скорочена версія "Fix-it"

Першопричиною є те, що поведінка схем за замовчуванням полягає у збереженні схем «приватними», поки вони не будуть позначені спеціально як спільні. У випадку ініційованої збірки командного рядка інтерфейс Xcode ніколи не запускається, а інструмент xcoderun не має власного кешу схем, з яким можна працювати. Мета полягає в створенні, спільному використанні та здійсненні схеми, з якої потрібно запустити Bamboo:

  1. На чистій робочій копії коду відкрийте робочу область проекту.
  2. Виберіть «Схема»> «Керування схемами ...» у меню продукту.
  3. З'являється список схем, визначених для проекту.
  4. Знайдіть схему, яку намагається запустити бамбук
  5. Переконайтесь, що прапорець "Спільний" встановлено для цієї схеми, і що параметр "Контейнер" встановлено на робочу область, а не на файл файлу проекту.
  6. Натисніть "ОК", щоб відхилити аркуш "Керувати схемами".
  7. У вашому проекті на WorkspaceName.xcworkspace / xcshareddata / xcschemes створено новий .xcscheme файл.
  8. Закладіть цей файл у своє сховище та запустіть збірку Bamboo.

Поглиблене обговорення та обґрунтування

Xcode 4 представив робочі простори та схеми як спосіб допомогти спробувати приручити частину хаосу, який притаманний роботі з механікою підключення проектів Xcode, будувати цілі та створювати конфігурації разом. Сам робочий простір має власний набір даних конфігурації, який описує кожну з менших «коробок» даних, які він містить, і виступає скелетом для приєднання файлів .xcodeproj та набором даних загальної конфігурації, які отримують дзеркальне відображення до кожної машини розробника чи системи CI . Це і потужність, і помилка Workspaces - є 1) безліч способів, за допомогою яких можна налаштувати речі на 100% правильно, але помістити в неправильний контейнер або 2) помістити в правильний контейнер, але налаштовано неправильно, таким чином рендеринга даних недоступний для інших частин системи!

Поводження схем Xcode 4 за замовчуванням полягає в автоматичному генеруванні нових схем, оскільки проекти додаються у файл Workspace. Ті з вас, хто додав кілька файлів .xcodeproj, можливо, помітили, що ваш список схем швидко стає нерозумним, особливо, коли файли проектів додаються, потім видаляються та знову переносяться на ту саму робочу область. Усі схеми, створені в автоматичному режимі або створені вручну, за замовчуванням є "приватними" схемами, видимими лише для поточного користувача, навіть коли файли .xcuserdata передаються з даними проекту та конфігурацією. Це є першопричиною цієї криптичної помилки збірки. Bamboo повідомляє з xcodebuild - Оскільки Bamboo управляє збіркою через командний рядок, а не інтерфейс Xcode, у нього немає можливості для автоматичного створення схем і покладається лише на ті, що визначаються в самому робочому просторі.

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

xcodebuild шукає файл <'схема' Значення параметра> .xcscheme, що існує в <'робочому просторі' Значення параметра> / xcshareddata / xcschemes.

Очевидно, є групи способів, за якими можна налаштувати як Bamboo, так і робочу область, тому майте на увазі, що ваша унікальна конфігурація може не відображати на 100% те, що представлено тут. Основні вивіски:

  1. Деякі автоматизовані завдання, про які магічно дбає інтерфейс Xcode, недоступні через CLI Xcodebuild.
  2. Ви можете приєднати схему та побудувати дані конфігурації у багатьох місцях "ієрархії контейнерів". Переконайтеся, що ваші дані звиваються у потрібному контейнері (робоча область, проект та / або ціль збирання)
  3. Поміркуйте, де в ієрархії контейнерів інструмент xcodebuild може шукати дані конфігурації; чудовий показник того, куди він почне шукати, ґрунтується на використанні аргументів '-workspace' або '-project'.

Поле "Спільне" вже встановлено ... тепер що?

Я стикався з цим самим питанням у власному екземплярі Bamboo; виявилося, що схема, яку було зроблено в моєму сховищі, застаріла, і остання версія інструментів командного рядка не спрацювала з цим витончено. Оскільки це існувало раніше, я ознайомився з налаштуваннями, щоб переконатися, що в цій схемі не було нічого яскраво налаштованого, видалив та відтворив схему, гарантувавши, що я позначив її як "Спільна" та повторно подав новий .xcscheme файл сховище.

Якщо все виглядає добре, і відновлення цього не вирішує проблему, двічі перевірте налаштування контейнера - отримати схему, прикріплену до неправильного контейнера в ієрархії, дуже просто!


Це фактично виправило випадкову помилку xcodebuild для мене, яка повертала НЕ помилок, але код виходу 65. Виявляється, контейнер був встановлений у проект, а не в саму робочу область, змінив його і вуаля, проблема вирішена. Дякую.
Саймон Лі

Дякую! Це саме виправлення, яке я шукав.
raidfive

Мої параметри тестування та архіву відключені - це через це. Я перевірив, як поділяється моя схема. досі не в змозі створити через bot.I вмію будувати локально, але, як я вже згадував, я не можу це архівувати. Як ви вважаєте, це пов’язано з цією проблемою
Алікс

Дякую! Встановлення контейнера схеми в мою робочу область вирішило проблеми, які виникли у моїх командах TeamCity.
Форма

як знайти схему з цього повідомлення. Я отримую саме це повідомлення. [Xcodebuild: error: Робоча область під назвою "jamesAppV2" не містить схеми з назвою "". Параметр "-list" може використовуватися для пошуку назв схем у робочій області.]
Qadir Hussain

52

Налагоджуйте проблему так:

xcodebuild -list

або якщо ви використовуєте робочу область (наприклад, з стручками)

xcodebuild -workspace MyProject.xcworkspace -list

Якщо схема не вказана, виправте так:

введіть тут опис зображення


Здійснення спільного використання схем дозволяє їм з’являтися у xcodebuild -list... дякую!
Дан Розенстарк

35

Більшість відповідей пропонують вам зробити вашу схему загальною за допомогою Xcode, а потім здійснити зміни до репо. Це, звичайно, працює, але лише у тому випадку, якщо у вас є доступ до вихідного коду та права на внесення змін, а також кілька інших припущень.

Але є ряд " що якщо ", що слід врахувати

  • Що робити, якщо ви просто не можете змінити проект Xcode з якоїсь причини?
  • Що робити, якщо створити нову схему автоматично на сервері CI?
    Це насправді трапляється досить часто. Якщо ви використовуєте рамку автоматизації тестування, як, наприклад, Калабаш, ви, як правило, дублюєте існуючу ціль, яка також автоматично копіює схему, а нова схема не поділяється, навіть якщо вона була оригінальною.

Ruby & xcodeproj дорогоцінний камінь

Я рекомендую використовувати xcodeproj Ruby gem. Це дійсно крутий інструмент з відкритим кодом, який може допомогти вам автоматизувати тонни завдань, пов’язаних з кодом.

До речі, це дорогоцінний камінь, який CocoaPods використовує для безладу з вашими проектами та робочими місцями Xcode.

Тож встановіть його

sudo gem install xcodeproj

Потім напишіть простий сценарій Ruby, щоб повторно поділитися всіма схемами, дорогоцінний камінь для цієї мети створив метод 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неправильно поводиться з тестовими цілями. Я подав про це помилку .
Метт Кантор

Я про це блогував. nsbogan.com/xcode/2014/05/29/share-xcode-schemes . На жаль, проблема з одиничними тестами досі не вирішена.
i4niac

добре, я спробував це рішення. Але коли я запускаю, xcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity"я отримав 'Схема <IDEScheme: 0x7fc9ea5e5fd0:' Finance '> попросили створити та архівувати, але призначення запуску <IDERunDestination: 0x7fc9eb47c6c0:' iPad 2 '> не є платформою розгортання, і ця дія не повинна мати було дозволено ". Але коли я відкриваю XCode, все працює добре
Ігар Цімошка,

2
archiveдія завжди передбачає підписання, а призначення потрібно встановити на реальний пристрій. У вашому випадку призначення є iPad 2, що, на мою думку, є симулятором, тому архівування не можливе. У вашій команді відсутній один важливий варіант, -sdk iphoneosспробуйте спочатку і подивіться, як це відбувається. Коли ви запускаєте його з Xcode IDE, у вас, ймовірно, встановлено призначення iOS Deviceабо, можливо, у вас підключений реальний пристрій, тому він встановлений як пункт призначення. Ось чому архівування працює з IDE. Командний рядок більш "німий" і іноді може використовувати "неправильні" параметри за замовчуванням, тому вам потрібно бути більш конкретними.
i4niac

1
На це варто більше звертати увагу - дякую! Проекти Калабаш із фреймворками Swift не вдається створити за допомогою XCode6.1.1, оскільки ви повинні побудувати їх за схемою. Цей дорогоцінний камінь є приголомшливим.
Давид


3

Однією з поширених причин відсутності схеми є забування підштовхнути комісії до початку. Якщо ви отримаєте повідомлення про схему, спочатку переконайтеся, що схема поділена, а потім переконайтеся, що ви вчинили зміни І перенесли їх на початковий сервер.


1

У мене виникла помилка під час впровадження CI. Питання, подане вище, відповідає моїм проблемам, за винятком того, що я використовую власний інструмент CI Gitlab. Ви можете перевірити, чи є такий файл у 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

Я зіткнувся з цим питанням, і навіть якщо деякі відповіді тут насправді дають рішення, я не вважав це дуже зрозумілим. Тож я просто додам ще один. Коротше кажучи, як поділитися схемою з 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. Поставте прапорець "Спільний"

Редагування схеми містить Спільне поле зараз

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.