Ответ 1
Правильный способ сделать это - обновить ваш файл, чтобы добавить только одну строку:
link_with 'yourApp', 'yourAppExtension'
и обновление пакета должно решить проблему.
Я пытаюсь создать приложение для расширения фотографий в Xcode 6 Beta-6, которое использует библиотеки cocoapods. Заголовок моста, который создает Xcode для расширения фотографии, не может видеть ничего из cocoapods.
Например: #import <GPUImage/GPUImage.h>
приводит к ошибке "GPUImage/GPUImage.h" file not found
.
Я пробовал все мыслимые пути для импорта (с скобками и цитатами) и почти не имел успеха. Исключением является то, что для простых стручков, таких как SVProgressHUD
, работает следующий уродливый ужасный хак:
#import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
.
Но для GPUImage он входит в заголовок GPUImage.h
и решает, что он внезапно не может видеть GPUImageContext.h
, несмотря на отсутствие проблемы, когда он импортируется с заголовком моста для обычного быстрого кода, который не является частью приложения расширение.
Чем отличается компиляция расширений приложений, которая предотвращает ведение корректного заголовочного заголовка?
Примечание: Я прочитал каждую возможную перестановку этот учебник, и это не сразу применимо, на всякий случай, если кто-то считает, что нашел ответ там.
Кроме того, проблема, описанная в этом SO-вопросе, может быть связана, но я задал этот вопрос в любом случае, если проблема связана с расширениями приложений.
Правильный способ сделать это - обновить ваш файл, чтобы добавить только одну строку:
link_with 'yourApp', 'yourAppExtension'
и обновление пакета должно решить проблему.
EDIT (2015/03/10)
См. новый принятый ответ. Я попробовал его в новом проекте, и он работал, хотя в моих тестовых модулях использовались sharedApplication, которые запрещены в расширениях. Тот факт, что они показали эти ошибки, означает, что он правильно связан. Путь к работе @LeChatNoir!
Success.
Решение таково:
После того, как у вас есть расширение для вашего приложения, и оно соединяет заголовок в проекте с использованием cocoapods, и вы хотите использовать одну из этих библиотек cocoapods, попытка включить pod, например #import <GPUImage/GPUImage.h>
, не будет работать с file not found
.
Во-первых, убедитесь, что вы указали расширение приложения (щелкните по файлу проекта, а затем на цели расширения), чтобы связать его с libPods.a
, что очень похоже на цель вашего приложения.
Затем в вашем фактическом проекте (щелкните файл проекта, затем в файле проекта снова в разделе "Проект" на внутренней боковой панели) на вкладке "Информация" задайте конфигурацию расширения для "Отладка, выпуск" и Inhouse использовать конфигурацию "Pods" из раскрывающегося списка. Pod Install не сделает этого для вас, поэтому вам нужно будет сделать это самостоятельно.
И наконец, убедитесь, что как цели проекта Pods, так и ваши цели проекта имеют все архитектуры, которые вам нужно построить для переменной Valid Architectures, или вы получите сообщение об ошибке undefined.
Это должно работать и позволять вам импортировать нужные вам контейнеры, как обычно.
EDIT (2014/10/14): В стороне, поскольку вы также можете включать Objective-C файлы из вашего собственного кода проекта в расширение Swift, вы должны убедиться, что все .m
файлы, которые вы вставляете заголовок моста также скомпилирован мишенью расширения. Вы можете либо сделать это из меню источников компиляции для цели, либо в самом файле .m
, используя раздел "Целевое членство" правой боковой панели в Xcode.
Вышеуказанные ответы будут работать, но я хотел только пару модулей в своем расширении, поэтому я сделал следующее для моего подфайла:
target '[Main App Target Name]' do
pod ...
pod ...
pod ...
end
target '[Extension Target Name]' do
pod ...
end
И тогда pod install
сделает это!
link_with, вы больше не будете его использовать.
Недопустимый
Podfile
файл: [!] Спецификацияlink_with
в Подфайл теперь не поддерживается, используйте вместо этого целевые блоки.
Ниже представлен идеальный answe, также проверенный.
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, ‘9.0’
use_frameworks!
inhibit_all_warnings!
target 'DemoTodayWidget' do
pod 'Reachability', '~> 3.2'
end
target 'My Widget' do
pod 'Reachability', '~> 3.2'
end