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

344

В настоящее время я пишу в Swift, и у меня есть ошибка:

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

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

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

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

Модуль ошибки

проект

Ссылки Фреймворки, Библиотеки

Верхний мост

alexandresecanove
источник
20
Не быть слишком мистером. очевидно, но вы пробовали полную очистку и сборку?
Калель Уэйд
28
Если заголовок фреймворка уже включен в файл заголовка моста, вам не нужно импортировать его в исходный файл Swift.
Мартин Р
2
Также вам может понадобиться использовать кавычки для импорта:#import "Social/Social.h"
Martin R
3
та же ошибка с CocoaPods 'нет такой ошибки модуля' в xcode.
AsimRazaKhan
1
Я изменил цель развертывания с 11 на 10, но забыл об этом в Podfile platform :ios, '10.0'. Это было решение.
Артур Гусейнов

Ответы:

322

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

terhechte
источник
5
Спасибо. Я должен был сделать это в настройках сборки моего проекта, а не в настройках целевой сборки
Pulsar
8
Уловка для меня заключалась в том, чтобы найти путь к фреймворку для использования в путях поиска фреймворка. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework хорошо работает для меня. См. Также stackoverflow.com/questions/32816507/…
Крис Принс,
11
Пришлось сделать это Project Build Settingsвместо Target Build Settings.
Максим Михеев
379
Я исправил это, зайдя в ванную. Когда я вернулся, это работало. Я почти уверен, что попробовал все в этой теме, точно не знаю, что сделал работу. Я тоже молился в какой-то момент.
nmdias
2
ЗАМЕЧАНИЕ ПО ИСПРАВЛЕНИЮ: $ (SRCROOT) работал только для меня, когда я добавил его в Путь поиска платформы для проекта PODS.
addzo
549

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

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

capikaw
источник
2
Я попробовал это как Святой Грааль. Веселая. Кто знает, но выход, а затем повторное открытие рабочего пространства на самом деле тоже работает. Очистить, а затем построить.
mondousage
3
В 9 часов вечера, используя fastlane, указали спортзал (проект: ---) вместо спортзала (рабочее пространство: ----) Спасибо!
RickiG
1
Это случилось со мной после сбоя Xcode, и я выбрал «открыть» приложение из отчета об ошибке. Я буду знать лучше в следующий раз.
Марка
Я переустановил XCODE и получил эту ошибку, потому что я открывал приложение через недавно открытые проекты. Закрыли проект, Файл -> Открыть -> выберите файл xcworkspace и все заработало.
Дпедринья
Также относится к сборке из командной строки (наша проблема): xcodebuild -workspace yourproject.workspace.
Бен Батцер
57

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

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

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

Настройка конфигурации в «родительском» проекте

Настройка конфигурации в 1-м подпроекте

Настройка конфигурации во 2-м подпроекте

Гроот
источник
1
В моем случае, подпроект имел только Debugи Distributionи его родительский проект пытался построить для Release. Решением было сделать копию Distributionв дочернем проекте и переименовать эту копию Release.
olivaresF
2
Это привело к тому, что я нашел проблему, но я решил ее, добавив пути поиска в рамках моей пользовательской конфигурации, поскольку не хотел касаться стороннего подпроекта :)
DeFrenZ
Спасибо! У меня было 3 конфигурации в моем основном проекте. Итак, я сделал то же самое для фреймворка, и это помогло.
daxh
Любые подсказки о том, как заставить XCode построить специфическую конфигурацию вложенного подпроекта? Не хочу переименовывать конфиги подпроектов, так как они слишком связаны с добавлением новых конфигов в основной проект
Дрен
Это сработало для меня, так как мой проект имел 3 конфигурации, которые были переименованы из конфигураций по умолчанию «Debug» и «Release». Я обновил свой фреймворк, чтобы иметь те же 3 конфигурации, построил фреймворк, и все заработало как положено.
Юрий
44

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

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

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

Майк К
источник
38

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

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

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

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

... и это сработало :)

nburk
источник
Да, для меня use_frameworks даже не было в моем Podfile, поэтому я добавил его
PhoenixB
22

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

Введите описание изображения здесь

Крутарт Патель
источник
Также упоминается Крис Принс .
Франклин Ю
18

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

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

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

  1. Выйти из xcode
  2. Запустить "pod update"в терминале
  3. Откройте .xcworkspaceи соберите снова.
Джон Раджа
источник
1
Эти шаги сработали для меня ... Спасибо ... Я запустил "Pod install", но не получил "Модуль XXX не найден ...", но после выхода из XCode и последующего открытия Workspace мне помогло ...
Aks
Моя проблема в том, что после добавления новой конфигурации сборки и схемы я получил «Модуль не найден ...». Выход Xcode не работает, после pod installтого , как он работает.
Уильям Ху
Это сработало для меня. Любое объяснение, почему это решает проблему?
Нико Чернек
Это сработало для меня. После повторного открытия projectname.xcworkspace необходимо очистить и перестроить заново, чтобы он заработал.
Прашант
14

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

Пример, показывающий структуру каталогов SwiftyJSON.framework

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

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

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

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

Брэд Брайтон
источник
1
Я просто сделал это, как вы сказали мне, и это не работает: /
alexandresecanove
1
Тогда вы можете столкнуться с другой проблемой, которая выглядела так же, как та, с которой я столкнулся. : - /
Брэд Брайтон
У меня была та же проблема с Cocoapod, и удаление файлов в ModuleCache помогло мне.
HolySamosa
10

