MyClass недоступен: не удается найти объявление Swift для этого класса - Release Build Only
Я получаю следующую ошибку:
MyClass недоступен: не удается найти объявление Swift для этого класса
но я получаю его только при сборке релиза в Xcode... Отладка работает нормально.
Кто-нибудь знает, что случилось? Я бегу 6.3
10 ответов
В моем случае это было из-за того, что в моем фреймворке отсутствовала одна из допустимых архитектур, перечисленных в цели моего приложения. Все, что мне нужно было сделать, это следующее:
- Перейти к файлу проекта.
- Перейдите в Настройки сборки для цели приложения, которую вы пытаетесь создать. Обратите внимание на архитектуры, перечисленные в разделе Действительные архитектуры.
- Перейти к целевой структуре, которая терпит неудачу.
- Убедитесь, что все архитектуры совпадают.
В моем случае мои рамки отсутствовали arm64
,
Если MyClass находится внутри динамической структуры (Cocoa Touch Framework), вполне вероятно, что вы используете сборку с неверной архитектурой. Чтобы проверить, просмотрите ваш MyClass.framework в поиске, и проверьте Modules/AirServiceKit.swiftmodule
, Там должно быть что-то вроде x86_64.swiftmodule
или же arm64.swiftmodule
Если вы используете симулятор, то должен быть x86 или arm, если вы создаете устройство.
В случае, если кто-то еще столкнется с этой проблемой:
У меня была точно такая же ошибка, и оказалось, что я построил свой фреймворк для конкретного эмулятора. Я изменил device
(в левом верхнем углу), чтобы Generic iOS device
и сделал clean
а также build
тогда я использовал сгенерированный .framework
файл. Все работало очень хорошо после использования этого сгенерированного .framework
файл.
Проверьте значение флага, установленное для Build Active Architecture только в настройках Build для Debug и Release
Я столкнулся с той же проблемой, я решил ее, выполнив следующие шаги
удалить swift framework, т.е. переместить swift framework в корзину
затем очистите текущий проект
построить быструю структуру снова
перетащите фреймворк Swift и поместите в главный каталог приложения.
добавить фреймворк во встроенные фреймворки
) затем запустите проект
это работает как charm.your быстрые классы фреймворка распознаются в приложении.
У меня другой ответ, и я уверен, что это поможет многим.
Ваши проекты приложений ссылаются на более раннюю версию iOS (например, iOS 9.0), а ваши фреймворки - на более новую версию (например, iOS 11.3)
Просто измените версию фреймворка на iOS 9.0,
Clean,
(по желанию запустить pod install
если ваша инфраструктура использует зависимости pods), создайте и добавьте файл инфраструктуры в проект приложения, добавьте в связанные двоичные файлы и все готово =]
Одна из причин, по которой это происходит, заключается в том, что iOS 11 поддерживает только 64-битную версию (arm64), поэтому фреймворк получает только эту архитектуру, но вашему приложению также нужны 32 архитектуры, которые отсутствуют.
Я полагаю, вы говорите о базовом классе
Давайте просто пропустим технические вещи, которые происходят в фоновом режиме... (Почти все, что касается этого, было объяснено:-))
Эта ошибка просто из-за несовместимости платформы для сборки, на которой вы пытаетесь ее запустить.
Исправлено: -
1) Удалить рамки из вашего проекта
2) Тогда: -
Если вы используете симулятор, перейдите в проект фреймворка и создайте проект фреймворка, выбрав симулятор из списка симуляторов iOS (любое устройство из списка симуляторов), а затем импортируйте фреймворк в хост-проект.
Если вы используете физическое устройство, перейдите в проект фреймворка и создайте проект фреймворка, выбрав "Общее устройство iOS"/ Физическое устройство (которое подключено), а затем импортируйте фреймворк в хост-проект.
Теперь должно работать нормально. Надеюсь это поможет!
Вы пытались взглянуть на свою схему в вашей платформе и посмотреть, не указывает ли она на "Выпуск" в разделе "Product->Scheme->Run->Build configuration"?
Ни один из этих ответов не решил мою конкретную проблему. Проблема для меня заключалась в том, что в какой-то момент (не могу вспомнить, почему) я добавил файл карты настраиваемого модуля, содержащий такой код, как:
framework module Foo {
umbrella header "Foo.h"
module * { export * }
export *
}
По какой-то причине это противоречило классу Swift. Удаление файла modulemap из целевой платформы устранило ошибку
Для пользовательских фреймворков подов, использующих objc + swift:
Создайте новый файл заголовка, например: {FrameworkName}.h, и добавьте:
#import "{FrameworkName}-umbrella.h"
а затем выполните установку модуля ... или добавьте этот файл в {FrameworkName} -umbrella.h следующим образом: #import {FrameworkName}.h