Użyj Cocoapods z rozszerzeniem aplikacji
Próbuję zbudować rozszerzenie photo App w Xcode 6 Beta-6, które wykorzystuje biblioteki cocoapods. Nagłówek mostkowy, który Xcode tworzy dla rozszerzenia zdjęć, nie widzi nic z cocoapods.
Na przykład: #import <GPUImage/GPUImage.h>
powoduje błąd "GPUImage/GPUImage.h" file not found
.
Próbowałem wszystkich możliwych ścieżek importu (z nawiasami i cudzysłowami) i prawie bez powodzenia. Wyjątkiem jest to, że dla prostych strąków, takich jak SVProgressHUD
, działa następujący brzydki straszny hack:
#import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
.
Ale dla GPUImage, wchodzi do nagłówka GPUImage.h
i decyduje, że nagle nie widzi GPUImageContext.h
, mimo że nie ma problemu, gdy jest importowany z nagłówkiem pomostowym dla normalnego kodu swift, który nie jest częścią rozszerzenia aplikacji.
Czym różni się kompilacja rozszerzeń aplikacji, która uniemożliwia prawidłowe zachowanie nagłówka pomostowego?
Uwaga: Przeczytałem każdą możliwą permutację tego tutoriala i nie jest on od razu stosowany, tylko na wypadek, gdyby ktoś pomyślał znaleźli tam odpowiedź.
Również problem opisany w to pytanie so może być związane, ale i tak zadałem to pytanie w przypadku, gdy mój problem jest specyficzny dla rozszerzeń aplikacji.
4 answers
Właściwym sposobem na to jest zaktualizowanie podfile, aby dodać tylko 1 wiersz:
link_with 'yourApp', 'yourAppExtension'
I Aktualizacja pod powinna rozwiązać problem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-14 21:18:52
Edytuj (2015/03/10)
Zobacz nową zaakceptowaną odpowiedź. Wypróbowałem go w nowym projekcie i zadziałało, chociaż moje pods testowe używały sharedApplication, które jest niedozwolone w rozszerzeniach. To, że pokazali te błędy, oznacza, że prawidłowo się połączyły. Brawo @ LeChatNoir!
Sukces.
Rozwiązanie jest następujące:
Gdy masz rozszerzenie aplikacji i jest to mostkowanie nagłówka w projekcie za pomocą cocoapods i chcesz użyć jednej z tych bibliotek cocoapods, próba włączenia pod like #import <GPUImage/GPUImage.h>
zakończy się niepowodzeniem z file not found
.
Najpierw upewnij się, że mówisz rozszerzenie aplikacji (kliknij plik projektu, a następnie na docelowym rozszerzeniu), aby połączyć się z libPods.a
, podobnie jak cel aplikacji.
Następnie w aktualnym projekcie (kliknij na plik projektu, a następnie ponownie na plik projektu w sekcji "projekt" na wewnętrznym pasku bocznym) w zakładce Informacje Ustaw konfigurację rozszerzenia dla debugowania, Wydania i Inhouse, aby użyć konfiguracji "Pods" z listy rozwijanej. Pod Install nie zrobi tego za ciebie, więc musisz to zrobić sam.
Na koniec upewnij się, że zarówno cele projektu Pods, jak i cele twojego projektu mają wszystkie architektury, dla których musisz zbudować w zmiennej Valid Architectures, w przeciwnym razie pojawi się błąd niezdefiniowanych symboli.
To powinno działać i pozwalać na import wybranych strąków jak zwykle.
EDIT (2014/10/14): na marginesie, ponieważ możesz być również włączając Pliki Objective-C z własnego kodu projektu w rozszerzeniu Swift, powinieneś upewnić się, że wszystkie pliki .m
umieszczone w nagłówku pomostowym są również kompilowane przez rozszerzenie target. Możesz to zrobić z menu skompiluj źródła dla celu lub w pliku .m
, używając sekcji "Target Membership" na prawym pasku bocznym w Xcode.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-10 22:00:41
Powyĺźsze odpowiedzi bÄ ™ dÄ ... dziaĹ ' aĹ 'y, ale chciaĹ' em tylko kilka pods w moim rozszerzeniu, wiÄ ™ c wykonaĹ ' em nastÄ ™ pujÄ ... ce dla mojego Podfile:
target '[Main App Target Name]' do
pod ...
pod ...
pod ...
end
target '[Extension Target Name]' do
pod ...
end
I wtedy pod install
zrobi to!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-13 13:08:37
Link_with, nie będziesz już z niego korzystać.
Invalid
Podfile
file: [!] Specyfikacjalink_with
w Plik Podfile jest teraz nieobsługiwany..
Poniżej jest idealne answe, Przetestowane również.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 08:04:39