У меня есть проект с несколькими целями и несколькими конфигурациями: скажем, конфигурации Target1/Target2
и Debug/Alpha/Release
.У меня также есть раскадровка с некоторыми настраиваемыми классами: скажем, настраиваемый класс ViewController
, который является начальным ВК в моей раскадровке.Я хочу загрузить контроллер представления из раскадровки в коде, подобном следующему:
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as! ViewController
ViewController является членом обеих целей.Когда я запускаю приведенный выше код на Target1
- все хорошо на обеих конфигурациях.Когда я запускаю его на Target2
, на Debug
все нормально, но на Alpha
происходит сбой с сообщением:
Неизвестный класс ViewController в файле Interface Builder.Не удалось преобразовать значение типа 'UIViewController' (0x10fbc71d0) в 'Target2.ViewController' (0x10b29cb88).
(в случае отсутствия customModule
в XML раскадровки)
или
Неизвестный класс _TtC6Target19ViewController в файле Interface Builder.Не удалось преобразовать значение типа «UIViewController» (0x1083161d0) в «Target2.ViewController» (0x103e6b840).
(в случае, если customModule
в XML раскадровки не соответствует текущей цели)
, что в конечном итоге приводит к сбою приложения.
Похоже, что не удается добавить правильное пространство имен к имени класса при загрузке его из раскадровки.
Инспектор идентичности выглядит следующим образомэто: В XML раскадровки есть:
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
Если я указываю модуль в инспекторе раскадровок или непосредственно в XML для этого контроллера представления (customModule = "Target2"), все работает для обоихконфигурация на Target2
, но явно не на Target1
.
В настройках сборки для обеих целей: Интерфейсный компилятор раскадровки интерфейса - Параметры -> Модуль по умолчанию наследуется от $(PRODUCT_MODULE_NAME)
, который наследуется от $(PRODUCT_NAME:c99extidentifier)
, который в итоге наследует $(TARGET_NAME)
.Если я печатаю TARGET_NAME во время выполнения, когда я на Target2 + Alpha
(что не работает), я вижу правильное имя цели (Target2
в данном случае).Предполагается, что это означает, что имя модуля должно быть правильно добавлено в качестве пространства имен в ViewController при загрузке.
Когда я создал пример проекта с описанным набором конфигурации, все работало, что означает, что что-то не так в моемAlpha
-конфигурация в реальном проекте, но это почти точная копия Debug
(без учета всех путей), которая работает.
После двух дней тыкания и изменения всех этих настроек я выхожуидей, так что если у кого-то есть, пожалуйста, заполните бесплатно, чтобы поделиться.Я буду более ценным.