Получение ошибки «Нет такого модуля» с использованием Xcode, но фреймворк есть

247

Я сейчас кодирую в Swift, и у меня есть ошибка:

Нет такого модуля Social

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

Фреймворки находятся в Objective-C, поэтому я написал для него заголовок Bridge.

Пожалуйста, как я могу заставить Xcode распознать фреймворк?

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

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

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

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

  • 15
    Не быть слишком мистером. очевидно, но вы пробовали полную очистку и сборку?
  • 0
    Это была моя первая реакция :)
Показать ещё 11 комментариев
Теги:
xcode

55 ответов

234
Лучший ответ

Я не уверен, почему это происходит, но один из способов решить вашу проблему - войти в ваши настройки сборки и определить Пути поиска в каркасе в папку, в которой содержит соответствующие рамки. Если рамки размещены в каталоге проекта, просто установите путь поиска фрейма к $(SRCROOT) и установите его на рекурсивный.

  • 3
    Благодарю. Я должен был сделать это в настройках сборки моего проекта, а не в настройках сборки цели
  • 6
    Уловка для меня заключалась в том, чтобы найти путь к фреймворку для использования в путях поиска фреймворка. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework хорошо работает для меня. Смотрите также stackoverflow.com/questions/32816507/…
Показать ещё 16 комментариев
375

В случае, если в пятницу днем ​​или в любое время после 1 часа ночи:

Открытие xcodeproj вместо xcworkspace приведет к ошибке, подобной этой...

  • 12
    Заставил меня посмеяться Я заметил это и в xcworkspace.
  • 1
    Или когда вы настолько лишены сна, что каждый бодрствующий момент вашей жизни ощущается как после 1 часа ночи
Показать ещё 22 комментария
31

Я не совсем уверен, почему Martin R ответ в комментариях к вопросу так игнорируется:

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

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

  • 1
    Это именно то, что мне нужно было построить. Спасибо!
  • 1
    Спасибо Michael K за указание на ответ Мартина Р. - он сработал для меня и помог мне понять, как работают файлы-мосты!
Показать ещё 2 комментария
24

У меня была такая же проблема с использованием Cocoapods и Swift. Я не заметил следующие строки в подпикселе:

# Uncomment this line if you're using Swift
# use_frameworks!

Итак, все, что мне нужно было сделать, это изменить его на:

# Uncomment this line if you're using Swift
use_frameworks!

... aaand он работал:)

  • 2
    Это было то, что потребовалось.
  • 0
    Да, для меня use_frameworks даже не было в моем Podfile, поэтому я добавил его
22

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

То есть, если у вас есть "родительский" проект с конфигурацией "AppStore", вы должны убедиться, что все подпроекты также имеют это имя конфигурации.

Смотрите мои скриншоты.

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

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

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

  • 1
    В моем случае подпроект имел только Debug and Distribution а его родительский проект пытался собрать для Release . Решением было сделать копию Distribution в дочернем проекте и переименовать эту копию Release .
  • 1
    Это привело к тому, что я нашел проблему, но я решил ее, добавив пути поиска в рамках моей пользовательской конфигурации, так как я не хотел касаться стороннего подпроекта :)
Показать ещё 3 комментария
19

Сравните этот скриншот с настройкой сборки. Это может работать. Перейдите к пути поиска фреймов:

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

  • 1
    Перепробовал все выше, это отлично сработало для меня.
  • 1
    Работал на меня! Спасибо
Показать ещё 2 комментария
16

Я тоже испытывал эту проблему. Исправить меня было то, что схемы Архива между двумя проектами не совпадали. У меня есть xcworkspace с проектом framework и проектом приложения. Проблема заключалась в том, что в схеме Архива для моего приложения я использовал другую конфигурацию сборки, чем схема использовала для нее схему архива. Я установил обе версии Build Configures для Release, и это устранило проблему.

  • 0
    Это сработало для меня. Я установил свой основной проект Build Config обратно в Release (из дистрибутива), и теперь он соответствует подпроекту. Все работает. Спасибо!
  • 1
    У нашего фреймворка не было конфигурации AdHoc, которую мы использовали для проекта - это означало, что он не создавался вместе с проектом.
Показать ещё 1 комментарий
8

