it-swarm.com.ru

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

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

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

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

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

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

Error module

Project

Linkes Frameworks, Libraries

Header bridge

245
alexandresecanove

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

254
terhechte

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

Открытие xcodeproj вместо xcworkspace вызовет такую ​​ошибку ...

390
capikaw

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

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

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

32
Mike K

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

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

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

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

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

29
nburk

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

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

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

 Configuration setup in "parent" project

 Configuration setup in 1st sub project

 Configuration setup in 2nd sub project

23
Groot

Пожалуйста, сравните этот снимок экрана с настройкой сборки . Может, это сработает . Перейдите к пути поиска в рамках:

 Enter image description here

19
Krutarth Patel

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

16
mikepj

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

 Example showing directory structure of SwiftyJSON.framework

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

8
mcsheffrey

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

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

8
Brad Brighton

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

  1. Выйти из xcode
  2. Запустите "pod update" в терминале
  3. Откройте .xcworkspace и соберите снова.
7
john raja

Убедитесь, что Find implicit Dependencies в опциях сборки в Scheme включена!

7
Nik Kov

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

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

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

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

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

Это все.

6
vikram jeet singh

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

5
harshitpthk

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

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

4
Jordan Smith

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

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

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

4
berbie

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

3
pawan singh

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

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

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

3
zeeawan

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

2
Daniel Jones

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

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

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

2
Magoo

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

2
michel

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

pod install

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

2
Vojta

Просто для завершения с другой возможностью, эта ошибка может произойти, если опция «Найти неявные зависимости» не отмечена. Зайдите в Редактировать схему -> Построить.

 enter image description here

Затем проверьте эту опцию.

 enter image description here

1
Hola Soy Edu Feliz Navidad

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

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

1
boa_in_samoa

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

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

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

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

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

1
Alok

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

1
Thomas Kilian

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

1
cenkarioz

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

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

 enter image description here

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

 enter image description here

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

 enter image description here

Нажмите Manage Schemes.

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

 enter image description here

Отметьте box для своей платформы, нажмите AutoCreate Schemes now, затем close.

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

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

1
ScottyBlades

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

1
kidnapper

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

1
Charlie Seligman

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

 enter image description here

1
MFA

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

0
Jensie

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

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

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

0
SafeFastExpressive

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

$(PROJECT_DIR)/Carthage/Build/iOS

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

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

0
Ronaldo Albertini

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

0
Zaporozhchenko Aleksandr

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

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

0
Anton

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

0
Ray_Soham

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

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

Е.И.В.

0
Florian de Ponnat

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

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

pod 'LBTAComponents', '~> 0.1.9'

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

pod 'LBTAComponents', '~> 1.0.2'

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

0
instanceof

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

0
Chuck Krutsinger

Если вы размещаете свою собственную библиотеку или фреймворк, убедитесь, что в ней есть файл module.modulemap, а заголовки из него находятся в разделе Build Phases -> Headers

0
yoAlex5

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

0
kalafun

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

0
JFed-9

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

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

2) product -> clean

3) удалить derived data

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

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

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

0
Vlad Pulichev

Я на самом деле решил это гораздо проще, добавив в конец 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
NoodleOfDeath

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

0
iHulk

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

0
user3007870

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

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

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

0
Adam Preble

Для меня я исправил замену любых символов тильды (~) в моих пользовательских путях на $(HOME). Пользовательские пути расположены в настройках XCode на вкладке Locations .

0
Nate Whittaker

Иногда вам нужно установить стручки.

  1. Открытый терминал
  2. cD проект
  3. под установку
  4. Откройте .xcworkspace и
  5. Сборка успешна
0
Umitk

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

0
Mark Dail

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

0
Khazana

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

0
Yigit Alp Ciray

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

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

0
markiyanm