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

Чем отличается компиляция расширений приложения, которая препятствует нормальному поведению заголовка моста?

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

Кроме того, проблема, описанная в этом вопросе SO, может быть связана, но я все равно задал этот вопрос, если моя проблема связана с расширениями приложения.

4 ответа

Решение

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

link_with 'yourApp', 'yourAppExtension'

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

РЕДАКТИРОВАТЬ (2015/03/10)

Смотрите новый принятый ответ. Я попробовал это в новом проекте, и это сработало, хотя мои тестовые модули использовали sharedApplication, что запрещено в расширениях. Тот факт, что они показали эти ошибки, означает, что они правильно связаны. Путь @LeChatNoir!


Успех.

Решение заключается в следующем: как только у вас есть расширение приложения и связующий заголовок в проекте, использующем cocoapods, и вы хотите использовать одну из этих библиотек cocoapods, попробуйте включить такой модуль, как #import <GPUImage/GPUImage.h> потерпит неудачу с file not found,

Во-первых, убедитесь, что вы указываете расширение приложения (нажмите на файл проекта, затем на цель расширения) для связи с libPods.a, так же, как цель вашего приложения.

Затем, в вашем реальном проекте (щелкните файл проекта, затем снова файл проекта в разделе "Проект" внутренней боковой панели) на вкладке "Информация", задайте конфигурацию расширения для использования в Debug, Release и Inhouse. конфигурация "Бобы" из выпадающего списка. Pod Install не сделает этого за вас, поэтому вам придется сделать это самостоятельно.

Наконец, убедитесь, что у целей проекта Pods и целей вашего проекта есть все архитектуры, которые вы должны построить в переменной Valid Architectures, иначе вы получите постоянно забавную ошибку с неопределенными символами.

Это должно работать и позволит вам импортировать выбранные вами модули как обычно.


РЕДАКТИРОВАТЬ (2014/10/14): Кроме того, поскольку вы также можете включать файлы Objective-C из своего собственного кода проекта в расширение Swift, вы должны убедиться, что .m файлы, которые вы помещаете в заголовок моста, также компилируются целью расширения. Вы можете сделать это из меню источников компиляции для цели или в .m сам файл, используя раздел "Целевое членство" на правой боковой панели в XCode.

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

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

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

А потом pod install сделаю это!

link_with, вы больше не будете его использовать.

Недействительным Podfile file: [!] Спецификация link_with в Podfile теперь не поддерживается, используйте вместо этого целевые блоки..

Ниже приведен идеальный ответ, проверенный также.

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
Другие вопросы по тегам