Подтвердить что ты не робот

Использование Cocoapods с расширением приложения

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

4b9b3361

Ответ 1

Правильный способ сделать это - обновить ваш файл, чтобы добавить только одну строку:

link_with 'yourApp', 'yourAppExtension'

и обновление пакета должно решить проблему.

Ответ 2

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.

Ответ 3

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

target '[Main App Target Name]' do
        pod ...
        pod ...
        pod ...
end

target '[Extension Target Name]' do
        pod ...
end

И тогда pod install сделает это!

Ответ 4

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

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