Что сработало для меня, так это решение другого вопроса. Закрытие Xcode и повторное открытие проекта в качестве рабочей области.
Перейдите в папку вашего проекта и откройте .xcodeworkspace файл.
После того, как вы откроете рабочую область (вместо проекта), стручки должны появиться как проект верхнего уровня в Навигаторе проекта.

cenkarioz
источник
9

Будьте уверены, что Find implicit Dependenciesв Build options в Scheme включены!

Ник Ков
источник
7

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

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

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

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

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

Вот и все.

Викрам Джит Сингх
источник
Этот ответ помог. Когда я пытался настроить его для MBProgress, я следовал инструкциям на ios-support.blogspot.com/2017/04/… , что было очень похоже.
Ветт
6

Хорошо, для меня была решена та же проблема: установить местоположение производных данных относительно каталога рабочей области, а не сохранять его по умолчанию. Зайдите в настройки в xcode. Перейдите на вкладку «Местоположения» в настройках и установите «Производные данные» в «Относительный». Надеюсь, поможет.

harshitpthk
источник
Это сработало только один раз, затем, когда я запускаю, возникает та же проблема не найти модуль.
nycdanie
5

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

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

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

zeeawan
источник
5

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

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

Джордан Смит
источник
1
То же самое относится, если вы выбираете «Мой Mac» при создании проекта iOS. Я не знаю, почему XCode даже позволяет это ... 😒
Клаас
Спасибо! Теперь все очевидно, но ошибка заставляла меня искать более сложные решения!
Дэн Мессинг
5

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

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

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

berbie
источник
Спасибо. Потратив несколько часов, я обнаружил, что проблема заключается в развертывании.
Ник
4

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

Паван Сингх
источник
Если у вас НОВЫЙ вопрос, задайте его, нажав кнопку « Задать вопрос» . Если у вас достаточно репутации, вы можете ответить на этот вопрос. В качестве альтернативы, «пометить» его как избранное, и вы будете получать уведомления о любых новых ответах.
Алессандро Каттин
@Pawan Singh Вы сэкономили несколько часов для меня, спасибо!
Дмитрий
3

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

qwerty_so
источник
@rplankenhorn Ну, именно там, где вы положили их на свою машину. Запустите, findесли вы этого не знаете.
qwerty_so
3

Я исправил это с

Цели -> Общие -> Связанные фреймворки и библиотеки

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

Маг
источник
3

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

Дэниел Джонс
источник
3

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

pod install

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

Войта
источник
3

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

введите описание изображения здесь

МИД
источник
Спасибо друг, ты спас мой день! +1
DungeonDev
3

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

  1. Пожалуйста, подтвердите, что вы открыли, .xcworkspaceно не .xcodeprojфайл. Также убедитесь, что у вас есть сборка, Socialпрежде чем строить TriviaApp.
  2. Убедитесь, что iOS Deployment Target установлен одинаково для всех модулей с основным приложением. Например, если TriviaAppцель развертывания s установлена 9.0, Socialцель развертывания s также должна быть установлена 9.0.
  3. Убедитесь, что ваш основной модуль ( TriviaApp) и используемая вами платформа ( Social) имеют одинаковый набор конфигураций. то есть , если ваш проект имеет три конфигурации, Debug, Release, ReleasePremiumчем ваши социальные структуры также должно иметь три конфигурации Debug, Release, ReleasePremium. Также убедитесь, что конфигурация архива одинакова для обоих TriviaAppи Social. то есть, если ваша TriviaAppархивная схема установлена ​​на ReleasePremium, ваша Socialархивная схема также должна быть установлена ReleasePremium.
  4. Пожалуйста, убедитесь, что вам не нужно импортировать Socialв каждый .swiftфайл, когда он уже добавлен в Bridging-Header.h.
  5. В случае выпуска пришло из Pod файлов, убедитесь , что вы раскомментировали #use_frameworks!в use_frameworks!от вас Podfile. Иногда переустановка модуля работает, если Socialесть какая-либо зависимость от модуля .
  6. Если ни один из вышеперечисленных шагов не работает, удалите папку с производными данными и попробуйте перестроить.
Саззад Хисейн Хан
источник
Вау, я бы никогда не понял это без твоей помощи. Действительно, в основной проект была добавлена ​​пользовательская конфигурация, но она отсутствовала в фреймворке.
Юлиан Онофрей
@lulian рад знать, что это помогло
Саззад Хисейн Хан
2

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

$(PROJECT_DIR)/Carthage/Build/iOS

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

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

Роналду Альбертини
источник
2

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

мишель
источник
2

Для меня Build Active Architecture Only был установлен на Да для выбранной конфигурации. Это сделало трюк:

Выберите «Модули» в левом навигаторе проекта> Выберите «Параметры сборки»> «Создать активную архитектуру только для Нет»

boa_in_samoa
источник
1

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

Сохэм Рэй
источник
1

У меня была похожая проблема с загрузкой FacebookSDK, я добавил ~ / Documents / FacebookSDK (поиск, где находятся ваши фреймворки) в пути поиска фреймворков в настройках Build, и после этого я смог импортировать модуль FBSDKShareKit.

kalafun
источник
1

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

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

markiyanm
источник