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