Предполагая, что Framework действительно есть и в пути и т.д., удалите каталог ~/Library/Developer/Xcode/DerivedData/ModuleCache (и очистите проект и удалите данные, специфичные для проекта, для хорошей оценки).

Когда вы выполняете стандартную очистку, каталог ModuleCache не восстанавливается.

  • 1
    Я просто сделал это, как вы сказали мне, и это не работает: /
  • 1
    Тогда вы можете столкнуться с другой проблемой, которая выглядела так же, как та, с которой я столкнулся. : - /
Показать ещё 2 комментария
7

Убедитесь, что Find implicit Dependencies в настройках Build в Схеме включен!

7

В моем случае, после многих попыток выяснить, что я делал неправильно при импорте фреймворка, я в конечном итоге обнаружил, что проблема заключается в самой фреймворке. Если вы не получаете ваш фреймворк из надежного источника, вы должны проверить фреймворк и убедиться, что он содержит папку Modules с файлом module.modulemap внутри. Если файл module.modulemap отсутствует, вы получите ошибку "Нет такого модуля" MyFramework "".

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

Если в папке "Модули" отсутствует папка "MyFramework.swiftmodule", то платформа будет найдена, но XCode не будет знать о ее содержимом, поэтому вы получите различные ошибки.

  • 2
    По некоторым причинам это не показано в xcode 9.1, даже когда это присутствует. Щелкните правой кнопкой мыши ваш фреймворк> Показать в Finder> и убедитесь, что там есть ваша карта модулей. Если вы используете ручной фреймворк в проекте pods, перестройте ваши pods, если вы только что добавили новый ручной фреймворк или обновили существующий.
  • 0
    Спасибо! Я сам создал файл, и он работал: модуль фрейма NAME {зонтик заголовка "NAME.h" export * module * {export *}}
6

Я также столкнулся с той же ошибкой несколько дней назад. Вот как я решил проблему:

Ошибка: "модуль не найден"

  • Создать подфайл в корневом каталоге проекта
  • Установите cocoapods (менеджер зависимостей для проектов Swift и iOS)
  • Запустить программу установки
  • Перейдите в Настройки сборки проекта:

    • Найти Objective-c перемычку заголовка под компилятором Swift - генерация кода (если вы не найдете компилятор Swift здесь, возможно, добавьте в проект новый файл Swift)
    • Перетащите файл заголовка библиотеки с левой стороны на заголовок заголовка (см. прикрепленное изображение) Изображение 1719
  • Создайте новый заголовочный файл моста: например, TestProject-Bridging-Header.h и поместите в Swift Compiler → Objective-c Имя заголовка сгенерированного интерфейса (см. изображение выше)

  • В файле TestProject-Bridging-Header.h напишите #import "Mixpanel/Mixpanel.h"
  • В вашем файле Swift код должен быть: Импорт Mixpanel (например, название библиотеки)

Что все.

5

Хорошо, как одна и та же проблема была решена для меня, заключалась в том, чтобы установить производное местоположение данных относительно каталога рабочей области, а не сохранять его по умолчанию. Перейдите в настройки в xcode. Перейдите на вкладку местоположений в настройках и установите Derived data в Relative. Надеюсь, поможет.

  • 0
    Это сработало только один раз, затем, когда я запускаю, возникает та же проблема не найти модуль.
4

Следующие шаги работали для меня.

  1. Выйти из xcode
  2. Запустите "pod update" в терминале
  3. Откройте .xcworkspace и .xcworkspace снова.
  • 1
    Эти шаги сработали для меня ... Спасибо ... Я запустил "Pod install", но не получил "Модуль XXX не найден ...", но после выхода из XCode и последующего открытия Workspace мне помогло ..
  • 0
    Моя проблема в том, что после добавления новой конфигурации сборки и схемы я получил «Модуль не найден ...». Выход Xcode не работает, после pod install он работает.
Показать ещё 1 комментарий
4

В моем случае приложение IPHONEOS_DEPLOYMENT_TARGET было установлено на 9.3, тогда как в моем недавно созданном фреймворке оно было установлено на 10.2

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

После настройки фреймворка iOS Deployment Target в соответствии с моей целью развертывания приложения, фреймворк успешно скомпилирован и связан.

  • 0
    Благодарю. Потратив несколько часов, я обнаружил, что проблема заключается в развертывании.
