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

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


person MichiZH    schedule 17.12.2013    source источник
comment
Документы: developer.apple.com/library/content/featuredarticles/   -  person Nik Kov    schedule 25.03.2017
comment
стоит прочитать blog.just2us.com / 2009/07 /   -  person andilabs    schedule 16.09.2017


Ответы (6)


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

  • Рабочая область - содержит один или несколько проектов. Эти проекты обычно связаны друг с другом.
  • Проект - содержит код, ресурсы и т. д. (вы к этому привыкнете!)
  • Target - Each project has one or more targets.
    • Each target defines a list of build settings for that project
    • Каждая цель также определяет список классов, ресурсов, пользовательских скриптов и т. Д. Для включения / использования при построении.
    • Targets are usually used for different distributions of the same project.
      • For example, my project has two targets, a "normal" build and an "office" build that has extra testing features and may contain several background music tracks and a button to change the track (as it currently does).
      • Вы будете использовать для добавления классов и ресурсов к цели по умолчанию по мере их добавления.
      • You can pick and choose which classes / resources are added to which target.
        • In my example, I have a "DebugHandler" class that is added to my office build
      • Если вы добавляете тесты, это также добавляет новую цель.
  • Scheme - A scheme defines what happens when you press "Build", "Test", "Profile", etc.
    • Usually, each target has at least one scheme
    • Вы можете автоматически создавать схемы для своих целей, перейдя в «Схема»> «Управление схемами» и нажав «Автосоздание схем сейчас».
person James Webster    schedule 17.12.2013
comment
Попробуем, правильно ли я понял ... Я программирую приложение и ставлю две цели. Один, который я загружу в магазин приложений, и другой, в котором я уже разрабатываю следующую версию того же приложения. А в схемах я делаю например одну схему в обоих таргетах для запуска и одну схему для отладки? Но зачем мне для этого разные схемы? Я не понимал преимуществ Би Джей Гомера .. - person MichiZH; 17.12.2013
comment
FWIW, я не использую разные схемы для выпуска и отладки, если я не добавляю дополнительные функции отладки, как я описываю в своем ответе. - person James Webster; 17.12.2013
comment
что вы имеете в виду, что в вашем офисном здании внизу есть музыкальная кнопка. В вашем реальном приложении есть дополнительный код, который активируется только в офисной сборке, или музыка запускается на вашем Mac. Извини я запутался - person 3366784; 07.07.2018
comment
Этот тип определяет, из чего состоит каждое понятие, но не цель каждого элемента. Для меня это то, о чем спрашивал ОП. - person O'Rooney; 27.03.2020
comment
имеет ли xcodebuild build --workspace какое-либо отношение к сборке Scheme? - person ximmyxiao; 21.05.2020
comment
@ 3366784 Приведу другой пример. Предположим, вы были компанией, которая управляла кодовой базой как Uber, так и Lyft (двух очень крупных компаний по производству автомобилей). Кодовая база имеет много общего. У обоих будут пассажиры / водители / карты / маршруты и т. Д. Вы не захотите писать эти объекты для каждой базы кода. Вместо этого в вашем проекте у вас будет цель Uber и цель Lyft. И затем для каждой цели у вас может быть свой список, значок приложения и т. Д. Некоторые классы могут быть только для цели Uber или только цели Lyft. Но в большинстве случаев они были бы для одной и той же цели. (1/2) - person Honey; 28.02.2021
comment
Кроме того, у вас может быть флаг / переменная прекомпилятора, который различается для каждой схемы, и доступ к нему в Xcode, а также компиляция кода одного файла по-разному (2/2) - person Honey; 28.02.2021

цель - это конечный продукт, созданный путем выполнения «сборки» в Xcode. Это может быть приложение, фреймворк, статическая библиотека или пакет модульного тестирования. Как бы то ни было, обычно он соответствует одному элементу в папке «built products».

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

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

person BJ Homer    schedule 17.12.2013
comment
Ваш ответ почти правильный. То, как Apple описывает их, немного отличается. См. мой ответ ниже. Цель - это не конечный продукт. На основе Apple: «Цель содержит инструкции по созданию чего-то вроде приложения или фреймворка». Схема не обязательно представляет собой набор целей. Он просто определяет, как выполнять определенное действие. - person Honey; 07.03.2021

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

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

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

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

person Abhinav Singh    schedule 17.05.2015
comment
Эта диаграмма кажется неправильной. Схема должна быть привязана к определенной цели, я не вижу, где в схеме у вас может быть несколько целей. - person Boon; 09.10.2015
comment
@Boon Нет, небрежно Choosy прав. В редакторе схем щелкните элемент «build» слева. В правой области нажмите «+», и вы можете добавить больше целей в эту схему. Установите желаемые флажки. Исполняемые файлы этих целей затем становятся доступными в других действиях (Выполнить, Профиль и т. Д.) В раскрывающемся списке исполняемых файлов. - person occulus; 29.03.2017
comment
Это хорошо, но в схемах отсутствует часть конфигурации сборки. Я думаю о схеме как о совокупности того, как действия (Run, Test, Profile) соответствуют комбинации целей и конфигураций сборки (отладка, выпуск, qa, prod и т. Д.). - person Steve Moser; 24.05.2018
comment
@Boon Этот ответ немного сбивает с толку. Маловероятно, что вы будете использовать цель, которую можно использовать как для запуска, так и для тестирования схемы. Однако очень вероятно, что у вас есть несколько целей при одном и том же тестовом действии одной схемы. Это означает, что, как правило, лучше иметь разные цели для тестов. то есть один для модульных тестов, другой для тестов производительности, третий для тестов пользовательского интерфейса. Делая это, вы можете иметь несколько целей под действием тестового действия одной схемы или заставить каждую тестовую цель запускаться с помощью уникального тестового действия схемы. Подробнее в полуответе ниже - person Honey; 04.03.2021

Структура Xcode

Workspace  
  -> Project 
    -> Target 
     -> Dependency 
      -> Scheme 
        -> Action
        -> Build Configuration  
          -> Build Configuration File(.xcconfig) 

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

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

Наблюдения:

  • Безопасно работать с разными проектами внутри одного workspace и не ловить
//if you try to open two projects on two Xcode instances
Couldn't load Project.xcodeproj because it is already opened from another project or workspace

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

Также Projects управляет Build Configuration (изменено scheme) и Build Configuration File [О программе]

Вы можете преобразовать существующий Project в Workspace

File -> Save As Workspace...

[Рабочая область против проекта]

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

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

Scheme

Содержит действие (запуск, тест, профиль, анализ, архивирование) + конфигурация (дополнительные аргументы, [конфигурация сборки], диагностика)

Схема может быть опубликована, что помогает вам в CI, Carthage [Пример] ... и находится:

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

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

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

[Словарь]

person yoAlex5    schedule 06.12.2019

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

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


Схема

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

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

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

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

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

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

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

Проект

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

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

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

Цель

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

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

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

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

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

Обобщить:

Цели

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

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

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

Если вы перейдете к этапу сборки вашей цели ›› Источники компиляции, вы увидите каждый файл, который создается для этой цели. Пример:

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

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

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

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

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

Схемы

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

  • строить
  • запустить
  • тестовое задание
  • профиль
  • архив

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

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

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

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

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

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

Подробнее об этом см. Управление схемами


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

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

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

person Honey    schedule 04.03.2021

Мое мнение:

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

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

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

person rommex    schedule 03.12.2020