"Нет такого модуля", когда я использую CocoaPods

Итак, вот моя процедура. Я создаю новый Podfile в каталоге проекта, затем я добавил следующее

platform :ios, '9.0'
use_frameworks!

target 'CPod' do
pod 'AFNetworking', '~> 2.5'
pod 'ORStackView', '~> 2.0'
pod 'SwiftyJSON', '~> 2.1'
end 

Я стреляю pod installи все идет хорошо, откройте xcworkspace, Затем я иду к ViewController.swift и если я пытаюсь импортировать стручок, я получаю No such module 'SwiftyJSON'если бы я должен был сделать import SwiftyJSON, Есть идеи?

РЕДАКТИРОВАТЬ: SwiftyJSON является модулем на основе Swift, а не Obj-C

29 ответов

Попробуйте добавить Pods фреймворк для вашей схемы сборки и построения фреймворка. После того, как вы его построите, соберите / запустите ваш проект.

шаги:

  1. Меню Схема> Управление схемами> проверка Pods > Закрыть ( изображение 1, изображение 2)
  2. Выбрать Pods из меню схемы.
  3. строить Pods,
  4. Выберите ваш проект из того же меню, затем соберите / запустите его.

Вы должны снова открыть файл проекта.xcworkspace (не.xcodeproj) после установки вашего подфайла.

  1. Клонировать репо с CocoaPods
  2. Откройте YourWorkspace/YourApplication.xcworkspace
  3. Выберите приложение, которое хотите запустить, добавив SwiftyJSON.framework во встроенные двоичные файлы для этого проекта. Нажмите Run.

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

Вы также можете попробовать переустановить модули, используя:

pod deintegrate

а потом

pod install

Это исправило эту проблему для меня

Нажмите Ctrl +Option+Shift+K, а затем Запустите ваше приложение, вы увидите магию.

Или из меню -> Product, нажмите Option на клавиатуре, и вы увидите Clean Build Folder.

Забавно, что, как Xcode может делать такие вещи с нами, но со мной произошло то же самое, когда я использовал библиотеку Swift с помощью Pod, и после слишком большой борьбы я в итоге выбрал Clean Build Folder.

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

У нас есть приложение с несколькими внутренними библиотеками, и эти библиотеки также имеют зависимости друг от друга - что мы учитывали в Podfiles... но НЕ в podspecs.

Итак, хотя наши подфайлы имели:

Приложение / Подфайл

# Development Pods
pod 'ConsumingLibrary ', :path => '../ios-consuming-lib'
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'

ConsumingLibrary / Podfile

# Development Pods
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'

Необходимо также вызвать это в.podspec's:

ConsumingLibrary / ConsumingLibrary.podspec

  # TODO
  # Add here any resources to be exported.

  s.dependency 'DependentLibrary1', '~> 0.1.0-RC'

DependentLibrary1 / DependentLibrary1.podspec

  # TODO
  # Add here any resources to be exported.

  s.dependency 'CommonCoreLibrary', '~> 0.1.0-RC'

Я думаю, что я потратил около 2 часов, пытаясь выяснить, почему я мог создать ConsumingLibrary и запустить тесты, но как только я создал приложение, которое потребляло все три библиотеки - я продолжал получать:

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

В моем случае это было потому, что я открыл xcodeproj вместо правильного xcworkspace.

Была и эта проблема. Я заметил папку вPods/broken_framework_nameдля фреймворка, который выдал ошибку, был пуст даже после установки модуля или обновления модуля. Итак, мне помогли эти шаги:

  1. близко XCode полностью
  2. удалять DerivedData
  3. удалять Podfile.lock
  4. бегать pod deintegrate
  5. удалять .xcworkspace файл
  6. возможно необязательный шаг: у меня была генеральная линия use_frameworks! написано перед всеми целями, но включил его также в цель, в которой у меня была ошибка
  7. бегать pod install

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

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

Спасибо, Ратнешвар

Тем, кто работает с несколькими целями, не забудьте добавить эту строку в поды.

def shared_pods
    pod 'SSKeychain', '~> 0.1.4'
    pod 'INAppStoreWindow', :head
    pod 'AFNetworking', '1.1.0'
    pod 'Reachability', '~> 3.1.0'
    pod 'KSADNTwitterFormatter', '~> 0.1.0'
    pod 'MASShortcut', '~> 1.1'
    pod 'MagicalRecord', '2.1'
    pod 'MASPreferences', '~> 1.0'
end

target 'Target_Name' do
    shared_pods
end

target 'Target_Name_Two' do
    shared_pods
end

Иногда происходит, когда у вас есть модуль obj-c в быстром проекте (даже когда вы используете use_frameworks! в .podfile).

Если вы уверены, что модуль установлен и у вас все еще нет такого модуля, попробуйте это:

  • Перейти к проекту Pods в Xcode
  • Бобы
  • Щелкните правой кнопкой мыши на пострадавшем модуле
  • Показать в поисковике

