Я пытаюсь скомпилировать собственную копию Apple Security.framework, в частности версии 55471.14.18, которая была включена в OS X 10.9.5 и исходный код которой можно загрузить с https://opensource.apple.com/tarballs/Security . /Безопасность-55471.14.18.tar.gz .
Я использую копию Mac OS X 10.9.5 на виртуальной машине. Xcode 6.2 был установлен и xcode-select --install
отдельно запущен для получения системных заголовков.
В файле readme, включенном в исходную загрузку, говорится:
Чтобы построить этот проект в среде Darwin (в отличие от сборки собственными силами в Apple), используйте стиль сборки Darwin. Если вы строите с помощью Xcode, выберите «Darwin» во всплывающем окне «Активный стиль сборки». Если вы строите из командной строки, укажите стиль сборки следующим образом:
% xcodebuild -buildstyle установка Дарвина
Но когда я запускаю данную команду, мне говорят:
xcodebuild: error: option '-buildstyle' is no longer supported
Поскольку моя копия Xcode была актуальной на момент выпуска этого кода, я не уверен, что делать с этой ошибкой. Я решил проигнорировать это и продолжить с помощью стандартной xcodebuild
команды.
Первую проблему, с которой я столкнулся, было легко исправить, но я беспокоюсь, что упускаю что-то большее. Компилятор жалуется:
/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;
Поскольку переменная, как сообщается, в любом случае не используется, я просто открыл файл и закомментировал строку static const int MAX_ARCH_COUNT = 100;
.
К сожалению, здесь я столкнулся с кирпичной стеной. Xcodebuild, похоже, хочет использовать всевозможные заголовки, которых нет в моей системе или которые включены в проект. Например:
/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>
Эти заголовки тоже с открытым исходным кодом, и я знаю, где их найти! Bootstrap_priv.h, например, является частью launchd; версию OS X 10.9.5 можно загрузить с https://opensource.apple.com/tarballs/launchd/launchd-842.92.1.tar.gz .
Однако я не понимаю, куда я должен поместить эти заголовки, чтобы компилятор их нашел! Что я пробовал:
Эта последняя попытка действительно позволила мне обойти ошибку (и увидеть следующий отсутствующий заголовок IOPMLibPrivate.h
), но я совершенно уверен, что это не то, что я должен делать! Поскольку я продолжаю добавлять заголовки в случайные места в проекте, другие исходные файлы застревают, обнаруживая заголовки, которые я уже скопировал в другом месте. Некоторые из самих заголовков застревают таким образом, ожидая другого относительного пути для зависимостей, чем тот, который, по-видимому, нужен основному проекту.
Я чувствую себя здесь крайне не в своей тарелке! Куда на самом деле должны идти эти файлы заголовков, и что означает эта -buildstyle
опция, которую я должен включить, но которую нельзя запустить? Ничего из этого нигде не задокументировано!
Это оказалось намного сложнее, чем, я думаю, правильно подходит для формата вопросов и ответов на этом сайте. Тем не менее, я не хотел оставлять этот вопрос висящим, так как я получил структуру для создания, своего рода.
Этот репозиторий должен быть полностью собран в 10.9.5 с последней совместимой версией xCode и с использованием SDK 10.9. https://github.com/Wowfunhappy/Wowfunhappy-Mavericks-Security-Framework
Я использовал «Пути поиска пользовательской платформы» для добавления библиотек, но, поскольку это абсолютный, а не относительный путь, вам может потребоваться обновить его на вашем компьютере. Это должно быть тривиально, даже если это немного утомительно — все актуальные фреймворки включены в репозиторий Git. Эти фреймворки представляют собой комбинацию opensource.apple.com (предпочтительнее везде, где доступно по понятным причинам), реконструированного частного SDK samdmarshall и проекта Darling.
Созданный Framework, похоже, на самом деле не работает — замена его на моем жестком диске приводит к тому, что компьютер (к счастью, виртуальная машина) не может загружаться. Сначала я ожидал, что это будет проблема с подписью кода, но похоже, что проблема не в этом. Но, тем не менее, построил!
tl; dr Я не делал какой-то глупой оплошности, выпуски Apple с открытым исходным кодом практически невозможно построить без дополнительного реверс-инжиниринга. К счастью, эта работа по обратному инжинирингу в значительной степени была проделана различными проектами, но, по-видимому, не до такой степени, чтобы вы могли создать что-то, что действительно работает.
SecureTransport
а затем выполнить некоторую магию повторного экспорта, чтобы символы в вашем коде переопределяли символы в системном Security.framework.NSURLConnection
, вы используете свою собственную реализацию, которая использует ваш собственный openssl.
Вауфансчастливый
мммммм
анки
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/chrono
таком состоянии, что стоит попробовать. Также есть способ добавить включаемые пути к компилятору: stackoverflow.com/questions/5846804/… но все это кажется не по теме и подходит для stackoverflowмммммм
1110101001
1110101001
Вауфансчастливый
Вауфансчастливый
1110101001
1110101001