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.

Author: Cœur, 2014-08-28

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.

 66
Author: LeChatNoir,
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.

 85
Author: DanBlakemore,
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!

 65
Author: wyzkid207,
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

Tutaj wpisz opis obrazka

Link_with, nie będziesz już z niego korzystać.

Invalid Podfile file: [!] Specyfikacja link_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
 0
Author: Mehul,
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