Используйте 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 79

4 ответа:

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

link_with 'yourApp', 'yourAppExtension'

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

EDIT (2015/03/10)

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


успехов.

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

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

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

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

этой должны работа и позволяет импортировать модули по вашему выбору, как нормальный.


EDIT (2014/10/14): в стороне, поскольку вы также можете включать файлы Objective-C из своего собственного кода проекта в расширение Swift, вы должны убедиться, что любой .m файлы, которые вы помещаете в заголовок моста, также компилируются целью расширения. Вы можете сделать это либо из меню compile sources для цели, либо в .m сам файл, используя раздел "целевое членство" правой боковой панели в Xcode.

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

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

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

и pod install сделаем это!

enter image description here

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

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

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

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