MyClass недоступен: не удается найти объявление Swift для этого класса - Release Build Only

Я получаю следующую ошибку:

MyClass недоступен: не удается найти объявление Swift для этого класса

но я получаю его только при сборке релиза в Xcode... Отладка работает нормально.

Кто-нибудь знает, что случилось? Я бегу 6.3

10 ответов

Решение

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

  1. Перейти к файлу проекта.
  2. Перейдите в Настройки сборки для цели приложения, которую вы пытаетесь создать. Обратите внимание на архитектуры, перечисленные в разделе Действительные архитектуры.
  3. Перейти к целевой структуре, которая терпит неудачу.
  4. Убедитесь, что все архитектуры совпадают.

В моем случае мои рамки отсутствовали 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

Я столкнулся с той же проблемой, я решил ее, выполнив следующие шаги

  1. удалить swift framework, т.е. переместить swift framework в корзину

  2. затем очистите текущий проект

  3. построить быструю структуру снова

  4. перетащите фреймворк Swift и поместите в главный каталог приложения.

  5. добавить фреймворк во встроенные фреймворки

  6. ) затем запустите проект

это работает как 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

Другие вопросы по тегам