4

Если вы создаете платформу, такую ​​как tvOS, убедитесь, что выбран выбранный вами Apple TV (т.е. соответствующий).

Построение приложения tvOS с выбранным iOS симулятором дало мне именно эту ошибку. Проделали большую часть часа, ища всевозможные проблемы с сборкой... doh.

  • 0
    Спасибо! Теперь все очевидно, но ошибка заставляла меня искать более сложные решения!
3

Я получал ту же ошибку, что и я добавил пару фреймворков, используя Cocoapods. Если мы используем Pods в нашем проекте, мы должны использовать xcodeworkspace вместо xcodeproject. Чтобы запустить проект через xcodebuild, я добавил параметр -workspace <workspacename> в команду xcodebuild, и он отлично работал.

  • 0
    Если у вас НОВЫЙ вопрос, задайте его, нажав кнопку « Задать вопрос» . Если у вас достаточно репутации, вы можете проголосовать за этот вопрос. В качестве альтернативы, «пометить» его как избранное, и вы будете получать уведомления о любых новых ответах.
3

Я получал ту же ошибку для

import Firebase

Но потом заметил, что я не добавлял pod в основной целевой раздел, а добавлял только целевые объекты Test и TestUI в Podfile.

С помощью команды

pod init

для проекта xcode swift создается следующий файл подкачки

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MyApp' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for MyApp

  target 'MyAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

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

2

Я уже установил стручки. Сборка работала без проблем, когда я собирал приложение на своем устройстве, но архив не работал. Я просто бегу:

pod install

новые модули не были установлены, только файл.xcodeproj был восстановлен и архив начал работать

2

Я просто удалил свой cocoapod. Затем я выполнил установку pod, чтобы удалить ее. Затем я просто добавил его обратно в свой файл и повторно установил его. Это заставило его работать. Не знаю, почему.

2

Я исправил это с помощью

Цели → Общие → Связанные структуры и библиотеки

Добавьте фреймворк, который должен находиться в верхней части папки Workspace. Боль в заднице.

1

Моя проблема была с несколькими целями. Я решил это с помощью ссылок ниже: правильно настроить файл pod и исправить настройки сборки

Надеюсь, кто-нибудь найдет это полезным.

1

Это то, что, наконец, сработало для меня. Довольно грустно, что мне пришлось все это делать, но это было единственное, что я смог найти, что сработало.

После обеспечения библиотеки были перечислены в рамках linked framework and libraries. Если его там нет, вы можете нажать + и, надеюсь, увидеть свой фреймворк/модуль в списке.

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

Нажмите на свой проект в значке схемы (см. Изображение ниже)

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

Тогда вы должны увидеть свои рамки фокуса в списке:

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

Нажмите Manage Schemes.

Тогда вы должны увидеть что-то вроде этого:

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

AutoCreate Schemes now box для своего фреймворка, нажмите " AutoCreate Schemes now, затем close.

Затем попробуйте снова импортировать ваш фреймворк/модуль.

Это сработало для меня.

1

Я получал эту проблему, потому что я установил неверную цель в podfile (сам проект, а не раздел UITests).

1

У меня возникла эта проблема при разработке пользовательского Pod. Установлено, что мне просто нужно указать зависимость в моем Procfile:

Pod::Spec.new do |s|
   # ... other declarations

   s.dependency 'Alamofire', '~> 4.3'
end
1

Просто для завершения с другой возможностью эта ошибка может произойти, если опция "Найти неявные зависимости" не установлена. Перейдите в "Редактировать схему" → "Сборка".

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

Затем проверьте эти параметры.

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

1

Я обнаружил, что Import Paths в Build Settings был неправильным для настраиваемого (MySQL) модуля. После указания, что в правильном направлении сообщение исчезло.

  • 0
    Каков правильный путь?
  • 0
    @rplankenhorn Ну, именно там, где вы положили их на свою машину. Запустите find если вы этого не знаете.
0

Еще одно предложение для Xcode 10+ и проектов, которые 1. созданы с версией Xcode <10, 2. Содержат подпроект с каркасом, от которого зависит основной проект. Проблема заключается в том, что Xcode поместит скомпилированную среду в каталог, указанный в подпроекте, который, вероятно, отличается от основного каталога сборки проекта.

