Используйте 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 ответа:
правильный способ сделать это-обновить свой подфайл, чтобы добавить только 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
сделаем это!
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