Я пытаюсь работать над смешанным проектом Swift и ObjectiveC без везения.ModuleName-Swift.h файл не найден в xcode8
Мой проект состоит из 6 целей:
- App
- Ядро
- CoreTest
- Резюме
- WatchKit Extension
- WatchKit App
Я б een может добавить класс Swift, в котором есть одно целевое членство (приложение), и использует код ObjectiveC, проходящий от App-Bridging-Header.h Парадигма «ObjectiveC in Swift» работает как шарм.
Вместо этого я борюсь с парадигмой «Swift into ObjectiveC». В конкретном случае мне нужно использовать новый класс Swift внутри файла ObjectiveC .m, который является членом четырех целей.
То, что я делал до сих пор это:
- Добавить новый Swift файл в проект ядра с указанием четыре членства (App, Core, Конспект, WatchKit Ext)
- XCode Просит создайте -Bridging-Header.h для трех проектов Core, Summary и WatchKit Ext (App-Bridging-Header.h уже существует, поскольку он использовался ранее), и я согласен (не знаю, почему он создает эти файлы внутри в той же папке группы, где я добавляю свой класс Swift, но никогда не думаю)
- Создаю класс Swift, добавив @objc ключ перед тем класс
- Я проверю, если Objective-C Сформирован интерфейса Имя заголовка устанавливается для всех модулей, и да это
- Я иду проверить, если Определяет модуль установлен в нет во всех модулях и установите да в главном проекте, да и это
- записывает импорт для -Swift.h файлов для всех четырех целей
- Внутри моего класса Objective-C Я пытаюсь использовать свой новый Swift класс, судя по всему, кажется, работает (даже автозаполнение)
- Я пытаюсь построить проект, но он не говорил, что файл -Swift.h не найдено
Я следовал так Mix and Match guide of Apple темы и многие в том числе this one, что, кажется, по-видимому, для решения тех же проблем шахты, но она не работает.
Также видели this и this, но не работали.
Попробовали также удалить производные данные, а также очистить весь проект несколько раз, не повезло.
EDIT 1: Подробнее
Это заявление моего Swift класса импорт RealmSwift
@objc class MyClass: Object {}
Это фрагмент использования Быстрой класса внутри ObjectiveC
MyClass *app = [[MyClass alloc] init];
Если я избегу использовать #import ...- Swift.h, сборка не позволяет утверждать, что я использую Und eclared idenfier «MyClass», и это звучит.
Если я использую файлы #import ...- Swift.h, он говорит, что модуль X не может найти модуль Y и так далее.
EDIT 2: Swift имя модуля
Глядя на SWIFT_OBJC_INTERFACE_HEADER_NAME свойство каждой цели я видел, что она построена с использованием этого синтаксиса $ (SWIFT_MODULE_NAME) -Swift.h делать я необходимо изменить SWIFT_MODULE_NAME до MODULE_NAME?
EDIT 3: Импорт
Это набор для импорта заголовков Swift в .m ObjectiveC файл. Я использую имена модулей, указанные в относительных свойствах настроек сборки. Обратите внимание на то, что у человека есть символ _ _, так как у цели WatchKit Extension есть пробел в целевом имени.
#import "ProjectName_App-Swift.h"
#import "ProjectName_Core-Swift.h"
#import "ProjectName_Summary-Swift.h"
#import "ProjectName_WatchKit_Extension-Swift.h"
EDIT 4: Крест видимость -Swift.h файлов
Я судимые следующие действия:
- Добавлен Swift класс только в выходных App
- XCode созданных Заголовок моста
- Введено #import "ProjectName_App-Swift.h" в файле ObjectiveC, используемом только приложением
- Используется класс Swift внутри этого файла
- Он компилируется! И я могу использовать класс Swift
Когда класс Swift определен для нескольких целей, а файл ObjectiveC используется этими несколькими целями, он не работает. Ошибки сборки выглядят следующим образом: Файл Target X -> "ProjectName_TargetY-Swift.h" не найден. Кажется, что цель не может видеть другие цели -Swift.h.
Что я делаю неправильно? Спасибо за вашу помощь
Можете ли вы отредактировать способ импорта сгенерированного заголовка Swift? – Sealos
@Sealos добавил импорт в исходный вопрос – LucioB
Я считаю, что вам не хватает имени проекта в импорте заголовка. Не могли бы вы это проверить? Например: «Project_name_WatchKit_Extension-Swift.h» Кроме того, вы можете проверить, в каком модуле файл находится в SomeClass.classForKeyedUnarchiver в быстром файле и получить его. – Sealos