it-roy-ru.com

"Нет такого модуля", когда я использую 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

54
Idris

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

Шаги:

  1. Меню Схема> Управление схемами> проверка Pods> Закрыть  manage

     enter image description here

  2. Выберите Pods в меню схемы.
  3. Сборка Pods.
  4. Выберите ваш проект из того же меню, затем соберите/запустите его.
76
Micah Benn

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

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

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

15
Asil ARSLAN

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

pod deintegrate

а потом

pod install

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

14
Vishal

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

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

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

14
Yash Vyas

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

Спасибо, Ratneshwar

5
Ratneshwar Singh

Не уверен, что это все еще будет полезно для других. Но в моем случае это оказалось глупой ошибкой не ссылаться на зависимости из файла .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'

5
LowAmmo

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

2
samuperry

Я столкнулся с той же проблемой в разработанной мной среде Swift. У фреймворка была зависимость от 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"; путь = "Pods/Целевые файлы поддержки/Pods-myframework/Pods-myframework.release.xcconfig" ; sourceTree = ""; };

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

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

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

0
Andrej Jaššo

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

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

обновить имя вашего модуля

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

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

0
karthikeyan

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

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

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

Должен быть файл пакета с суффиксом .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"
}

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

0
Jakub Truhlář

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

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

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

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

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

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

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

0
Vitalii

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

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

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

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

0
Gerd Castan

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

0
user2029995

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

use_frameworks!

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

   target 'Target2' do
   end

end

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

0
Yogendra Singh