Подтвердить что ты не робот

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?

4b9b3361

Ответ 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