Ich versuche, meine eigene Kopie von Apples Security.framework zu kompilieren, insbesondere Version 55471.14.18, die in OS X 10.9.5 enthalten war und deren Quellcode von https://opensource.apple.com/tarballs/Security heruntergeladen werden kann /Security-55471.14.18.tar.gz .
Ich verwende eine Kopie von Mac OS X 10.9.5 in einer VM. Xcode 6.2 wurde installiert und xcode-select --install
separat ausgeführt, um Systemheader zu erfassen.
Die Readme-Datei, die im Quelldownload enthalten ist, sagt:
Um dieses Projekt in einer Darwin-Umgebung zu erstellen (im Gegensatz zum internen Erstellen bei Apple), verwenden Sie den Darwin-Buildstil. Wenn Sie mit Xcode erstellen, wählen Sie „Darwin“ aus dem Popup „Active Build Style“. Wenn Sie über die Befehlszeile erstellen, geben Sie den Build-Stil wie folgt an:
% xcodebuild -buildstyle Darwin installieren
Aber wenn ich den angegebenen Befehl ausführe, wird mir gesagt:
xcodebuild: error: option '-buildstyle' is no longer supported
Da meine Kopie von Xcode zum Zeitpunkt der Veröffentlichung dieses Codes aktuell war, bin ich mir nicht sicher, was ich von diesem Fehler halten soll. Ich beschloss, es zu ignorieren und nur mit einem Standardbefehl weiterzumachen xcodebuild
.
Das erste Problem, auf das ich stieß, war leicht zu beheben, macht mir aber Sorgen, dass ich etwas Größeres übersehe. Der Compiler beschwert sich:
/Users/Jonathan/Desktop/Security-55471.14.18/libsecurity_utilities/lib/macho++.cpp:39:18: error:
unused variable 'MAX_ARCH_COUNT' [-Werror,-Wunused-const-variable]
static const int MAX_ARCH_COUNT = 100;
Da die Variable angeblich sowieso unbenutzt ist, habe ich die Datei einfach geöffnet und die Zeile auskommentiert static const int MAX_ARCH_COUNT = 100;
.
Leider bin ich hier gegen eine Mauer gelaufen. Xcodebuild scheint alle Arten von Headern zu wollen, die nicht auf meinem System oder im Projekt enthalten sind. Zum Beispiel:
/Users/Jonathan/Desktop/Security-55471.14.18/libsecurity_utilities/lib/mach++.cpp:33:10: fatal error:
'bootstrap_priv.h' file not found
#include <bootstrap_priv.h>
Diese Header sind ebenfalls Open Source und ich weiß, wo ich sie finden kann! Bootstrap_priv.h ist beispielsweise Teil von launchd; die OS X 10.9.5-Version kann von https://opensource.apple.com/tarballs/launchd/launchd-842.92.1.tar.gz heruntergeladen werden
Ich verstehe jedoch nicht, wo ich diese Header platzieren soll, damit der Compiler sie finden kann! Dinge, die ich versucht habe:
Dieser letzte Versuch hat mich tatsächlich dazu gebracht, den Fehler zu überwinden (und den nächsten fehlenden Header zu sehen, IOPMLibPrivate.h
), aber ich bin mir ziemlich sicher, dass es nicht das ist, was ich tun sollte! Während ich immer wieder Header an zufälligen Stellen innerhalb des Projekts hinzufüge, bleiben andere Quelldateien hängen und finden Header, die ich bereits an anderer Stelle kopiert habe. Einige der Header selbst bleiben auf diese Weise hängen und erwarten einen anderen relativen Pfad für Abhängigkeiten als den, den das Hauptprojekt zu benötigen scheint.
Ich fühle mich hier extrem überfordert! Wohin sollen diese Header-Dateien eigentlich gehen, und was bedeutet diese -buildstyle
Option, die ich einschließen soll, die aber nicht ausgeführt werden kann? Nichts davon scheint irgendwo dokumentiert zu sein!
Das war am Ende viel komplizierter, als ich denke, dass es zu Recht in das Q&A-Format dieser Seite passt. Trotzdem wollte ich diese Frage nicht offen lassen, da ich irgendwie das Framework zum Bauen bekommen habe.
Dieses Repository sollte vollständig in 10.9.5 erstellt werden, wobei die neueste kompatible Version von xCode ausgeführt wird und das 10.9 SDK verwendet wird. https://github.com/Wowfunhappy/Wowfunhappy-Mavericks-Security-Framework
Ich habe die "User Framework-Suchpfade" verwendet, um Bibliotheken hinzuzufügen, aber da es sich um einen absoluten und nicht um einen relativen Pfad handelt, müssen Sie ihn möglicherweise auf Ihrem Computer aktualisieren. Dies sollte trivial sein, auch wenn es etwas mühsam ist – alle eigentlichen Frameworks sind im Git-Repository enthalten. Diese Frameworks stammen aus einer Kombination aus opensource.apple.com (wo immer verfügbar, aus offensichtlichen Gründen bevorzugt), dem rückentwickelten privaten SDK von samdmarshall und dem Darling-Projekt.
Das eingebaute Framework scheint nicht wirklich zu funktionieren – wenn ich es auf meiner Festplatte ersetze, kann der Computer (glücklicherweise eine VM) nicht mehr booten. Ich hatte ursprünglich erwartet, dass dies ein Code-Signatur-Problem ist, aber es sieht nicht so aus, als wäre das das Problem. Aber trotzdem baute es!
tl;dr Ich habe kein dummes Versehen gemacht, Apples Open-Source-Versionen sind im Grunde unmöglich ohne zusätzliches Reverse Engineering zu erstellen. Glücklicherweise wurde diese Reverse-Engineering-Arbeit größtenteils von verschiedenen Projekten durchgeführt, aber anscheinend nicht bis zu dem Punkt, an dem Sie etwas bauen können, das tatsächlich funktioniert.
SecureTransport
und dann wieder etwas zu exportieren, damit die Symbole in Ihrem die im Security.framework des Systems überschreibenNSURLConnection
, swizzle Sie das mit Ihrer eigenen Implementierung, die Ihr eigenes openssl verwendet.
Wowfunhappy
mmmmmm
Anki
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/chrono
, das könnte einen Versuch wert sein. Es gibt auch diese Möglichkeit, dem Compiler Include-Pfade hinzuzufügen: stackoverflow.com/questions/5846804/… aber all dies scheint nicht zum Thema zu gehören und gut für Stackoverflow zu seinmmmmmm
1110101001
1110101001
Wowfunhappy
Wowfunhappy
1110101001
1110101001