Ich versuche, eine Foto-App-Erweiterung in Xcode 6 Beta-6 zu erstellen, die Cocoapods-Bibliotheken verwendet. Der Bridging-Header, den Xcode für die Fotoerweiterung erstellt, kann nichts von Cocoapods sehen.
Zum Beispiel: #import <GPUImage/GPUImage.h>
führt zu dem Fehler "GPUImage/GPUImage.h" file not found
.
Ich habe jeden erdenklichen Weg für den Import ausprobiert (mit Klammern und Anführungszeichen) und hatte fast keinen Erfolg. Die Ausnahme ist, dass für einfache Pods wie SVProgressHUD
der folgende hässliche schreckliche Hack funktioniert :
#import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
.
Für GPUImage wird jedoch der GPUImage.h
Header aufgerufen und es wird plötzlich nicht mehr angezeigt, GPUImageContext.h
obwohl beim Importieren mit dem Bridging-Header für den normalen schnellen Code, der nicht Teil der App-Erweiterung ist, kein Problem auftritt .
Was ist anders an der Kompilierung von App-Erweiterungen, die verhindert, dass sich der Bridging-Header ordnungsgemäß verhält?
Hinweis: Ich habe alle möglichen Permutationen dieses Tutorials gelesen und es ist nicht sofort anwendbar, nur für den Fall, dass jemand glaubt, die Antwort dort gefunden zu haben.
Das in dieser SO-Frage beschriebene Problem kann auch verwandt sein, aber ich habe diese Frage trotzdem gestellt, falls mein Problem spezifisch für App-Erweiterungen ist.
quelle
Antworten:
Der richtige Weg, dies zu tun, besteht darin, Ihre Poddatei zu aktualisieren, um nur eine Zeile hinzuzufügen:
und ein Pod-Update sollte das Problem beheben.
quelle
Podfile
Datei: [!] Die Angabelink_with
in der Pod-Datei wird jetzt nicht unterstützt, bitte verwenden Sie stattdessen Zielblöcke .."link_with
im Podfile wird jetzt nicht mehr unterstützt. Verwenden Sie stattdessen Zielblöcke. Diese Lösung ist veraltet.BEARBEITEN (10.03.2015)
Siehe neue akzeptierte Antwort. Ich habe es in einem neuen Projekt versucht und es hat funktioniert, obwohl meine Test-Pods beide sharedApplication verwendeten, was in Erweiterungen nicht zulässig ist. Die Tatsache, dass sie diese Fehler zeigten, bedeutet, dass sie richtig verknüpft sind. Weiter so @LeChatNoir!
Erfolg.
Die Lösung lautet wie folgt: Sobald Sie Ihre App-Erweiterung und den Bridging-Header in einem Projekt mit Cocoapods haben und eine dieser Cocoapods-Bibliotheken verwenden möchten, schlägt der Versuch, den Pod wie einzuschließen,
#import <GPUImage/GPUImage.h>
fehlfile not found
.Stellen Sie zunächst sicher, dass Sie die App-Erweiterung (klicken Sie auf Ihre Projektdatei und dann auf das Erweiterungsziel) anweisen
libPods.a
, mit der sie verknüpfen soll , ähnlich wie bei Ihrem App-Ziel.Legen Sie als Nächstes in Ihrem eigentlichen Projekt (klicken Sie auf Ihre Projektdatei und dann erneut auf die Projektdatei im Abschnitt "Projekt" der inneren Seitenleiste) auf der Registerkarte "Info" die Konfiguration der Erweiterung für Debug, Release und Inhouse fest die "Pods" -Konfiguration aus der Dropdown-Liste. Pod Install erledigt dies nicht für Sie, daher müssen Sie es selbst tun.
Stellen Sie schließlich sicher, dass sowohl die Pods-Projektziele als auch die Ziele Ihres Projekts alle Architekturen enthalten, für die Sie in der Variablen Valid Architectures erstellen müssen. Andernfalls wird der immer wieder auftretende Fehler mit undefinierten Symbolen angezeigt.
Dies sollte funktionieren und es Ihnen ermöglichen, die Pods Ihrer Wahl wie gewohnt zu importieren.
BEARBEITEN (14.10.2014): Abgesehen davon sollten Sie sicherstellen, dass alle
.m
Dateien, die Sie in den Bridging-Header einfügen, auch kompiliert werden , da Sie möglicherweise auch Objective-C-Dateien aus Ihrem eigenen Projektcode in die Swift-Erweiterung aufnehmen durch das Erweiterungsziel. Sie können dies entweder über das Menü zum Kompilieren von Quellen für das Ziel oder in der.m
Datei selbst über den Abschnitt "Zielmitgliedschaft" in der rechten Seitenleiste von Xcode tun .quelle
Die obigen Antworten werden funktionieren, aber ich wollte nur ein paar Pods in meiner Erweiterung, also habe ich Folgendes mit meinem Podfile gemacht:
Und dann
pod install
wird es ein Wille tun!quelle
link_with
in der Pod-Datei wird jetzt nicht mehr unterstützt. Bitte verwenden Sie stattdessenlink_with, du wirst es nicht mehr benutzen.
Unten ist die perfekte Antwort, die auch getestet wurde.
quelle