Изменение параметров сборки фреймворка из содержащего приложения iOS

#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 для проверки и встраивания фреймворка и игнорировать локальную копию, которая уже существует, но мы предпочитаем не требовать никаких дополнительных технологий для использования образца приложения

  • Напишите пользовательский этап сценария сборки…