Apple Watch - предварительная сборка, чтобы изменить раскладку customModule

В настоящее время у меня есть проект с 3 различными версиями одного и того же приложения (с другим брендингом и т.д.), который работает отлично. С тех пор я добавил 3 новых целевых показателя Apple Watch (1 для каждой версии приложения), где 2 из них ссылаются на файлы в "главном" объекте Apple Watch.

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

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

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

perl -pi.bak -e 's/customModule=\"(.*?)\">/customModule=\"watchMyTarget_Extension\">/g' ${SRCROOT}/watch/Base.lproj/Interface.storyboard

Я также пришел к выводу, что, возможно, мне захочется изменить reset после того, как приложение было скомпилировано, так как я не хочу, чтобы файл сменился на git, чтобы жаловаться. Именно поэтому вышеупомянутый script создает файл .bak. Поэтому после того, как компиляция выполнена и упакована/запущена на устройстве или что-то еще, я хочу запустить

mv ${SRCROOT}/watch/Base.lproj/Interface.storyboard.bak ${SRCROOT}/watch/Base.lproj/Interface.storyboard

Я попытался разместить сценарии в схеме сборки target (watchTarget, а не appTarget), Build->Pre/Post Actions, которая, похоже, не имеет никакого эффекта. И я попытался поместить его в Run->Pre/Post Actions, который работал в некоторой степени, но казалось, что действие post началось до того, как приложение было перенесено на симулятор и, таким образом, сбой приложения ( "не удалось запустить, смотрите журналы устройств" или что-то в этом роде).

Итак, где же мне нужно поставить эти сценарии, чтобы они запускались в нужное время в процессе сборки?

Ответы

Ответ 1

вам следует использовать команду "Добавить запуск" Script "Фаза" в целевые фазы сборки, поместить ее перед источниками компиляции

Шаги: (от Apple)

  • В редакторе проекта выберите цель, к которой вы хотите добавить выполните фазу сборки Script.
  • Нажмите "Построить фазы" в верхней части редактора проекта.
  • Выберите "Редактор" > "Добавить этап сборки" > "Добавить запуск" Script "Фаза сборки".
  • Откроем раздел "Выполнить" Script в редакторе проекта.
  • Настройте Script в шаблоне Run Script.

Ответ 2

Мое решение состоит в том, чтобы перейти к настройкам сборки для каждой цели расширения часового пояса, установив имя Product module name на одно значение, например xxx_watch_extension strong > . Затем мы должны иметь возможность выбрать этот модуль для пользовательских классов на раскадровке.

Это отлично работает для меня.