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

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

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

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

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

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

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

проект

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

Верхний мост

90 ответов

Решение

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

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

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

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

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

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

Настройка конфигурации в

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

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

Я не совсем уверен, почему ответ 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!

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

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

  1. Выйти из xcode
  2. Бежать "pod update" в терминале
  3. открыто .xcworkspace и построить снова.

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

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

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

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

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

Если в папке "Модули" отсутствует папка "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 в опциях сборки в схеме включено!

Проблема может возникнуть при нескольких возможных неправильных настройках.

  1. Подтвердите, что вы открыли .xcworkspace но нет .xcodeprojфайл. Также убедитесь, что у вас есть сборкаSocial сначала, прежде чем строить TriviaApp.
  2. Убедитесь, что цель развертывания iOS установлена ​​одинаково для всех модулей с основным приложением. Например, этоTriviaAppцель развертывания установлена ​​на 9.0, Socialцель развертывания также должна быть установлена ​​на 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. Если ни один из вышеперечисленных шагов не помог, удалите папку с производными данными и попробуйте перестроить.

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

Что касается xCode 12 и симуляторов,

ошибка может исчезнуть, когда вы перейдете к Pods.xcodeproj в навигаторе проекта и в настройках сборки в разделе «Исключенные архитектуры» для каждой отладки и выпуска выберите «Any iOS Simulator SDK» со значением arm64.

Удачного кодирования :)

Решить проблему веб-просмотра xcode версии 12.3 (12C33)

Просто выполните 3 шага:

  1. Откройте проект с .xcodeproj

  2. Выйти из Xcode

  3. Повторно открыть проект из .xcworkspace

Все сделано

Иногда pod deintegrate а потом pod install мне тоже помогает.

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

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

  • Создайте 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 (т.е. имя библиотеки)

Это все.

Хорошо, для меня была решена та же проблема: установить расположение производных данных относительно каталога рабочей области, а не сохранять его по умолчанию. Перейти к настройкам в 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 и запустите приложение.

Не уверен, что удаление производных данных и очистка проекта необходимы, но вы также можете это сделать.

Удивлен, что это даже сработало. Мое решение было пойти в...

Настройки сборки -> Пути поиска фреймворка -> выделить отладку -> нажать удалить -> путь должен автоматически заполниться. -> Сделайте то же самое для выпуска

Результат:

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