Проверьте Файл> Настройки проекта. Теперь нажмите "Дополнительно..." и выберите в качестве пути сборки что-то отличное от "Legacy", например, "Уникальный". В этом случае Xcode поместит все собранные компоненты в одну папку, и он сможет найти "отсутствующий" модуль.

0

Если вы используете Carthage вместо Cocoapods, убедитесь, что вы используете правильный импорт:

//Если вы используете CocoaPods

import NVActivityIndicatorView

//Если вы используете Карфаген

import NVActivityIndicatorView_iOS//for iOS

Источник: https://github.com/ninjaprox/NVActivityIndicatorView#usage

0

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

0

Другой возможной причиной в XCode 10 может быть то, что Supported Platforms иногда меняют на macOS а Valid Architectures меняют на i386 x86_64 для проектов Pods. Предполагая, что проект предназначен для iOS, затем выберите проект Pods и измените Supported Platforms на iOS и Valid Architectures на arm64 arm64e armv7 armv7s Вы можете выполнить каждую из целей, однако это займет больше времени, если у вас более одного модуля. Кроме того, Swift version фреймворков Swift в написанном Swift иногда устанавливается на неправильную версию.

0

В Xcode 10.1 для меня решение состояло в том, чтобы изменить систему сборки в настройках Workspace в меню File. По умолчанию он установлен в New Build System, изменил его на Legacy Build System, и это помогло.

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

  • 0
    Спасибо, приятель, ты спас мой день! +1
0

В общем => Связанные фреймворки и библиотеки, я добавил свой ./Pods/Pods.xcodeproj и он добился ./Pods/Pods.xcodeproj

0

На самом деле я решил эту проблему намного проще, добавив в конец build-debug.xconfig

#include "../Pods/Target Support Files/Pods-IAP/Pods-IAP.debug.xcconfig"

И до конца build-release.xconfig

#include "../Pods/Target Support Files/Pods-IAP/Pods-IAP.release.xcconfig"

поскольку эти файлы уже определяют PODS_ROOT и связанные переменные сборки.

0

Если у вас есть несколько проектов в рабочей области, вам необходимо:

1) добавить новую конфигурацию для всех проектов

2) продукт → чистый

3) удалить derived data

4) pod install в терминал

5) построить свой проект.

Надеюсь, это кому-нибудь поможет.

0

Если это просто простой проект, без cocoapods, как у меня, вы можете попытаться переместить ваш фреймворк в директорию вашего проекта и заново связать. Я имел это на рабочем столе, но связанный и "импорт MyFramework" сделал ошибку. Переместив его в директорию проекта и снова связав, он заработал.

0

Я получил награду за самую глупую причину ошибки "Нет такого модуля". В моем случае я создаю включенный фреймворк вручную и копирую его в каталог моего проекта. Мои пути поиска фреймворка были заданы правильно, и фреймворк был добавлен в проект правильно.

Когда я заархивировал структуру, которую я строил, я использовал "Показать в Finder", чтобы перенести меня в папку релиза в производных данных. Но я не заметил, что папка содержит только псевдоним для фреймворка, а не сам фреймворк. Исходный фреймворк остался в моем каталоге производных данных, поэтому позже, когда я очистил производные данные, фреймворк был удален, но мой проект этого не знал.

Повторное архивирование фреймворка, следуя псевдониму фактической фреймворк, и копирование его в каталог моего проекта работало

0

Если вы используете Карфаген, каркасы в здании обычно остаются в

$(PROJECT_DIR)/Carthage/Build/iOS

Если вы запустите carthage update --platform ios --no-build (чтобы сэкономить время), файлы внутри папки Build не будут повторно создаваться, тогда модули не будут доступны для XCode.

В моем случае я запустил carthage update --platform ios, затем моя проблема была решена.

0

Моя проблема (на этот раз) заключалась в том, что я использовал устаревшую версию библиотеки в моем Podfile.

Я использовал:

pod 'LBTAComponents', '~> 0.1.9'

который не работал, но когда я изменил его на:

pod 'LBTAComponents', '~> 1.0.2'

это сработало.

0

В моем случае проблема состояла просто в том, что некоторые из проектов, которые использовали платформу, имели целевую версию iOS для развертывания, предшествующую целевой версии iOS для платформы. Как только я изменил целевую версию iOS для развертывания фреймворка, ошибка исчезла. Изображение 1726

