Xcode 8 со смешанным Swift и Objective-c сгенерированным проектом заголовком "ModuleName-Swift.h" не найден
У меня есть проект со смешанными Swift и Objective-C в Xcode 8, который использует сгенерированный заголовочный файл ModuleName-Swift.h для импорта swift в классы Objective-C, но препроцессор не может найти сгенерированный заголовок файл и выдает ошибку при импорте.
"Проблема с лексикой или препроцессором:" ModuleName-Swift.h файл не найден "
![введите описание изображения здесь]()
Проект компилируется просто отлично, но препроцессор выдает ошибки для не найденного заголовка, и для любых классов Swift, вызванных внутри класса, нет подсветки синтаксиса или завершения кода. Это борьба с классами Swift в Objective-C, которые не распознаются Xcode 8, но все же компилируются просто отлично.
Любые идеи о том, как успокоить препроцессор в Xcode 8?
Ответы
Ответ 1
У меня была точно такая же проблема. Нашел решение после добавления нового файла, нацеленного только на одну цель (по ошибке), и заметил, что у него нет проблем с чтением классов Swift. Итак, если у вас несколько целей, и, поскольку вам не нужно было создавать и запускать миграцию, предложите сделать это.
Ответ 2
Возьмите эту проблему, когда у нас есть несколько целей. Если переменная заголовка Objective-c сгенерированного интерфейса в компиляторе Swift вновь созданных целей отличается от исходного целевого значения. Измените его на одно и то же значение с исходной целью. См. Следующее:
change, newtargetname-Swift.h - originalTargetname-Swift.h для новой цели
![enter image description here]()
Ответ 3
Чтобы исправить эту проблему Xcode 9.2, после долгих исследований я узнал, что мое имя Objective-c Generated Interface Header Name названо в честь имени продукта productname-Swift.h " ![введите описание изображения здесь]()
Ответ 4
Вам нужно добавить это в свои настройки сборки.
При переходе на Xcode 8 может возникнуть проблема, в которой у вас будет unspecified
в файле сборки Swift.
Это, если из killerz
Перейдите к Настройки сборки → Objective-C Имя заголовка сгенерированного интерфейса и установите значение для YourModule-Swift.h(обычно это уже установлено, это имя файла, которое необходимо импортировать в .m файл #import "YourModule-Swift.h"
Ответ 5
Если
- нормальные цели вашего продукта работают нормально, но
- вы получаете ошибку при запуске своих тестовых целей...
обратите внимание, что каждая целевая задача использует (и должна использовать) другое имя файла для имени заголовка Objective-C сгенерированного интерфейса.
Это означает, что вы не можете импортировать сгенерированный заголовочный файл в ваши файлы Objective-C .h
, потому что они не будут найдены в тестовой цели:
![снимок экрана с ошибкой импорта при использовании .h файла]()
Вместо этого вы должны переместить эти операторы #import
в свои Objective-C .m
(файлы реализации), где они будут успешно созданы.
Если вам нужно обратиться к классам Swift в файле .h
, использовать директиву @class
, например:
//
// ViewController.h
// import-example
//
#import <UIKit/UIKit.h>
@class SomeSwiftClass;
@interface ViewController : UIViewController
- (NSString *) titleFromGenerator:(SomeSwiftClass *)generator;
@end