Pull to refresh

Comments 6

Э, все равно не улавливаю смысл. Для компиляции Mac приложения тоже ведь нужна macOS? Например ч пишу на FPC и он компилирует под Мак только на Мак. Логично здесь же и подписать и нотаризовать.

Формат Mach-O достаточно хорошо документирован, а инструменты для работы с ним опенсорсные и кроссплатформенные. Для сборки под macos/ios нужны файлы из SDK, который можно легко вытащить из xcode, но в остальном, если не использовать interface-builder, то ничего не мешает собирать код на других платформах. Если писать на go/rust, это уже работает из коробки, если писать на C/C++/Objective-C/Objective-C++, то с использованием llvm это потребует каких-то усилий на настройку, но в принципе тоже реализуемо.

Плюс есть особые кейсы вроде игровых движков, когда создатель движка собирает код движка в бинарник, а для сборки игры нужно просто сложить вместе бинарники движка и архивы со скриптами и прочими ресурсами. А потом подписать. Например так устроена сборка игр на defold. Инструмент сборки там отлично справляется над тем, чтобы собрать приложение под mac на linux. А вот под ios отказывается, так как хочет работать с подписью.

В свое время MarmaladeSDK компилировал бинарники под процессор (х86, арм, мипс), а потом линковал с загрузчиком, подписывал и собирал всё (бинарники и ресурсы) в приложение. Собственно поэтому там были портированы маковские ld и codesign.

Это позволяло делать всё на Вин, включая и разработку и деплой (айтюнс есть под винду, можно даже залить приложение прямо оттуда, а если в режиме разработчика - то и просто самоподписанное)

Есть один неочевидный сценарий, при котором сборка приложения и его подпись должны явно разделяться на 2 этапа: брендированная версия вашего (коммерческого и закрытого) приложения для других компаний. Вы по договору не должны делиться кодом с этими компаниями, только предоставлять готовые бинари, а они не хотят давать вам свои сертификаты для подписи.

Проблема тут в том, что процесс создания конечного приложения выглядит так: компиляция кода в бинарники -> подпись -> упаковка в dmg/pkg (а на винде - ещё и повторная подпись результирующего exe файла инсталлера). Можно, конечно, просто собрать бинарники и отдать архив с ними с чистой совестью, пусть пакуют как хотят, нооо это только в идеальном мире. В реальной жизни заказчику нужно готовое приложение "под ключ", и его не волнуют все эти технарские термины вроде CI/CD.

Поэтому иногда приходится делать следующие костыли: собираем на своих машинах -> аплоадим заказчику на закрытый сервер, где оно автоматически подписывается -> принимаем в ответ подписанные бинари и пакуем их в инсталлер. И вот тут уже было бы очень полезно иметь независимые инструменты подписи, чтобы не обязывать заказчика иметь мак на принимающей стороне. Понятно, что компании, у которых есть деньги на брендированное приложение, скорее всего имеют возможность купить себе отдельный мак для подписи бинарников раз в месяц, но тем не менее.

UFO just landed and posted this here

Вот не скажу про графику, а консольные вполне успешно собираются без мака.

llvm долгое время не умел линковать Mach-O, но это постепенно допилили (и даже когда не умел - можно было юзать собранные из сорсов тулзы от Apple, которые в опенсорсе).

Но начиная с llvm-13 он может единым инстансом собирать "под всё". Мы так сделали автоматизацию сборки под дюжину линуксов, freebsd, пару macos (варианты intel и M1) и windows. Без всяких вспомогательных тулзов, просто "голый" clang + clang-tools + lld.
К этому тулчейн-фай, а так же архивы sysroot - и вот она, единая сборка одним компилятором.

Пробовал эту связку (just for fun) гонять на маке под M1 и на "малинке". Как и ожидается, везде получаются вполне рабочие бинари. Но основная цель - докер для сборки под x64, который гоняется в CI

Sign up to leave a comment.