Перейдите к заголовку Objective C, не созданному в Xcode 6

235

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

После добавления исходного файла Swift в проект у меня не возникает проблем с получением "Bridging Header", то есть Objective-C для Swift.

Но файл заголовка *-Swift.h который должен предоставлять классы Swift с пометкой @objc или подклассы классов ObjC, нигде не найден :-(

Я не вижу каких-либо конкретных инструкций о том, как выполнить использование моего нового подкласса, написанного на Swift, в моем основном коде приложения (который все еще является Objective-C).

Приложение, которым я являюсь ведущим разработчиком, имеет довольно большую кодовую базу (70 000 строк), поэтому о его переходе за один раз не может быть и речи.

  • 5
    Да, это так. Это действительно вопрос, где в XCode IDE нужно что-то сделать, чтобы создать этот Swift-> ObjC с заголовком, поскольку это не происходит «по умолчанию» при добавлении кода Swift в существующий проект ObjC.
  • 0
    Нет, это на самом деле не имеет ничего общего с xcode IDE xcode IDE тег xcode IDE зарезервирован для таких вопросов, как "Why does xcode just crash randomly? blah blah blah" не для проблем, которые возникают у xcode IDE только потому, что вы используете это не значит, что это проблема. Я мог бы использовать другую IDE, которая поддерживает развитие target-c / swift, и я все еще буду страдать от той же проблемы. Подумайте об этом так, если считаете, что вам следует использовать тег xcode - НЕ
Показать ещё 17 комментариев
Теги:
xcode

31 ответ

158

Теперь он работает.

  • Проект должен иметь имя модуля продукта, в котором не содержит пробелы.
  • Определяет, что в настройках сборки в разделе "Упаковка" должен быть установлен параметр Да.

Наконец работает. Спасибо всем за помощь: -)

  • 2
    Вы должны подать отчет об ошибке о пробелах. Xcode должен жаловаться, если вы пытаетесь использовать пробелы в имени модуля Swift. bugreport.apple.com
  • 0
    Как проверить, установлен ли Define Module?
Показать ещё 22 комментария
116

У меня была аналогичная проблема, и я обнаружил, что вы можете добавить

#import "ProductModuleName-Swift.h"

для obj-c.m файлов, а не файлов .h для заголовка зонтика, который будет найден

  • 2
    Это правильно, и ... что если мне нужно использовать класс Swift в заголовке objc? Я попытался с предварительным объявлением, это также не работает.
  • 2
    Ой, извините, форвард декларация работает. Я забыл добавить точку с запятой: P
Показать ещё 5 комментариев
55

Я обнаружил, что мне пришлось исправить все ошибки сборки до того, как он сгенерирует файл.

Проблема для меня заключалась в том, что это была проблема с курицей/яйцом, потому что я не видел никаких ошибок сборки, пока я фактически не прокомментировал инструкцию #import:

//#import "ProductModuleName-Swift.h"

который обнаружил кучу других ошибок в моем коде Swift.

Как только я исправил эти новые ошибки и получил исходное здание успешно, я раскомментировал #import и бинго! Заголовок был создан и импортирован правильно:)

  • 0
    Спасибо, это именно то, что удерживало меня. После исправления ошибок быстрой сборки мне было хорошо идти. (Версия XCode 6.1.1)
  • 6
    Это отличный момент и хорошая причина, чтобы включить настройку «продолжить сборку после ошибок» в Xcode.
Показать ещё 3 комментария
41

Если вы похожи на меня, вы, вероятно, неправильно назвали заголовок. После того, как я немного потрепал голову, я искал файл в DerivedData и, конечно же, там. По моей настройке (я полагаю, используя стандартную папку с данными):

cd ~/Library/Developer/Xcode/DerivedData
find * -iname '*Swift.h'

Найдет. Если ничего в этой папке не соответствует, то Xcode не генерирует его.

Я использую Xcode Version 6.2 (6C86e)

  • 0
    Это сделало это для меня. Я думал, что автозаполнение подхватит это, что я только предполагал, что это не было там. Увидев в каталоге все прояснилось.
  • 0
    Иногда видение - это вера. Я не мог заставить все работать до тех пор, пока не следовал рекомендованному ответу, а затем использовал эти шаги, чтобы найти сгенерированный заголовок, который, к моему удивлению, был -Swift.h после -Swift.h а не имени моего фактического файла Swift. Спасибо!