Должен быть файл пакета с суффиксом .framework. Создайте в нем папку Modules. В этой папке создайте файл с именем module.modulemap с кодом:

framework module MODULE_NAME_HERE {
  umbrella header "MODULE_NAME_HERE.h"

  export *
  module * { export * }

  link framework LINKED_FRAMEWORKS_AND_LIBRARIES_THE_POD_NEEDS_HERE
  link framework "AdSupport"
  link "c++"
  link "z"
}

Восстановите, и вы должны быть в порядке.

Как писал @jakub-truhlář, основной проблемой является отсутствующий файл module.modulemap из-за некоторой проблемы параллелизма, связанной со смешиванием библиотек Swift и Objective-C, но вместо того, чтобы создавать эти файлы вручную, было бы лучше несколько раз очистить производные данные и построить свой проект. Когда проект будет успешно собран, передайте файлы module.modulemap в свой репозиторий, чтобы избежать потери этих файлов, например, при изменении текущей ветви.

я исправил это, установив флажок «Найти неявные зависимости» на true. Перейдите в «Редактировать схему» -> вкладка «Сборка» -> установите «Найти неявные зависимости» = true.

и восстановить.

Для меня удаление следующего из моегопочинил это:

            installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end

Я столкнулся с той же проблемой в быстрой среде, которую я разработал. У фреймворка была зависимость от git project, и сам фреймворк был добавлен в качестве модуля в мой основной проект. Таким образом, в идеале зависимость должна быть указана в файле podspec и Podfile.

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

Основная причина заключается в том, что базовые конфигурации задаются путем, который указывает на мой основной проект, а не на сам фреймворк, потому что я сначала запускал podinstall в своем основном проекте, а затем в проекте фреймворка.

Например: в файле проекта это было похоже на 0091AB0C861D71C94ADD7240 / * Pods-myframework.release.xcconfig * / = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-myframework.release.xcconfig"; path = "../../Apps/MyMainProject/Pods/Target Support Files / Pods-myframework / Pods-myframework.release.xcconfig"; sourceTree = ""; };

После выполнения указанного ниже исправления, 4444F5B1B35F066E57F96782 / * Pods-myframework.release.xcconfig * / = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-myframework.release.xcconfig"; path = "Pods / Целевые файлы поддержки / Pods-myframework / Pods-myframework.release.xcconfig"; sourceTree = ""; };

Чтобы исправить ошибку,

  1. Файл проекта -> Конфигурации -> Установите для всех конфигураций значение none.
  2. Удалить папку Pods и Podfile.lock.
  3. Сначала запустите 'pod install' в директории проекта фреймворка, а затем выполните установку pod в главном каталоге проекта.

Другой способ проявления этой проблемы: если у вас есть несколько целей с разными платформами (например, iOS и watchOS), вам необходимо убедиться, что ваш подфайл указывает правильную платформу для каждой цели. В противном случае Cocoapods может строить правильный модуль, но для неправильной платформы, что приведет к ошибке «Нет такого модуля».

Вы можете исправить это, просто указав правильные платформы, например

      # global platform
platform :ios, '11.0'

target 'My Framework' do
  use_frameworks!

  pod 'RxSwift', '~> 5.1'
end

target 'My Framework (watchOS)' do
  # override global platform for this target
  platform :watchos, '4.0'

  use_frameworks!

  pod 'RxSwift', '~> 5.1'
end

Я только что обновил определенные зависимости в терминале

Перейдите в папку проекта и выполните команду ниже

pod обновить имя вашего pod

Для меня мне нужно сделать

обновление пакета ReachabilitySwift

Я получаю предупреждение при установке модуля: '... target отменяет FRAMEWORK_SEARCH_PATHS настройка сборки определена в...'.

Исправьте и наслаждайтесь.

Ссылка: цель переопределяет настройки сборки FRAMEWORK_SEARCH_PATHS.

Добавление ссылки "C++" в фреймворк module.modulemap работает у меня

У меня была эта проблема, когда я открыл XCode, а затем выбрал рабочую область своего проекта через file->open недавний.

Я обнаружил, что в моей файловой системе было два файла.xcworkspace для одной рабочей области / проекта.

Открытие XCode двойным щелчком по правильному файлу.xcworkspace помогло. Правильный - тот, который работает.

Я позже удалил не тот.

Обязательно импортируйте правильное имя фреймворка, которое определено в .podspec капсулы.

Я обычно удаляю Pods папка и .xcworkspace файл, затем я бегу pod installснова, и это помогает почти в 100% случаев.

Моя установка

  • macOS 10.14 Mojave
  • Xcode 10.3
  • кокосы 1.7.5

Ни один из ответов не работает для меня, хотя некоторые дают частичные подсказки. В моем случае основная причина заключалась в том, что я настроил пути к продукту сборки после запускаpod install.

