2009-10-25 8 views
21

Ich bin ein XCode-Neuling. Ich versuche zu folgen these instructions. Offensichtlich fehlt mir etwas, denn während ich sehen kann, dass das Framework, das ich möchte, in das App-Paket kopiert wurde, kann ich nicht darauf verweisen.Bundle-Framework mit Anwendung in XCode

Wenn ich starten Sie die Anwendung von einer anderen Maschine als Mine (oder wenn ich entfernen OpenCV aus/Library/Frameworks /) bekomme ich die folgende Fehlermeldung:

Dyld Error Message: Library not loaded: /Users/david/Library/Frameworks/OpenCV.framework/Versions/A/OpenCV Referenced from: /Users/g/Demo/Slates/ClipSplitter/build/Release/ClipSplitter.app/Contents/MacOS/ClipSplitter Reason: image not found

Es gibt keinen Benutzer „David“ auf meinem System, wenn das einen Unterschied macht. Dies ist auch ein vorgefertigter OpenCV, der aus dem Internet heruntergeladen wurde. (Here’s a screenshot of the project wie in den Kommentaren angefordert.)

+0

Wo ist es im App-Bundle? –

+0

Inhalt/Frameworks/OpenCV.Framework –

+0

Ich würde sagen, einen Screenshot Ihres Projektfensters mit dem relevanten Ziel vollständig erweitert. –

Antwort

29

Wenn das OpenCV.framework erstellt wurde, wurde es konfiguriert, einen Installationspfad von /Users/david/Library/Frameworks/ zu verwenden.

Da Sie die Bibliothek als privates Framework verwenden möchten (installiert im Anwendungswrapper unter ClipSplitter.app/Contents/Frameworks/OpenCV.framework), müssen Sie ihren Installationspfad ändern. Dies kann einfach über das Terminal wie folgt durchgeführt werden:

Natürlich müssen Sie den Pfad des letzten Arguments anpassen.

Jetzt, wenn Sie Ihre Anwendung verknüpfen, teilt Ihr modifiziertes Framework dem Linker mit, dass dyld im App Wrapper Ihrer Anwendung nach dem OpenCV.framework suchen muss (im Verzeichnis ClipSplitter.app/Contents/Frameworks).

Jetzt müssen Sie die OpenCV.framework in Ihre Anwendung Wrapper kopieren. Sie können dies als Teil Ihres Build-Prozesses tun, indem Sie eine Buildphase für Copy-Dateien hinzufügen: Klicken Sie mit der rechten Maustaste auf Ihr Ziel und wählen Sie Hinzufügen-> Neue Build-Phase-> Neue Build-Phase für Kopierdateien. Wählen Sie "Frameworks" aus dem Popup "Ziel" und schließen Sie den Dialog.

Ihr Ziel enthält jetzt eine neue Phase, zu der Sie das OpenCV.framework hinzufügen können, indem Sie das Symbol aus dem Projektnavigator auf der linken Seite des Xcode-Fensters ziehen. Beachten Sie, dass Xcode Ihnen nicht erlaubt, der Phase "Copy Files" einen Ordner hinzuzufügen, indem Sie die Schaltfläche "+" verwenden. Um das Framework zu kopieren, ziehen Sie es einfach mit der Maus &.

+2

Das war fast völlig richtig. Der Befehl, den ich eigentlich ausführen musste, war: $ install_name_tool -id @executable_path /../ Frameworks/OpenCV.framework/OpenCV /OpenCV.framework/OpenCV aber das war mehr als genug, um mich dorthin zu bringen. Vielen Dank!!!! –

+0

Hoppla, richtig. Das passiert, wenn Sie nicht versuchen, was Sie tippen. Entschuldigung für die Verwirrung. –

+0

Wenn Sie mehr als ein Framework für den Installationspfad installieren _das aufeinander angewiesen ist, wird dies jedoch nicht funktionieren. Sie müssen außerdem den Pfad für den Suchpfad in Ihrer xcode-Anwendung festlegen, um in @ loader_path /../ Frameworks zu suchen. Ich fand diese Erklärung sehr hilfreich: http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/ – NHDaly

6

Sie müssen den Build setzen "Installationsverzeichnis" zu @executable_path/../Frameworks

finden Sie im Kapitel über Einbetten eines privaten Rahmen in Ihrer Anwendung Bundle in https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html

Grüße

+3

Sie sollten mindestens erwähnen, dass diese Einstellung beim Erstellen des Frameworks angewendet werden muss, nicht die Anwendung, die das Framework verbindet. –

+0

Ja, ich bin mir sicher, dass dies ein guter Rat ist, außer dass ich das OpenCV-Framework nicht erstellt habe, ich habe es vorab heruntergeladen. –

+1

Ich habe den letzten Satz verpasst, Nikolais Antwort ist in diesem Fall passender. Ich bin mir nicht sicher, warum Sie lieber defekte vorgefertigte Open-Source-Bibliotheken reparieren, anstatt sie richtig zu bauen. –

2

Mit Xcode 5, Einstellung können Sie Erleichtern Sie dies mit dem Build Phases Panel Ihres Anwendungsziels.

Die Standarddarstellung dieses Panels

die Taste „+“ unter Kopieren von Dateien Durch Drücken ist, können Sie Ihren Rahmen als Datei hinzufügen, die in Frameworks in Ihrem App-Bundle kopiert werden.

Jetzt, wenn Sie erstellen, werden Ihre Framework (s) in Ihr Bundle kopiert.

+1

Bilder sind tot. Erneut hochladen? – pkamb

Verwandte Themen