Показать ещё 1 комментарий
40

Если у вашего имени модуля проекта есть пробелы в нем, вы должны заменить пробелы символом подчеркивания.

Например, если ваше имя проекта "Мой проект", вы должны использовать:

#import "My_Project-Swift.h"

  • 10
    Если в имени модуля вашего проекта есть дефисы, их также следует заменить подчеркиванием. Поэтому, если ваш проект называется «Мой проект», используйте #import «My_Project.h»
  • 5
    Кроме того, если имя модуля вашего проекта начинается с цифры, его также следует заменить подчеркиванием. «Первый проект» будет «_st_Project-Swift.h»
32

* Важно только: *

использовать указанное целевое имя "Product Module Name", за которым следует -Swift.h

#import <Product Module Name>-Swift.h

// in each ObjectiveC .m file having to use swift classes
// no matter in which swift files these classes sit.

Независимо от того, установлен ли параметр "Определяет модуль" на "Да" или "Нет" или "Проект" Название модуля продукта "не установлен.

Напоминание: классы Swift должны извлекаться из NSObject или быть помечены атрибутом @objc, чтобы быть объектом ObjectiveC/Foundation || Cocoa...

  • 1
    Это правда: нет необходимости "Определять модуль" в проекте или в цели
  • 0
    Вывод из NSObject был моей проблемой, спасибо!
23

Я хотел добавить еще одну причину, по которой вы можете найти проблему с этим - я создавал фреймворк, который смешивал Swift и Objective-C. Я не смог импортировать классы Swift вне рамки - я проверил файл -Swift.h и был сгенерирован, но был пуст.

Проблема оказалась очень-очень простой - я не объявлял ни одного из моих классов Swift открытым! Как только я добавил ключевое слово public в классы, я смог использовать их из классов внутри и вне рамки.

Также обратите внимание, что внутри фреймворка (внутри .m файлов только как упоминается другой ответ) мне пришлось импортировать файл -Swift.h как:

#import <FrameworkName/FrameworkName-Swift.h>
  • 2
    В Framework я также отмечаю, что для использования классов Swift они должны быть унаследованы от NSObject (даже @objc не поможет), и все методы / свойства должны быть открытыми.
  • 3
    По крайней мере, в текущем предварительном выпуске XCode 7, пока вы не наследуете от NSObject, они не будут доступны в сгенерированном быстром заголовке.
Показать ещё 4 комментария
14

У меня была та же проблема. Похоже, вам нужно настроить параметры (Определяет модуль и имя модуля продукта) до, вы добавляете свой первый файл Swift.