Если вы запускаете cocoapods сразу после создания проекта Xcode, он обычно работает, если вы открываете сгенерированный Xcode .xcworkspace вместо .xcodeproj.

Забавные вещи случаются, если вы начинаете настраивать пути продукта сборки после создания рабочей области. Поскольку сгенерированный проект Pods и его цель относятся к настройкам вашего старого проекта Xcode.

В моем случае моя проблема возникла из-за:

  • Я предпочитаю, чтобы все мои продукты сборки находились в папке проекта $(SRCROOT)/build/$(CONFIGURATION)/$(EFFECTIVE_PLATORM_NAME). Я пошел дальше и изменилPre-configuration Build Products Pathк нему.... ПОСЛЕ выполненияpod install.

Теперь сгенерированный Pods проект, включая всю его цель Framework, по-прежнему указывает на старое местоположение, поэтому как импорт заголовка, так и связывание вашего собственного проекта не удастся (вы увидите Command PhaseScriptExecution failed with a nonzero exit code когда No such module фиксированный).

Исправление:

  • Удалите все элементы Pods, включая рабочую область.
  • Регенерировать Pods проект и рабочее пространство с pod install. Однако cocoapods жестко запрограммировали путь продукта сборки к${SRCROOT}/../build а также Pre-configuration Build Products к $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) в моем случае, что обычно указывает на временный ~/Library/Developerподпапка. Все еще не совсем так. Затем....
  • Убедитесь, что Framework Search Path а также Header Search Path моего собственного проекта охватывают указанные выше пути.
  • Твик Pods настройки проекта и все структуры зависимостей Pre-configuration Build Products Path использовать мои предпочтительные пути.

Моральный урок: всегда регенерируйте модули и проверяйте ключевые пути результатов всякий раз, когда вы касаетесь путей в настройках проекта Xcode.

ОБНОВИТЬ

В Xcode 11 Apple наконец-то удалила запутанный "Путь к продуктам для предварительной конфигурации". Чтобы настроить пути продукта сборки, используйтеLocations в настройках Xcode с предварительно запеченными глобальными относительными путями.

Возникла эта проблема при добавлении CocoaPods в старый проект, который ранее уже включал библиотеки libs. Это произошло потому, что Xcode не разрешал Framework Search Path генерируется CocoaPods из-за значений, ранее установленных в настройках цели.

Решение, которое помогло мне:

  1. скопировать старый путь

  2. нажмите удалить, чтобы полностью очистить Framework Search Path настройки в столбце цели - там появится путь, сгенерированный CocoaPods

  3. добавить старый путь поиска обратно к сгенерированному (необходим только в том случае, если у вас еще есть несколько фреймворков, добавленных вручную, для работы)

  4. Очистить проект, стереть производные данные, собрать.

Результат будет выглядеть следующим образом (1-я строка добавлена ​​Xcode, 2-я добавлена ​​CocoaPods, а 3-я - вручную):

В случае нескольких целей. Например, Цель 1, Цель 2

use_frameworks!

target 'Target1' do
 pod 'Fabric'
 pod 'Crashlytics'

   target 'Target2' do
   end

end

Затем запустите pod install.

Если вы видите это предупреждение:

      [!] The `Joint [Debug]` target overrides the `FRAMEWORK_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods-Joint/Pods-Joint.debug.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The `Joint [Release]` target overrides the `FRAMEWORK_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods-Joint/Pods-Joint.release.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

следуйте инструкциям, чтобы избежать Module not foundпроблема.

Я перепробовал все эти предложения, но у меня ничего не получалось. Вместо этого, то, что работало для меня, было дезинтеграцией стручков. Затем удалите папку pods из иерархии xcode и выполните установку pod. Внезапно это сработало. Не спрашивайте меня, почему, потому что в любом случае большинство из этих предложений в любом случае попало или пропустили, но я буду рад, если это будет работать и для кого-то еще:)

  • чистый проект
  • закрыть xcode
  • открыть xcode
  • наслаждаться

Вы не можете собрать для macOS, если у вас есть

Вы можете попробовать изменить целевое устройство в Xcode (раскрывающееся меню схемы).

В моем случае мой Podfile специально ограничил платформу iOS, используя platform :ios, ‘9.0’, но я создавал приложение для macOS. Я знаю, это глупо, но я на время застрял .

Вам следует удалить эту строку, если ваш проект поддерживает macOS, или прекратить сборку / поддержку macOS.

Для использования Swift в Objective-C вы должны импортировать файл заголовка, который Xcode генерирует автоматически во время компиляции (NameOfModule+Swift.h). В этом случае вам следует попробовать импортировать SwifityJSON в заголовочный файл, например так:

#import "SwiftyJSON-Swift.h" 
Другие вопросы по тегам