0

Я установил pod Fakery, который был добавлен под моим файлом Pods, однако, когда я попытался его использовать, я получил ту же ошибку. Проблема была в том, что я не построил ее, после ее создания быстрый компилятор бросил несколько ошибок в быстрых файлах Fekery, которые некоторые функции были переименованы, а также предоставили исправления для них. После решения всех проблем с компилятором сборка выполнена успешно, и я смог использовать модуль. Поэтому в моем случае была проблема быстрой совместимости языков.

0

В моем случае с проектом в swift 4 библиотеки не были скомпилированы, поэтому их не удалось найти и импортировать. Решение заключалось в том, чтобы установить компиляционную версию для библиотек cocoapods как swift 3.2 Изображение 1728

0

Это хромально и весело, но я загрузил образец проекта из Github и запускал его из папки "Загрузки". Я переместил его на рабочий стол и снова сделал сборку, и это сработало! Может быть, Xcode не понравится папке "Загрузка" в качестве пути!;)

0

1 - В вашем podfile удалите модуль, который создает проблему, и сохраните файл 2 - Запустите pod install 3 - Повторно добавьте модуль, сохраните файл 4 - Перезапустите pod install

Проблема должна быть решена.

Е.И.В.

  • 0
    Так просто, я не пробовал это в первую очередь, спасибо
0

В моем случае мне просто пришлось перезагрузить проект. Я использовал командную строку для клонирования моего проекта, но он не правильно установил подмодуль. Чтобы исправить это, я клонировал проект через XCode, и все работает. Просто сначала сделайте резервную копию изменений.

0

Иногда вам нужно установить Pods.

  • Открыть терминал
  • cd project
  • pod install
  • Откройте .xcworkspace и
  • Сборка успешно.
0

В вашем проекте Подфайл вы должны раскомментировать use_frameworks! и platform :ios, '9.0'

0

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

предупреждение: нет заголовка зонтика, найденного для цели "MyFramework", карта модуля не будет сгенерирована

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

0

Решение для меня было. Внутри целей → Настройки сборки → Пути поиска и добавление $(унаследовано). Однако, если это кокоаподы, ваш ответ, вероятно, внутри вывода в терминале.

0

Для меня это произошло в RxSwift, и проблема была в том, что я установил ее в 3.0.0 в подфайл. Изменив ограничение версии и обновив модули, обновил его до 3.1.0, который исправил его.

0

ЕСЛИ вы сделали все выше и все еще ничего не сработали для вас, попробуйте добавить $(inherited) в путь поиска в каркасе вашей целевой настройки сборки.

0

У меня была аналогичная проблема с загрузкой FacebookSDK, я добавил ~/Documents/FacebookSDK (поиск, где ваши рамки), в пути поиска Framework в Настройки сборки, после чего мне удалось импортировать модуль FBSDKShareKit

0

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

0

Для чего это стоит (я новичок в этом, используя Xcode 7.2/Swift 2), но я заметил, что просто наличие .swift файла из библиотеки в каталоге проекта автоматически дает вам доступ к нему и не нуждается в используя инструкцию.

Пример: я использую SwiftyJSON, и мне нужен только файл SwiftyJSON.swift в проекте. Оператор using фактически выдавал мне ошибку "нет такого модуля" и устранял ее, и он отлично работает.

-3

Я столкнулся с этой проблемой, когда попытался снизить целевой показатель развертывания с iOS 11 до iOS 10. Изменение его на iOS 11 позволило мне архивировать для загрузки.

Чтобы загрузить меньшую цель развертывания, я выполнил обновление и успешно архивировал.

-9

ПЛАТЫ Я СКАЗАЛ КОД!!!!!

Хорошо, так что вы хотите сделать, это найти Xcodeproj в Finder.

Теперь щелкните правой кнопкой мыши на .xcodeproj и щелкните содержимое пакета show show. Затем перетащите туда рамки. Вот так Теперь вернитесь к Xcode и нажмите + в Linking Binaries с библиотеками. Нажмите "Добавить другое", в котором вы должны попасть в свой файл Xcodeproj, и теперь добавьте оба болта и анализа Видно здесь

И waboosh!! Теперь вы можете импортировать Parse!

Ещё вопросы

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