Создайте все цели (или схемы) в проекте Xcode

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

Подход №1

Сначала я попытался использовать -alltargets из командной строки, например:

xcodebuild -project MyProject.xcodeproj -alltargets

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

Подход №2

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

xcodebuild -project MyProject.xcodeproj -target FirstAggregateTarget
xcodebuild -project MyProject.xcodeproj -target SecondAggregateTarget
xcodebuild -project MyProject.xcodeproj -target ThirdAggregateTarget
xcodebuild -project MyProject.xcodeproj -target FourthAggregateTarget
xcodebuild -project MyProject.xcodeproj -target FifthAggregateTarget
xcodebuild -project MyProject.xcodeproj -target SixthAggregateTarget

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

Подход №3

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

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

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

Подход № 4

Затем я создал сценарий, который запускаю полностью вне Xcode, например:

#!/bin/bash

# Builds all release products

xcodebuild -project MyProject.xcodeproj -target FirstAggregateTarget

xcodebuild -project MyProject.xcodeproj -target SecondAggregateTarget

xcodebuild -project MyProject.xcodeproj -target ThirdAggregateTarget

xcodebuild -project MyProject.xcodeproj -target FourthAggregateTarget

xcodebuild -project MyProject.xcodeproj -target FifthAggregateTarget

xcodebuild -project MyProject.xcodeproj -target SixthAggregateTarget

Кажется, это единственное, что работает. Но я бы хотел, чтобы это работало из Xcode, желательно как что-то, что я мог бы нажать из командной строки, если бы захотел, потому что тогда мне не пришлось бы выходить из IDE, и он мог сообщить об успехе или неудаче.


person John Bushnell    schedule 27.10.2017    source источник


Ответы (2)


Вы можете сделать фиктивную цель, которая зависит от остальных шести. Используйте целевые зависимости на вкладке «Фазы сборки».

person Lou Franco    schedule 28.10.2017
comment
Мне нравится, как мыслит твой разум. Я чувствую, что это тоже должно работать, но это не для меня. Я получаю сообщение об ошибке Rm: ... : Каталог не пуст. Я считаю, что проблема должна быть связана с агрегатом, имеющим другие агрегаты со сценариями запуска в качестве зависимостей. Что-то не должно работать правильно в этом контексте, потому что я знаю, что такие зависимости, безусловно, работают в других случаях. - person John Bushnell; 02.11.2017

Вдохновленный ответом sansumbrella на другом форуме.

Создайте новую цель в своем проекте (я решил использовать инструмент CLI, так как мой проект основан на CLI).

Согласно sansumbrella, вы можете создать приложение и удалить его plist. Мой подход не опирается на какие-то специальные (или несуществующие) списки.

  1. Дайте вашей цели имя, например ALL, заполните оставшиеся поля и нажмите "Готово".

  2. Нажмите на ссылку Build Phases новой цели и:

    1. Delete the entry in the Compile Sources, which will be main.c if you're doing it how I did.
    2. Откройте Зависимости целей и добавьте все остальные цели, щелкнув + или перетащив цели в это пространство.

Теперь вы можете создавать и очищать весь проект, если эта цель выбрана в качестве активной схемы.

person gone    schedule 17.12.2019