Próbuję zbudować rozszerzenie aplikacji do zdjęć w Xcode 6 Beta-6, które korzysta z bibliotek cocoapods. Nagłówek mostkujący, który Xcode tworzy dla rozszerzenia zdjęć, nie widzi niczego z cocoapods.
Na przykład: #import <GPUImage/GPUImage.h>
powoduje błąd "GPUImage/GPUImage.h" file not found
.
Wypróbowałem każdą możliwą ścieżkę importu (z nawiasami kwadratowymi i cudzysłowami) i prawie bez powodzenia. Wyjątkiem jest to, że za proste jak strąki SVProgressHUD
, następujące brzydki straszny Hack działa:
#import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
.
Ale w przypadku GPUImage wchodzi do GPUImage.h
nagłówka i decyduje, że nagle nie widzi, GPUImageContext.h
mimo że nie ma problemu, gdy jest importowany z nagłówkiem mostkującym dla normalnego szybkiego kodu, który nie jest częścią rozszerzenia aplikacji.
Czym różni się kompilacja rozszerzeń aplikacji, która uniemożliwia prawidłowe zachowanie nagłówka mostkującego?
Uwaga: przeczytałem każdą możliwą permutację tego samouczka i nie ma ona natychmiastowego zastosowania, na wypadek gdyby ktoś pomyślał, że znalazł tam odpowiedź.
Ponadto problem opisany w tym pytaniu SO może być powiązany, ale i tak zadałem to pytanie na wypadek, gdyby mój problem dotyczył rozszerzeń aplikacji.
źródło
Odpowiedzi:
Właściwym sposobem na to jest zaktualizowanie pliku podfile, aby dodać tylko 1 linię:
a aktualizacja poda powinna rozwiązać problem.
źródło
Podfile
plik: [!] Specyfikacja plikulink_with
Podfile jest teraz nieobsługiwana, zamiast tego użyj bloków docelowych ..”link_with
w pliku Podfile nie jest teraz obsługiwana. Zamiast tego użyj bloków docelowych. To rozwiązanie jest przestarzałe.EDYCJA (2015/03/10)
Zobacz nową zaakceptowaną odpowiedź. Wypróbowałem to w nowym projekcie i zadziałało, chociaż moje pody testowe używały sharedApplication, co jest niedozwolone w rozszerzeniach. Fakt, że pokazali te błędy, oznacza, że jest prawidłowo połączony. Tak trzymaj @LeChatNoir!
Powodzenie.
Rozwiązanie jest następujące: gdy masz już rozszerzenie aplikacji i jest on połączony z nagłówkiem w projekcie używającym cocoapods i chcesz użyć jednej z tych bibliotek cocoapods, próba dołączenia kapsuły
#import <GPUImage/GPUImage.h>
się nie powiedziefile not found
.Najpierw upewnij się, że podałeś rozszerzenie aplikacji (kliknij plik projektu, a następnie cel rozszerzenia), z którym ma się łączyć
libPods.a
, podobnie jak cel aplikacji.Następnie w swoim aktualnym projekcie (kliknij plik projektu, a następnie ponownie plik projektu w sekcji „Projekt” na wewnętrznym pasku bocznym) na karcie Informacje ustaw konfigurację rozszerzenia Debug, Release i Inhouse do użycia konfigurację „Podów” z listy rozwijanej. Pod Install nie zrobi tego za Ciebie, więc będziesz musiał to zrobić samodzielnie.
Na koniec upewnij się, że zarówno cele projektu Pods, jak i cele projektu mają wszystkie architektury, dla których musisz zbudować w zmiennej Valid Architectures, w przeciwnym razie otrzymasz zawsze zabawny błąd niezdefiniowanych symboli.
To powinno działać i pozwala na importowanie strąków wyboru jak zwykle.
EDYCJA (2014/10/14): Na marginesie, ponieważ możesz również dołączać pliki Objective-C z własnego kodu projektu do rozszerzenia Swift, powinieneś upewnić się, że wszystkie
.m
pliki, które umieścisz w nagłówku mostkowania, są również skompilowane przez cel rozszerzenia. Możesz to zrobić z menu kompilacji źródeł dla celu lub w samym.m
pliku, używając sekcji „Członkostwo docelowe” na prawym pasku bocznym w Xcode.źródło
Powyższe odpowiedzi będą działać, ale chciałem mieć tylko kilka podów w moim rozszerzeniu, więc wykonałem następujące czynności w moim pliku Podfile:
target '[Main App Target Name]' do pod ... pod ... pod ... end target '[Extension Target Name]' do pod ... end
A potem
pod install
zrobi to!źródło
link_with
w Podfile jest teraz nieobsługiwana, zamiast tego użyj bloków docelowych ..link_with, nie będziesz go już używać.
Poniżej znajduje się idealna odpowiedź, również przetestowana.
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
źródło