Ответ 1
Попробуйте добавить Pods
каркас к вашей схеме сборки и построить каркас. После того, как вы его построите, соберите/запустите ваш проект.
Шаги:
Итак, вот моя процедура. Я создаю новый 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
. Любые идеи?
EDIT: SwiftyJSON - это модуль на основе Swift, а не Obj-C
Попробуйте добавить Pods
каркас к вашей схеме сборки и построить каркас. После того, как вы его построите, соберите/запустите ваш проект.
Шаги:
После установки podfile вы должны повторно открыть файл проекта .xcworkspace(а не .xcodeproj).
Счастливое кодирование:)
Вы также можете попробовать переустановить контейнеры, используя:
pod deintegrate
а затем
pod install
Это исправило эту проблему для меня
Нажмите Command + Option + Shift + K, а затем Запустите ваше приложение, вы увидите волшебство.
Или из меню → Продукт, нажмите Option на клавиатуре, и вы увидите папку Clean Build.
Интересно, как Xcode мог делать эти вещи с нами, но то же самое случилось со мной, когда я использовал библиотеку Swift, используя Pod, и после слишком большой борьбы я закончил с Clean Build Folder.
Не уверен, что это все равно будет полезно для других. Но в моем случае это оказалось глупой ошибкой в том, что они не ссылались на зависимости из файла .podspec.
У нас есть приложение с несколькими внутренними библиотеками, и эти библиотеки также имеют зависимости друг от друга, которые мы учитывали в подфайлах... но НЕ в podspecs.
Итак, хотя наши подфайлы имели:
Приложение/Подфайл
# Development Pods
pod 'ConsumingLibrary ', :path => '../ios-consuming-lib'
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'
Потребительская библиотека/Подфайл
# 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'
Попробуйте использовать pod update после команды pod install, что решит проблему отсутствия такого модуля. Я только что попробовал, и это работает нормально.
Спасибо, Ратнешвар
Как писал @jakub-truhlář, основной проблемой является отсутствующий файл module.modulemap из-за некоторой проблемы параллелизма, связанной со смешиванием библиотек Swift и Objective-C, но вместо того, чтобы создавать эти файлы вручную, было бы лучше несколько раз очистить производные данные и построить свой проект. Когда проект будет успешно собран, передайте файлы module.modulemap в свой репозиторий, чтобы избежать потери этих файлов, например, при изменении текущей ветки.
Иногда бывает, когда у вас есть объект obj-c в рамках проекта быстрый (даже если вы используете use_frameworks!
в .podfile
).
Если вы уверены, что модуль установлен, и вы все еще не получаете такой модуль, попробуйте следующее:
Должен быть файл пакета с суффиксом .framework. Создайте в нем папку. В этой папке создайте файл с именем 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"
}
Восстановить, и вы должны быть в порядке.
Я столкнулся с той же проблемой в быстрой среде, которую я разработал. У фреймворка была зависимость от git project, и сам фреймворк был добавлен в качестве модуля в мой основной проект. Таким образом, в идеале зависимость должна быть указана в файле podspec и Podfile.
Я не сталкивался с проблемой при доступе через мой основной проект, но при открытии автономного фреймворка выдает ошибку "Нет такого модуля".
Основная причина заключается в том, что базовые конфигурации задаются путем, который указывает на мой основной проект, а не на сам фреймворк, потому что я сначала запускал podinstall в своем основном проекте, а затем в проекте фреймворка.
};
};
Чтобы исправить ошибку,
Я только что обновил определенные зависимости в терминале
Перейдите в папку проекта и выполните команду ниже
pod обновить имя вашего pod
Для меня мне нужно сделать
обновление пакета ReachabilitySwift
Добавление ссылки "С++" в файл module.modulemap для меня работало
У меня была эта проблема, когда я открыл XCode, а затем выбрал рабочую область своего проекта через file-> открыть недавно.
Я обнаружил, что в моей файловой системе было два файла .xcworkspace для одной рабочей области/проекта.
Открытие XCode двойным щелчком по правильному файлу .xcworkspace помогло. Правильный - тот, который работает.
Я позже удалил не тот.
Возникла эта проблема при добавлении CocoaPods в старый проект, который ранее уже включал библиотеки libs. Это произошло потому, что XCode не преобразовывался в Framework Search Path
сгенерированный CocoaPods из-за значений, ранее установленных в целевых настройках.
Решение, которое помогло мне:
скопировать старый путь
нажмите "Удалить", чтобы полностью очистить параметры Framework Search Path
в целевом столбце - там появится путь, сгенерированный CocoaPods
добавить старый путь поиска обратно к сгенерированному (необходим только в том случае, если у вас еще есть несколько фреймворков, добавленных вручную для работы)
Очистить проект, стереть производные данные, собрать.
Результат будет выглядеть следующим образом (1-я строка добавлена Xcode, 2-я добавлена CocoaPods, а 3-я вручную):
В случае нескольких целей. Например, Цель 1, Цель 2
use_frameworks!
target 'Target1' do
pod 'Fabric'
pod 'Crashlytics'
target 'Target2' do
end
end
Затем запустите pod install.
Я перепробовал все эти предложения, но у меня ничего не получалось. Вместо этого, то, что работало для меня, было дезинтеграцией стручков. Затем удалите папку pods из иерархии xcode и выполните установку pod. Внезапно это сработало. Не спрашивайте меня, почему, потому что в любом случае большинство из этих предложений в любом случае попало или пропустили, но я буду рад, если это сработает и для кого-то еще :)
Убедитесь, что импортировано правильное имя фреймворка, определенное в .podspec
модуля.
Моя настройка
Ни один из ответов не работает для меня, хотя некоторые дали частичные подсказки. В моем случае основной причиной было то, что я настроил пути к моим продуктам сборки после запуска 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
и рабочее пространство с помощью 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
, чтобы использовать мои предпочтительные пути.Моральный урок: Всегда регенерируйте Pods и проверяйте ключевые пути результата всякий раз, когда вы касаетесь путей в настройках проекта Xcode.
UPDATE
С Xcode 11 Apple наконец-то удалила запутанный "Путь к продуктам предварительной конфигурации". Чтобы настроить пути продукта сборки, используйте Locations
в настройках XCode с предварительно подготовленными глобальными относительными путями.
Я обычно удаляю папку Pods
и файл .xcworkspace
, затем снова запускаю pod install
, и это помогает почти в 100% случаев.
Для использования Swift в Objective-C необходимо импортировать заголовочный файл, который Xcode автоматически генерирует во время компиляции (NameOfModule + Swift.h). В этом случае вы должны попробовать импортировать SwifityJSON в заголовочный файл следующим образом:
#import "SwiftyJSON-Swift.h"