Если вы сделаете это, файл "* -Swift.h" не будет создан для этого проекта, даже если вы добавите дополнительные файлы Swift или удалите файл Swift и создадите новый.

  • 0
    Я не уверен, что это правда. Я не решил включить 'Defines Module' до того, как создал много быстрых файлов, и я смог получить -Swift.h очень хорошо.
  • 0
    Мне действительно грустно сообщать, что это именно та проблема, которая у меня была :( Мне пришлось удалить свой .swift и заново добавить его, и тогда все заработало.
Показать ещё 7 комментариев
12

Вот еще одна вариация модуляName-Swift.h не создается.

Я решил включить IOS Charts в мой проект, но не хотел смешивать источники в том же каталоге, поэтому я поместил папку Charts Project рядом с моим кодом папке проекта. Я перетащил проект Charts в свою панель Project Navigator и включил фреймворк в список целевых Embedded Binaries в общих настройках проекта и установил переключатель Встроенный контент содержит Swift Code. на вкладке Строить настройки в разделе Параметры сборки.

Мой файл projectName-Swift.h проекта никогда не будет генерировать независимо от того, какие другие переключатели или настройки предлагаются здесь. Наконец, используя метод Lou Z для поиска файлов -Swift.h, я увидел, что файл Charts-Swift.h был сгенерирован глубоко в моем каталоге xcode Build в Charts.framework/Headers/

Решение использовать ios-charts Daniel Gindi для пакета Swift без включения кода в исходный каталог проекта заключалось в том, чтобы добавить:

#import "Charts/Charts-Swift.h"

Модулям, отображающим мои данные проекта.

  • 0
    Можно ли изменить / настроить подсказку в диаграммах IOS? если да, то можете ли вы привести один пример?
12

Имя файла всегда предшествует имени Target. Он называется названием продукта, но фактически это имя цели. Поэтому, если вы хотите, чтобы он создавал новую цель, можно было ожидать ожидать that_target-Swift.h файла.

Один из способов справиться с этим -

  • Добавить препроцессор для каждой вашей цели, которая является именем самой вашей цели (без пробелов). Ex. MY_TARGET=1. Добавьте это в Настройки проекта → Настройки сборки → Макросы препроцессора для каждой из ваших целей.
  • Если вы используете файл PCH,

Добавьте эти строки в файл PCH

#if MY_TARGET==1
#include "My_Target-Swift.h"
#elif THAT_TARGET==1
#include "That_Target-Swift.h" 
#endif

Преимущество использования файла PCH заключается в том, что вам не нужно включать заголовки везде.

  1. Если вы не используете файл PCH, просто добавьте эти же строки в один заголовок и включите этот заголовок везде, где вам нужно использовать быстрые классы.

Это должно работать нормально.

  • 0
    Мне действительно нравится использовать это решение вместо импорта заголовка прямо в ваш источник. У меня сложная структура проекта, в которой один и тот же исходный код используется несколькими целями / проектами. Это позволяет избежать добавления грязного оператора #if #else по всему моему коду. Спасибо за ответ!
  • 0
    Это спасло мой день. Я поместил 5 строк кода в файл «Something-Swift-Headers.h» (с include в него). Затем я импортирую этот новый файл оттуда, где он мне нужен. Я предпочитаю не помещать это в PCH или любой файл .h, чтобы избежать циклических зависимостей и использовать вспомогательный заголовок в файлах .m.
Показать ещё 1 комментарий
11

Позвольте мне поделиться своим опытом, пытаясь использовать Swift в старом проекте objc. Мне не нужно было устанавливать Defines module в YES.

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

Изображение 1730

Это приводит к созданию файла MyApp-Swift.h, но без каких-либо следов моих классов Swift.

В документации Apple говорится, что при добавлении первого быстрого файла вам будет предложено создать заголовок моста. Ну, я не был. Я вручную добавил файл MyApp-Bridging-header.h и указал на него в поле "Objective-C Bridging Header". Это заставило мой файл MyApp-Swift.h заполнить мои классы Swift.

Документы: Импорт Swift в Objective-C

  • 0
    да, по какой-то причине мой файл ObjC Swift.h был сгенерирован с заголовками классов Swift только после того, как я добавил пустой заголовочный файл моста в проект!
10

Если XCode фактически генерирует ваш заголовок -Swift.h(глубоко внутри DerivedData), но он не относится к вашим классам Swift, убедитесь, что вы также определили заголовок моста. То, как я читал документы, подразумевал, что мне нужно только для вызова Objective-C из Swift, но, похоже, необходимо также вызвать Swift из Objective-C.

См. мой ответ: https://stackoverflow.com/questions/24086595/swift-to-objective-c-header-does-not-contain-swift-classes

РЕДАКТИРОВАТЬ: Это из-за модификаторов публичного и внутреннего доступа, как я в конечном итоге нашел в документах Apple: -

По умолчанию сгенерированный заголовок содержит интерфейсы для Swift объявления, отмеченные общедоступным модификатором. Он также содержит те помечены внутренним модификатором, если ваша целевая программа приложения имеет Objective-C заголовок заголовка.

  • 0
    Да, это действительно помогло. Я этого не знал. Я думал, что это просто необходимо для варианта использования Obj-C от Swift.
  • 0
    Рад был помочь. Я отредактировал ответ, потому что с тех пор я выяснил причину такого поведения.
7

Покоряйте, что много людей здесь, но добавив увлекательный скриншот. Быстрые и Obj-C-коды, безусловно, могут жить вместе. Это не все или ни одна игра.

Для доступа к файлам Swift в вашем Objective-C все, что вам нужно сделать, это добавить этот вызов в ваш файл Obj-C (в файле .m/implementation):

#import "{product_module_name}-Swift.h"

(Где {product_module_name} представляет имя модуля продукта вашего проекта). Вместо того, чтобы пытаться угадать имя вашего модуля продукта или определить угловые случаи с пробелами и специальными символами, просто перейдите на вкладку настроек сборки в проекте и введите "имя модуля продукта" - инспектор раскроет вам. Мой был тем, чего я не ожидал. Проверьте этот снимок экрана, если вы смущены.

Изображение 1731

И чтобы получить код Obj-c, работающий в Swift, вам просто нужно добавить заголовочный файл моста и импортировать соответствующие заголовки Obj-C.

  • 1
    Разве это не #import ?
  • 0
    Хороший звонок. Я обновил это.
Показать ещё 2 комментария
5

Хорошо, вот все, что вам действительно нужно!

1. Удалите все добавленные вами файлы swift и скомпилируйте код без ошибок.

----------

Изображение 1732

----------

2. Перейдите к настройкам сборки "Проекты" и задайте имя модуля продукта. Проект должен иметь имя модуля продукта, которое не содержит пробелов.

----------

Изображение 1733

----------

3.Defines Module должен быть установлен в Yes в настройках сборки, в разделе Packaging, в вашем проекте, а не в цель!

----------

Изображение 1734

----------

4. Теперь создайте файл swift или контроллер представления, в file-> new file->

----------

Изображение 1735

----------

Он попросит создать bridging-header, позволить ему сделать таковой. Если вы отклонили его один раз, вам придется вручную добавить -Bridging-Header.h

5.Добавьте @objc в контроллер, чтобы сообщить компилятору, что существует некоторый файл swift, который необходимо открыть для ObjectiveC.

----------

Изображение 1736

----------

6.Скомпилируйте проект и импортируйте #import "-Swift.h" в любой из контроллеров targetC, и он будет работать! Вы можете щелкнуть по нему, чтобы увидеть актуальный файл!

----------

Изображение 1737

----------

Надеюсь это поможет!

  • 0
    >> Вы можете Ctrl-клик по нему, чтобы увидеть актуальный файл! Это здорово
4

В этом ответе рассматривается прецедент, в котором у вас может быть код Objective-C, который вызывает классы Swift, и затем вы начинаете получать эту ошибку.

Как исправить проблему

Следующие шаги в конечном итоге разрешили все проблемы для меня. Я читал выше, когда кто-то упоминал "курицу и яйцо", и именно эта концепция привела меня к этой процедуре. Этот явный процесс показывает, что нужно удалить любой код Objective-C, ссылающийся на классы Swift, до тех пор, пока не будет сгенерирован заголовок.

  • Комментируйте инструкцию #import "ProductModuleName-Swift.h" в ваш файл реализации Objective-C
  • Прокомментируйте любые ссылки в файле реализации Objective-C для Swift Classes
  • Очистка и сборка
  • Разрешить все ошибки/предупреждения
  • Удалить комментарий в операторе #import "ProductModuleName-Swift.h"
  • Очистить и построить (успешно или исправить любые оставшиеся ошибки, убедитесь, что вы не ссылаетесь на какие-либо классы Swift в Objective-C в этот момент. Если так временно прокомментировать это)
  • Убедитесь, что "ProductModuleName-Swift.h" генерируется Cmd-Clicking на имя класса оператора #import "ProductModuleName-Swift.h"
  • Удалить комментарий к коду, ссылающемуся на классы Swift в файле реализации Objective-C.
  • Очистить и построить как обычно ( "ProductModuleName-Swift.h" должно быть и ваш Objective-C код, ссылающийся на Swift Classes, может быть используется как обычно)

Nota Bene:. Ответы об изменении пробелов на подчеркивание и значение параметра "Да", как указано выше, по-прежнему применяются при выполнении этого процесса, также как и правила, указанные в Документация Apple.

Преодоление пути заголовка

В одной ошибке файл ProductModuleName-Bridging-Header.h не был найден во время процесса сборки. Этот факт породил ошибку

<unknown> : 0: ошибка: заголовок '/Users/Shared/Working/abc/abc-Bridging-Header.h' не существует

Более тщательная проверка ошибки указала, что файл никогда не будет существовать в указанном месте, потому что он фактически находился на (неправильном пути)

'/Users/Shared/Работа/ABC/ABC/ABC-Bridging-header.h. быстрый поиск настроек сборки цели/проектов, чтобы выполнить коррекцию вручную, и файл abc-Swift.h был снова сгенерирован автоматически.

Изображение 1738

  • 0
    Что если ваш проект настолько велик, что комментировать все ссылки на быстрый код в цели c нецелесообразно?
4

Самое главное, что Этот файл невидим!!! По крайней мере, он находится в Xcode6 beta5. В вашем рабочем пространстве не будет такого файла с именем "YourModule-Swift.h". Просто убедитесь, что у вас есть имя модуля и определяет модуль, установленный в yes, и используйте его в своем классе Objective-C.

3

Вам нужно импортировать заголовок в классах Objective-C, который:

#import "ProductModuleName-Swift.h"

Он автоматически генерируется, в ссылке говорится: "Любые файлы Swift в вашей цели будут видны в файлах Objective-C.m, содержащих этот оператор импорта".

  • 24
    Но когда я это делаю, я получаю ошибку сборки, AppName-Swift.h не существует. Принимая во внимание, что AppName-Bridging-Header.h существует.
  • 5
    @DavidKristensen: вы получили решение? Как я застрял с той же проблемой
2

Проект должен иметь имя модуля, которое не включает пробелы. Для параметра "Модуль" должно быть установлено значение "Да" в настройках сборки, в разделе "Упаковка". прокомментировал оператор #import:

Если у вас возникла ошибка при импорте "ProductModuleName-Swift.h", то

//# import "ProductModuleName-Swift.h"

который обнаружил кучу других ошибок в моем коде Swift.

Как только я исправил эти новые ошибки и получил исходное здание успешно, я раскомментировал #import и bingo! Заголовок был создан и импортирован правильно:)

  • 0
    Моя проблема заключалась в том, что у меня тоже были ошибки в моем коде Swift, но я не знал об этом, пока я не раскомментировал файл -Swift.h. Спасибо!
2

Просто голова для всех, кто использовал "." в там название проекта. Xcode заменит "." с подчеркиванием "_" для версии Swift для файла заголовка. Как ни странно, создаваемый Bridging-Header.h не заменяет периоды символами подчеркивания.

Например, проект с именем My.Project будет иметь следующие имена файлов заголовков мостов.

Bridging-Header.h(Autogenerated)

My.Project-мост-header.h

Swift.h

My_Project.h

Я надеюсь, что это поможет любому, кто использовал период и застрял, как и я. Этот файл можно найти в следующем месте.

Macintosh HD/Пользователи/пользователь/Library/Разработчик/Xcode/DerivedData/My.Project-fntdulwpbhbbzdbyrkhanemcrfil/Build/Intermediates/My.Project.build/Debug-iphonesimulator/My.Project.build/DerivedSources

Позаботьтесь,

Джон

2

Фактический файл в проекте не создан ([ProductModuleName] -Swift.h). Cmd + Щелкните по импорту или генерирует его "на лету" (и в памяти), чтобы вы могли видеть, как выполняется ссылка, или открывает файл где-нибудь в каком-то кеше Xcode, но это не в директории проекта.

Вам нужно установить Определить модуль project prop (в целевых настройках сборки) на Да, и если ваше имя модуля имеет пробелы или тире - используйте _ во всех импортах [ProductModuleName] -Swift.h.

Вы можете импортировать его во все файлы .h и .m, где вы используете быстрые типы, или можете импортировать его в .pch.

Итак, если мой модуль (проект) назван "Test Project", я бы импортировал его так, в .pch файле моего проекта (только там):

#import "Test_Project-Swift.h"
1

В моем случае мне пришлось установить цель развертывания как минимум на "OS X 10.9", а заголовок -Swift.h был автоматически сгенерирован. Имейте в виду, что при изменении целевой версии развертывания вы можете получить много предупреждений об устаревании, особенно если у вас есть старая и очень большая база кода Objective C. В нашем случае мы также много работали над XIB файлами и рассматривали классы.

  • 2
    Для других - посмотрите в Build Settings для вашей цели, получите точное имя "MyProject-Swift.h" - это то, что вам нужно включить как "#include" MyProject-Swift.h "в соответствующие файлы Objc. Кстати, это Ответ действительно помог мне - работать над преобразованием некоторого старого открытого ObjectiveC.
1

Мне было трудно определить имя моего модуля / objective-c импорта быстрых заголовков. Я также прочитал много статей.

Но окончательный ответ для имени вашего проекта со всеми его включенными специальными символами (будь то "." или числовым или пробелом) - вы можете найти текст, который будет работать для вас в " имени модуля продукта" под целевыми настройками сборки.

Например, мое целевое имя начиналось с числового - "1mg", а поле, указанное выше, показало "_mg" в качестве моего имени модуля.

поэтому я использовал #import "_mg-Swift.h", и он сработал.

Изображение 1739

  • 0
    Если вы можете отредактировать ссылку на скриншот, я могу отредактировать ваш ответ, чтобы отобразить его для вас.
1

Я нашел это решение

  • Создать SwiftBridge.h
  • положить #import "ProductModuleName-Swift.h"
  • Сделать этот файл .h общедоступным (важно) Выберите файл → В Показать файл Inspector (правая панель) → Сделать общедоступным

Теперь вы можете

#import "SwiftBridge.h"

вместо ProductModuleName-Swift.h

Это обходное решение для следующей версии Xcode. Я думаю, что эта проблема будет решена. Удачи.

  • 0
    Не работает Только что попробовал. В строке #import “ProductModuleName-Swift.h” просто появляется ошибка в файле SwiftBridge.h вместо исходного файла кода Objective-C.
1

Я нашел трюк, который всегда работает на меня.

  • Создайте #import "ProductModuleName-Swift.h" в файле appDelegate.h и в файле ProductName-Prefix.pch. Если у вас его нет в xcode 6, вы можете создать его таким образом Почему в Xcode 6 автоматически не создается ProjectName-Prefix.pch?
  • Command + shift + k, чтобы очистить ваш код, если вы получили сообщение об ошибке "ProductModuleName-Swift.h", удалите его из файла appDelegate.h.
  • Очистите свой код еще раз. Теперь все будет работать как шарм
  • Если вы снова получите сообщение об ошибке "ProductModuleName-Swift.h", теперь снова создайте файл appDelegate.h и снова очистите свой код.

Сделайте эту работу (удалите и создайте "ProductModuleName-Swift.h" из файла appDelegate.h и очистите свой код) каждый раз, когда вы получаете эту ошибку, чтобы ее отключить.

0

Файл генерировался, но XCode не смог его найти (я использовал ответ Лу Зелла, чтобы доказать, что он генерируется).

Это было мое исправление (Xcode 9.2) для смешанной среды ObjC/Swift:

  1. Найдите ожидаемый сгенерированный файл в DerivedData, выполнив поиск в finder (TargetName-Swift.h)
  2. Перетащите его в свой проект в XCode и UNCHECK копировать файлы.
  3. Нажмите на файл в XCode и откройте инспектор файлов (первая вкладка на правой панели).
  4. Изменить местоположение с относительного на группу на относительное для сборки продуктов

Первые два шага должны позволять вам просто создавать и использовать свой проект, но последние два позволяют ему работать на других компьютерах (т.е. он все еще работает при совместной работе над командным проектом).

0

Иногда вам просто нужно отменить, а затем снова установить целевое членство в файле obj-c.m.

0

Если вы используете что-то вроде Cocoapods (и разрабатываете рабочую область, а не проект), попробуйте открыть проект и создать его, прежде чем открывать рабочее пространство и здание. YMMV.

0

У меня была схожая проблема, но мой проект компилировался раньше и внезапно получил ошибку после изменения кода нескольких файлов. Мне потребовалось время, чтобы понять, почему я получаю ошибку "Файл не найден" для файла myproject-swift.h. Изменения кода, которые я сделал, имели некоторые ошибки. Xcode не указывал на то, что эти ошибки все время показывают "Ошибка файла не найдена". Затем получил копию кода предыдущей версии, и я сравнил с новым кодом и объединил файл один за другим. После того, как каждый файл слияния выполнил проект, чтобы найти ошибку. Итак, нижняя строка - если у вас есть ошибка в вашем коде, Xcode может просто отобразить "файл не найденной ошибки" для файла myproject-swift.h. Скорее всего, у вас есть ошибка компиляции в вашем проекте. Очистите эту ошибку, и она будет работать.

0

Мне пришлось удалить SwOS-код WatchOS2 из моего проекта Objective C. И только после этого XCode предложил сгенерировать -Swift.h

0

Это может быть очевидным моментом (может быть, слишком очевидным), но у вас должен быть хотя бы один быстрый файл в проекте для генерируемого заголовка. Если вы пишете шаблон шаблона или код конфигурации с намерением записать быстро, импорт не будет работать.

0

Если вы смогли создать проект раньше, без проблем, связанных с ошибкой "ProductModuleName-Swift.h" not found, и теперь вы снова получаете эти неприятные ошибки, причина может быть в ваших недавних изменениях.

Для меня это было (случайно) неправильным кодированием файла .swift. Возврат изменений и возврат назад вручную, выполняет задание.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню