Получение ошибки "Нет такого модуля" с использованием Xcode, но фреймворк есть
В настоящее время я пишу в Swift, и у меня есть ошибка:
Нет такого модуля Social
Но я не понимаю, потому что модуль находится в моем проекте, объявлен в "Связанных фреймворках и библиотеках" и во "Встроенных двоичных файлах".
Каркас находится в Objective-C, поэтому я написал для него заголовок моста.
Пожалуйста, как я могу заставить Xcode распознавать фреймворк?
90 ответов
Я не уверен, почему это происходит, но один из способов решить вашу проблему - перейти в настройки сборки и определить пути поиска фреймворка в папку, содержащую соответствующие фреймворки. Если фреймворки размещены в каталоге вашего проекта, просто установите путь поиска фреймворка на $(SRCROOT)
и установите его в рекурсивный.
В случае, если это пятничный день или в любое время после 1 часа ночи
открытие xcodeproj
вместо xcworkspace
вызовет такую ошибку...
Убедитесь, что имена ваших конфигураций в подпроектах совпадают с именами "родительского" проекта. Если имена конфигурации не совпадают точно (с учетом регистра), Xcode прервет процесс архивирования и покажет ошибку "Нет такого модуля..."
То есть, если у вас есть "родительский" проект с конфигурацией "AppStore", вы должны убедиться, что все подпроекты также имеют это имя конфигурации.
Смотрите мои скриншоты.
Я не совсем уверен, почему ответ Martin R в комментариях к вопросу так игнорируется:
Убедитесь, что вы попытались просто пропустить импорт фреймворка, так как он уже добавлен в заголовок моста.
Надеюсь это поможет
У меня была такая же проблема с использованием Cocoapods и Swift. Я не заметил следующие строки в Podfile:
# Uncomment this line if you're using Swift
# use_frameworks!
Итак, все, что мне нужно было сделать, это изменить его на:
# Uncomment this line if you're using Swift
use_frameworks!
... и это сработало:)
Следующие шаги работали для меня.
- Выйти из xcode
- Бежать
"pod update"
в терминале - открыто
.xcworkspace
и построить снова.
Пожалуйста, сравните этот скриншот с настройками сборки. Может это сработает. Перейти к поиску по фреймворку
Я тоже испытывал эту проблему. Я решил, что схемы архивов между двумя проектами не совпадают. У меня есть xcworkspace с каркасным проектом и проектом приложения. Проблема заключалась в том, что в схеме "Архив" для моего приложения я использовал конфигурацию сборки, отличную от используемой в ее структуре "Архива". Я установил обе конфигурации сборки в Release, и это решило проблему.
В моем случае, после многих попыток выяснить, что я делал неправильно при импорте фреймворка, я в конечном итоге обнаружил, что проблема заключается в самой фреймворке. Если вы не получаете ваш фреймворк из надежного источника, вы должны проверить фреймворк и убедиться, что он содержит папку Modules с файлом module.modulemap внутри. Если файл module.modulemap отсутствует, вы получите ошибку "Нет такого модуля"MyFramework "".
Если в папке "Модули" отсутствует папка "MyFramework.swiftmodule", то платформа будет найдена, но XCode не будет знать о ее содержимом, поэтому вы получите различные ошибки.
Это ошибка времени компиляции. Получить его можно во многих футлярах:
.xcodeproj
был открыт вместо.xcworkspace
module.modulemap
Objective-C, Библиотека / Целевая платформа.
Если у вас есть собственная библиотека или фреймворк, убедитесь, что в нем module.modulemap
файл и заголовки из него находятся в Build Phases -> Headers section
Framework Search Paths
потребитель -> рамки
Если вы попытаетесь создать приложение, не задавая Framework Search Paths
. После установкиFramework Search Path
чтобы указать на ресурсы фреймворка, Xcode успешно построит проект. Однако, когда вы запускаете приложение в симуляторе, возникает сбой по причине:Image not found
около
Это может быть абсолютный или относительный путь, например $(SRCROOT)
или $(SRCROOT)/..
для рабочего места
Import Paths
Swift потребитель -> статическая библиотека Swift
В Import Paths
должен указывать на .swiftmodule
Linked Frameworks and Libraries
потребитель -> статическая структура
Добавить Static framework
в этот раздел
Find Implicit Dependencies
Когда у вас есть неявная зависимость, но Find Implicit Dependencies
был выключен
Для меня Build Active Architecture Only был установлен на Да для выбранной конфигурации. Это сделал трюк:
Выберите "Модули" в левом навигаторе проекта> Выберите "Настройки сборки" > "Создать активную архитектуру только для Нет"
Предполагая, что Framework действительно есть и находится в пути, и т. Д.... удалите каталог ~ / Library / Developer / Xcode / DerivedData / ModuleCache (и очистите проект и удалите данные, специфичные для проекта, для хорошей меры).
Когда вы выполняете стандартную очистку, каталог ModuleCache не перестраивается.
Будь уверен, что Find implicit Dependencies
в опциях сборки в схеме включено!
Проблема может возникнуть при нескольких возможных неправильных настройках.
- Подтвердите, что вы открыли
.xcworkspace
но нет.xcodeproj
файл. Также убедитесь, что у вас есть сборкаSocial
сначала, прежде чем строитьTriviaApp
. - Убедитесь, что цель развертывания iOS установлена одинаково для всех модулей с основным приложением. Например, это
TriviaApp
цель развертывания установлена на9.0
,Social
цель развертывания также должна быть установлена на9.0
. - Убедитесь, что ваш основной модуль (
TriviaApp
) и используемый вами фреймворк (Social
) имеют одинаковый набор конфигураций. т.е. если ваш проект имеет три конфигурации,Debug
,Release
,ReleasePremium
чем ваша социальная структура также должна иметь три конфигурацииDebug
,Release
,ReleasePremium
. Также убедитесь, что конфигурация архива одинакова для обоихTriviaApp
а такжеSocial
. т.е. если вашTriviaApp
схема архива установлена наReleasePremium
, твойSocial
схему архива также необходимо установить вReleasePremium
. - Пожалуйста, убедитесь, что вам не нужно импортировать
Social
в каждом.swift
файлы, когда он уже добавлен вBridging-Header.h
. - Если проблема возникла из-за файлов Pod, убедитесь, что вы раскомментировали
#use_frameworks!
вuse_frameworks!
от тебяPodfile
. Иногда переустановка модуля работает, еслиSocial
имеет какую-либо зависимость от стручков. - Если ни один из вышеперечисленных шагов не помог, удалите папку с производными данными и попробуйте перестроить.
Что сработало для меня, так это решение другого вопроса. Закрытие Xcode и повторное открытие проекта как рабочей области.
Перейдите в папку вашего проекта и откройте .xcodeworkspace
файл.
После того, как вы откроете рабочую область (вместо проекта), стручки должны появиться как проект верхнего уровня в Навигаторе проекта.
Что касается xCode 12 и симуляторов,
ошибка может исчезнуть, когда вы перейдете к Pods.xcodeproj в навигаторе проекта и в настройках сборки в разделе «Исключенные архитектуры» для каждой отладки и выпуска выберите «Any iOS Simulator SDK» со значением arm64.
Удачного кодирования :)
Решить проблему веб-просмотра xcode версии 12.3 (12C33)
Просто выполните 3 шага:
Откройте проект с
.xcodeproj
Выйти из Xcode
Повторно открыть проект из
.xcworkspace
Все сделано
Иногда pod deintegrate
а потом pod install
мне тоже помогает.
Я также столкнулся с той же ошибкой несколько дней назад. Вот как я решил проблему:
Ошибка "модуль не найден"
- Создайте Podfile в вашей корневой директории проекта
- Установите cocoapods (менеджер зависимостей для проектов Swift и iOS)
- Запустить установку pod
Перейдите в настройки сборки проекта:
Создайте новый файл заголовка моста: например, TestProject-Bridging-Header.h и поместите его в Swift Compiler → Имя заголовка сгенерированного интерфейса Objective-C (см. Рисунок выше)
- В файле TestProject-Bridging-Header.h напишите #import "Mixpanel/Mixpanel.h"
- В вашем файле Swift код должен быть: Import Mixpanel (т.е. имя библиотеки)
Это все.
Хорошо, для меня была решена та же проблема: установить расположение производных данных относительно каталога рабочей области, а не сохранять его по умолчанию. Перейти к настройкам в xcode. Перейдите на вкладку "Местоположения" в настройках и установите "Производные данные" в "Относительный". Надеюсь, поможет.
Я получаю ту же ошибку для
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
Итак, нужно убедиться, что каждый добавляет стручки в любой соответствующий заполнитель.
У меня была аналогичная проблема с xcode 10.3. xCode не смог распознать файлы из модулей. Здесь я решил так:
- Перейти к этапу сборки
- Свяжите двоичный файл с библиотеками
- Добавляем фреймворк из подов (в моем случае EPSignature.framwork)
- Очистить и построить проект
Я исправил это с
Targets -> General -> Linked frameworks and libraries
Add the framework which should be at the top in the Workspace
папка. Pain in the arse.
TL;DR: проверьте свой подфайл на предмет специфичности shared_pods
После того, как я ударился головой о стену и попробовал буквально каждый ответ, опубликованный здесь за последнюю неделю, я наконец нашел решение.
У меня есть две отдельные цели - одна для выпуска и одна для разработки. Цель разработки была создана спустя много времени после цели выпуска, из-за чего я забыл о некоторых этапах настройки этой цели.
Я смог правильно скомпилировать мой проект, используя мою цель выпуска, но у моей цели разработки была проблема.
Посмотрев в свой подфайл в двадцатый раз, я заметил, что у меня есть только следующие, под моим shared_pods
определение:
target 'Release' do
shared_pods
end
Что мне нужно было сделать, так это добавить мою вторую цель в мой Podfile, и это устранило проблему:
target 'Release' do
shared_pods
end
target 'Development' do
shared_pods
end
Надеюсь, это избавит кого-то от нескольких дней разочарования.
В моем случае приложение IPHONEOS_DEPLOYMENT_TARGET было установлено на 9.3, тогда как в моем недавно созданном фреймворке оно было установлено на 10.2
Средство разрешения неявных зависимостей игнорировало мою новую платформу, поскольку требования целевой платформы выше, чем требования приложений.
После настройки фреймворка iOS Deployment Target в соответствии с моей целью развертывания приложения, фреймворк успешно скомпилирован и связан
Я получаю ту же ошибку, когда я добавил пару фреймворков, используя Cocoapods
, Если мы используем стручки в нашем проекте, мы должны использовать xcodeworkspace
вместо xcodeproject
, Чтобы запустить проект через xcodebuild, я добавил -workspace <workspacename>
параметр в xcodebuild
Команда и это сработало отлично.
Если вы создаете платформу, такую как tvOS, убедитесь, что у вас выбран симулятор Apple TV (т.е. соответствующий).
Создание приложения для tvOS с выбранным имитатором iOS дало мне именно эту ошибку. Потратил большую часть часа на поиски всевозможных проблем со сборкой... дох.
Я обнаружил, что Import Paths
в Build Settings
было неправильно для пользовательского (MySQL) модуля. После указания, что в правильном направлении сообщение пропало.
Единственное, что сработало для меня на машине M1 , это запустить Xcode с помощью Rosetta.
Без этого я смог запустить приложение только на реальном устройстве, но не на симуляторе iOS.
Создание приложения может быть немного медленнее, но оно определенно решает проблему.
Если вы не знаете, как включить Rosetta, вот шаги:
- Выйти из Xcode
- Найдите Xcode в
Applications
папку, щелкните по ней правой кнопкой мыши и нажмитеGet Info
- Отметьте
Open using Rosetta
как это показано на изображении ниже - Снова откройте Xcode и запустите приложение.
Не уверен, что удаление производных данных и очистка проекта необходимы, но вы также можете это сделать.
Удивлен, что это даже сработало. Мое решение было пойти в...
Настройки сборки -> Пути поиска фреймворка -> выделить отладку -> нажать удалить -> путь должен автоматически заполниться. -> Сделайте то же самое для выпуска