#ios #xcode #build-settings #xcconfig
#iOS #xcode #build-настройки #xcconfig
Вопрос:
Мы разрабатываем фреймворк с открытым исходным кодом, который можно создавать с различными флагами препроцессора для включения / отключения определенных функций. Крайне важно, чтобы эти функции компилировались только тогда, когда они действительно необходимы (пользователю фреймворка), поскольку они могут иметь последствия для отправки в App Store. Невозможно настроить функции во время выполнения.
Фреймворк поставляется как стандартный фреймворк iOS, то есть он динамически связан и встроен в основное приложение, и поэтому имеет свои собственные настройки сборки, которые отделены от настроек основного приложения.
Чтобы обеспечить вышеупомянутую конфигурацию, проект framework использует xcconfig
файл из своего корневого каталога, который включает в себя привязку к необязательному файлу за пределами каталога framework:
#include? "../FrameWorkConfigurationFlags.xcconfig"
Это позволяет пользователям предоставлять файл конфигурации за пределами каталога фреймворка, что важно, например, если вы используете подмодули git.
Мы также предоставляем образец приложения, которое связывает / встраивает фреймворк (через подпроекты Xcode) и должно предоставлять конфигурацию, но находится в том же каталоге / репозитории, что и фреймворк, и, следовательно, не может использовать перехват.
HostAppDir
|-- FrameWorkConfigurationFlags.xcconfig
`-- Framework
|-- ConfigurationWithHook.xcconfig
`-- SampleApp
`-- SampleConfigurationFlags.xcconfig
Есть творческие идеи, как решить эту проблему? Несколько вещей, которые мы рассмотрели:
-
Добавление второго хука к пути в каталоге / репозитории фреймворка, который не работает, потому что конфигурация образца приложения всегда будет использоваться, если пользователь проверяет фреймворк, включая образец приложения
-
Может быть, есть переменная среды, которую можно использовать для определения исходного каталога хост-приложения? Что-то вроде
#include? "$(SRCROOT)/FrameWorkConfigurationFlags.xcconfig"
, но где$(SRCROOT)
находится не каталог фреймворка, а каталог хост-приложения. Кажется, есть специальная обработка<DEVELOPER_DIR>
, но я также не мог использовать общие переменные среды во включаемых путях. -
Мы могли бы реорганизовать наш образец приложения, чтобы использовать CocoaPods для проверки и встраивания фреймворка и игнорировать локальную копию, которая уже существует, но мы предпочитаем не требовать никаких дополнительных технологий для использования образца приложения
-
Напишите пользовательский этап сценария сборки…