Xcode: Что такое цель и схема на простом языке?

205

Да, название говорит это :-) Что они означают на простом английском языке? Я действительно не понимаю объяснения на веб-сайте Apple, и мне нужно переименовать свою цель, и я боюсь, что после этого ничего не получится ..

MichiZH
источник
2
Документы: developer.apple.com/library/content/featuredarticles/…
Ник Ков
Стоит прочитать blog.just2us.com/2009/07/…
andilabs

Ответы:

309

Я добавил в Workspace и Project тоже!

  • Рабочая область - содержит один или несколько проектов . Эти проекты обычно связаны друг с другом
  • Проект - Содержит код и ресурсы и т. Д. (Вы будете привыкать к этому!)
  • Цель - у каждого проекта есть одна или несколько целей.
    • Каждая цель определяет список параметров сборки для этого проекта.
    • Каждая цель также определяет список классов, ресурсов, пользовательских сценариев и т. Д. Для включения / использования при сборке.
    • Цели обычно используются для разных дистрибутивов одного и того же проекта.
      • Например, у моего проекта есть две цели: «нормальная» сборка и «офисная» сборка, которая имеет дополнительные функции тестирования и может содержать несколько фоновых музыкальных треков и кнопку для изменения трека (как в настоящее время).
      • Вы будете использовать для добавления классов и ресурсов к вашей цели по умолчанию по мере их добавления.
      • Вы можете выбрать, какие классы / ресурсы будут добавлены к какой цели.
        • В моем примере у меня есть класс "DebugHandler", который добавляется в мою офисную сборку
      • Если вы добавите тесты, это также добавит новую цель.
  • Схема - схема определяет, что происходит при нажатии «Построить», «Тест», «Профиль» и т. Д.
    • Обычно каждая цель имеет хотя бы одну схему
    • Вы можете автоматически создать схемы для ваших целей, перейдя в Схема> Управление схемами и нажав «Создать схемы сейчас»
Джеймс Вебстер
источник
Давайте попробуем, если я правильно понял ... Я программирую приложение и ставлю две цели. Тот, который я загружу в магазин приложений, и тот, в котором я уже разрабатываю следующую версию того же приложения. И в схемах я делаю, например, одну схему в обеих целей для запуска и одну схему для отладки? Но зачем мне для этого разные схемы? Я не понял преимущества того, что Би Джей Гомер ..
MichiZH
FWIW, я не использую разные схемы для выпуска и отладки, если я не добавляю дополнительные функции отладки, как я описал в своем ответе.
Джеймс Вебстер
2
Отличное объяснение, братан! ! !
Сагар Калатхил
6
что ты имеешь в виду, что в твоем офисе внизу есть музыкальная кнопка. Есть ли в вашем приложении дополнительный код, который активируется только в офисной сборке, или музыка запускается на вашем Mac. Извините, я в замешательстве
3366784
Этот вид определяет, какие вещи составляют каждую концепцию, но не цель каждого элемента. Для меня это то, о чем спрашивал ОП.
О'Руни
67

Целью является конечным продуктом , созданный путем запуска «сборки» в Xcode. Это может быть приложение, или фреймворк, или статическая библиотека, или пакет модульных тестов. Что бы это ни было, оно обычно соответствует отдельному элементу в папке «встроенные продукты».

Схема представляет собой совокупность целей , которые вы работаете с вместе. Он определяет, какие цели используются, когда вы выбираете различные действия в XCode (Run, Test, Profile и т. Д.). Часто у вас будет только одна схема, в которой используется основная цель приложения для действий Run, Archive и Profile, а также Цель модульного теста для действия Тест. Если вы строите два связанных приложения, у вас могут быть две схемы, в которых используется один и тот же пакет модульного тестирования, но разные цели приложения.

Основное преимущество схем (представленных в Xcode 4) заключается в том, что они позволяют переключаться между запуском приложения и юнит-тестами без необходимости переключения выбранной цели.

Би Джей Гомер
источник
61

Я визуальный человек, поэтому для объяснения концепции я буду использовать диаграмму.

Когда у вас есть несколько целей, они могут быть сопоставлены с действиями Xcode Run, Test, Profile, эта концепция определяет схему

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

Мишень представляет собой версию вашего проекта , то есть цели немного отличаются в классах и ресурсах для использования во время построено. Проект может иметь несколько настроек времени для отдельных требований распространения.

Абхинав Сингх
источник
7
Эта диаграмма кажется неправильной. Схема должна быть привязана к конкретной цели, я не вижу, где внутри схемы вы можете иметь несколько целей.
Благо
6
@ Бун Нет, небрежно, выбор правильный. В редакторе схем щелкните элемент «build» слева. В правой части нажмите «+», и вы сможете добавить больше целей к этой схеме. Отметьте флажки по желанию. Исполняемые файлы этих целей затем доступны в других действиях (Выполнить, Профиль и т. Д.) В выпадающем списке исполняемых файлов.
occulus
Это хорошо, но отсутствует схема конфигурации сборки. Я рассматриваю схему как совокупность того, как действия (Run, Test, Profile) соответствуют комбинации целей и конфигураций сборки (debug, release, qa, prod и т. Д.).
Стив Мозер
3

Workspace( .xcworkspace) - это контейнер из нескольких projects. Он был создан как следующий шаг cross-project references[О]

  • Workspaceсодержит все schemesиз включенногоprojects
  • Workspaceобрабатывает все implicit dependencies[О]

Замечания:

  • Работать с разными проектами внутри одинаково workspaceи не ловитьCouldn't load Project.xcodeproj because it is already opened from another project or workspace
  • Cocoapods[О] работа сworkspaceгде создает Podsпроект

Project( .xcodeproj) - это контейнер для targetsи scheme. Он определяет файлы кода, ресурсы ...

Target- PBXNativeTargetраздел. Определяет определенный набор параметров сборки, которые генерируют:

  • Application target
  • Library and framework targets
  • Test
  • Aggregate[О] . Например, он используется для созданияUniversal frameworkилиUmbrella framework

Scheme- Project'sконфигурация для действий в Xcode: запуск , тестирование , профиль , анализ и архивирование . Schemaможно поделиться, что поможет вам в CI, Carthage... и расположен:

<project_path>/<project_name>.xcodeproj/xcshareddata/xcschemes

Dependency- Targetsможет иметь dependencies. Зависимость является источником ссылки против. Эти зависимости могут быть связаны статически или динамически. [About] Существует два типа:

  • Explicit Dependency[About] - Исходный код зависимости, находящейся в том же проекте или во вложенном проекте.
  • Implicit Dependency[О программе] - исходный / закрытый код зависимости, который находится в проекте и является частью той же рабочей области.

[Словарь]

yoAlex5
источник