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

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

7 ответов

Решение

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

  • Рабочая область - содержит один или несколько проектов. Эти проекты обычно связаны друг с другом
  • Проект - Содержит код и ресурсы и т. Д. (Вы будете привыкать к этому!)
  • Цель - у каждого проекта есть одна или несколько целей.
    • Каждая цель определяет список параметров сборки для этого проекта.
    • Каждая цель также определяет список классов, ресурсов, пользовательских сценариев и т. Д. Для включения / использования при сборке.
    • Цели обычно используются для разных дистрибутивов одного и того же проекта.
      • Например, у моего проекта есть две цели: "нормальная" сборка и "офисная" сборка, которая имеет дополнительные функции тестирования и может содержать несколько фоновых музыкальных треков и кнопку для изменения трека (как в настоящее время).
      • Вы будете использовать для добавления классов и ресурсов в цель по умолчанию по мере их добавления.
      • Вы можете выбрать, какие классы / ресурсы будут добавлены к какой цели.
        • В моем примере у меня есть класс "DebugHandler", который добавляется в мою офисную сборку
      • Если вы добавите тесты, это также добавит новую цель.
  • Схема - схема определяет, что происходит при нажатии "Построить", "Тест", "Профиль" и т. Д.
    • Обычно каждая цель имеет хотя бы одну схему
    • Вы можете автоматически создавать схемы для ваших целей, перейдя в Схема> Управление схемами и нажав "Создать схемы сейчас"

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

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

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

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

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

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

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

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 - а Target'sконфигурация для действия в Xcode: запускать, тестировать, профилировать, анализировать и архивировать. Каждая цель может иметь одну или несколько схем.Schemaможно поделиться, что поможет вам в CI,Carthage... и находится:

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

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

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

[Запас слов]

tldr; Цели содержат инструкции по созданию модуля / конечного продукта / приложения, например, инструкции по созданию приложения watchOS и приложения iOS. Схемы знают, как реагировать на определенные действия, например действие сборки, действие тестирования или действие архивирования.

Убедитесь, что вы видите этот момент видео WWDC - Введение в Xcode. Если вы хотите получить более глубокие знания, посмотрите видео целиком. Видео простое, но очень фундаментальное. Мой ответ в основном не на этом.


Схема

Схема - это то, как вы указываете, что вы хотите запустить, и она также содержит информацию о том, как вы хотите это запускать.

Например, у меня мог бы быть проект с приложением iOS и приложением Watch, и в этом случае у меня была бы одна схема для запуска моего приложения iOS и одна схема для запуска моего приложения Watch.

Выполнить запустит мое приложение в отладчике.

Test запустит мои тесты.

Профиль запустит мое приложение в инструментах, чтобы я мог измерить его производительность.

Analyze запустит статический анализатор Xcode и поможет выявить проблемы, которые я иначе мог бы пропустить.

И, наконец, действие Archive создаст мое приложение для выпуска и поместит его в архив, который я затем могу использовать для распространения среди моих тестировщиков или в App Store или для сохранения для будущей де-символики журнала сбоев или символизации.

Проект

Проект - это документ, который вы используете для организации своего кода и ресурсов в Xcode.

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

Теперь, чтобы получить доступ к настройкам вашего проекта, вы выбираете свой проект в навигаторе, вы выбираете всплывающее окно в верхней части редактора и выбираете там свой проект.

Цель

У вас есть ссылки на файлы исходного кода и файлы ресурсов на диске, целевые объекты, которые фактически встраивают эти файлы в такие продукты, как ваше приложение, параметры сборки, которые определяют, как ваши целевые объекты создают свои продукты, и схемы, которые настраивают то, как вы выполняете действия, такие как Run [test , build] с вашими целями. Цель содержит инструкции по созданию чего-то вроде приложения или фреймворка.

То, что производит ваша цель, называется ее продуктом. Набор шагов, которые ваша цель выполняет для создания своего продукта, называется фазами сборки.

И, наконец, у цели есть настройки сборки, чтобы настроить, как она строит свой продукт.

Теперь следует отметить, что и проекты, и целевые объекты имеют параметры сборки, а целевые объекты наследуют значение, установленное на уровне проекта, но могут заменять их значением, специфичным для целевого объекта.

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

Подвести итоги:

Цели

Помогает собрать набор файлов для сборки / запуска продукта / модуля / пакета

  • Обычно это просто продукт, который вы отправляете в магазин приложений.
  • Но часто это может быть модуль, для которого вы просто запускаете модульные тесты.

Подобно тому, как одно приложение может иметь цель iOS вместе с целью watchOS. Или просто одну цель iOS. Или одна цель iOS вместе с тестовой целью и т. Д.

Если вы перейдете к своей цели Build Phase >> Compile Sources, вы увидите каждый файл, который создается для этой цели. Пример:

Чтобы явно процитировать документы Apple:

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

Инструкции по созданию продукта принимают форму настроек сборки и этапов сборки, которые вы можете изучать и редактировать в редакторе проекта Xcode. Целевой объект наследует параметры сборки проекта, но вы можете переопределить любые параметры проекта, указав другие параметры на целевом уровне. Одновременно может быть только одна активная цель; схема Xcode указывает активную цель.

Цель и продукт, который она создает, могут быть связаны с другой целью. Если для построения цели требуется вывод другой цели, считается, что первая цель зависит от второй. Если обе цели находятся в одной рабочей области, Xcode может обнаружить зависимость, и в этом случае он создает продукты в требуемом порядке. Такая связь называется неявной зависимостью. Вы также можете указать явные целевые зависимости в настройках сборки, и вы можете указать, что две цели, которые Xcode может ожидать иметь неявную зависимость, на самом деле не зависят. Например, вы можете создать и библиотеку, и приложение, которое связывается с этой библиотекой в ​​одной и той же рабочей области. Xcode может обнаружить эту взаимосвязь и сначала автоматически построить библиотеку. Тем не мение,если вы действительно хотите связать с версией библиотеки, отличной от той, которая встроена в рабочую область, вы можете создать явную зависимость в настройках сборки, которая переопределяет эту неявную зависимость.

Схемы

Заданную цель можно поставить разными действиями.

  • строить
  • пробег
  • тест
  • профиль
  • архив

У вас может быть схема, в которой включена вся диагностика (что замедляет отладку), по сравнению со схемой, в которой ее нет. Или схема, которая запускает определенные тесты, связанные с производительностью, по сравнению со схемой, которая запускает как модульные тесты, так и тесты производительности. Вы можете отредактировать схему, чтобы она выполняла такие действия, как:

  • Создание нескольких целей

  • Выполнение скриптов до или после любого действия

  • Отправка писем до или после любого действия

  • Запуск с диагностикой управления памятью

  • Создание сборки отладки или выпуска для любого действия.

Для получения дополнительной информации см. Управление схемами.


Чтобы собрать все вместе:

Как только вы нажмете «Выполнить», Xcode посмотрит на выбранную схему . Он найдет связанную с ним цель (и) . Используйте этапы сборки этой цели и ее настройки сборки ( будут включены любые настройки проекта, которые не переопределены целевыми настройками), чтобы создать продукт в выбранном месте назначения (местом назначения может быть симулятор iPhone, физический iPhone или watchOS. , так далее).

СНОВА ПОСМОТРЕТЬ ВИДЕО WWDC!

Мое мнение:

Target - нижняя абстракция - разного рода сборки. Каждая цель имеет свои собственные настройки сборки (поэтому, если вы разбились на несколько целей, позаботьтесь об этом огромном листе индивидуально для каждой цели). Цели имеют удобный способ включения / исключения файлов, поэтому вы можете эффективно настраивать сборку для каждого файла.

Схема - более высокая абстракция - направляет цель через различные способы развертывания (Выполнить, Тестировать, Архивировать). Имеет скромные способы настройки сборки с помощью параметров среды, но использует параметры сборки из целевого объекта. Создание / редактирование / удаление схем дешевле и проще целевых.

У вас может быть несколько схем, управляющих одной целью разными способами.

Workspace (.xcworkspace). Несколько проектов могут быть сгруппированы в рабочей области.

Project файлы используются для определения среды сборки, инструментов, ресурсов и содержат ссылки на файлы кода.

Target - Проекты состоят из небольших блоков, называемых целями. Цели могут зависеть друг от друга. Когда цель зависит от другой, эта цель создается первой, чтобы использовать свой продукт из зависимой цели. Цели включают в себя необходимую конфигурацию для создания продуктов платформы, таких как

  • Application targets используются для создания исполняемых файлов

  • Library and framework targets компилировать двоичные файлы библиотеки кода.

  • Test - Включает набор для тестирования пользовательского интерфейса iOS и набор для тестирования iOS UnitTesting

  • Aggregate [цель] - имеет только Run Script этап строительства или Copy Files фаза сборки. Например, он используется для создания Universal framework

Dependencies - Цели могут иметь зависимости. Зависимости - это фреймворки или библиотеки, с которыми связаны наши цели, и которые включают в себя исходный код и ресурсы, которыми можно поделиться с нашей целью.

Scheme, Еще один элемент проектов Xcode - схемы. Проект может иметь несколько из них, и они могут быть общими и включены как часть проекта для использования людьми, работающими над проектом. Схемы определяют конфигурацию для каждого из доступных действий в XCode: запуск, тестирование, профиль, анализ и архивирование.

Источник здесь и здесь

Узнайте больше о библиотеке и фреймворке

Другие вопросы по тегам