Могу ли я наследовать определяемые пользователем переменные среды из приложения iOS в приложении WatchKit?

У меня есть проект с несколькими целями. Каждая цель имеет определяемый пользователем параметр сборки с именем $(BUNDLE_ID) для установки идентификатора пакета этой цели — конечно, этот параметр должен быть для каждой цели, а не для всего проекта.

Теперь для приложений WatchKit мне нужно иметь несколько целей WatchKit (по две для каждой цели приложения iOS), и каждая из них использует $(PARENT_BUNDLE_ID) для удобства и возможности совместного использования Info.plist и т. д. между несколькими целями.

В настоящее время $(PARENT_BUNDLE_ID) необходимо установить дважды (один раз в целевом приложении WatchKit и один раз в целевом расширении WatchKit). Что я хотел бы сделать, так это указать его ноль раз для компонентов WatchKit и каким-то образом унаследовать/скопировать его из $(BUNDLE_ID) целевого приложения iOS, в которое он встроен. Возможно ли это, и как я могу настроить его в Xcode?


person jhabbott    schedule 12.05.2015    source источник


Ответы (1)


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

Как только вы определите ключ «Bundle_ID» в настройках проекта, ключ «Bundle_ID» будет отражаться во всех ваших целях, которые связаны с этой настройкой проекта.

Project SettingВы можете получить доступ к этому ключу, используя $(Bundle_ID) в plist для всех ваших целей, как показано на изображении ниже. .

Plist и цель будут отражать значение, определенное пользователем

person deoKasuhal    schedule 14.05.2015
comment
Я думаю, вы пропустили часть вопроса, где я упомянул, что у меня есть несколько целей, и поэтому BUNDLE_ID для них всех нельзя установить в настройках сборки project (которые, как вы говорите, наследуются всеми target) и должен быть установлен в настройках сборки для каждого отдельного target. - person jhabbott; 14.05.2015
comment
Вы можете создать PARENT_BUNDLE_ID и получить свой целевой BUNDLE ID на основе вашего PARENT_BUNDLE_ID, который определен в настройках проекта. - person deoKasuhal; 14.05.2015
comment
У меня есть 8 целей для iOSApps — конечно, все они имеют разные идентификаторы пакетов, так как это разные приложения в App Store. Поэтому параметр должен быть определен в каждой цели, а не в проекте... поэтому я хотел бы, чтобы 8 приложений/расширений WatchKit имели доступ к идентификатору из цели, которую они встроены (т.е. в другую цель, а не в проект). - person jhabbott; 15.05.2015
comment
Вы можете определить 8 ключей в настройках проекта, таких как «Bundle_ID_ProjectA». Эта реализация позволяет вам изменить идентификатор пакета в одном месте и отразить их во всех местах, где вы используете этот идентификатор. - person deoKasuhal; 22.05.2015