Мне другой человек портирует мою программу на Mac, и возникла такая задача: есть исполняемый файл (вообще раздражает что и в Linux и в Mac исполняемые файлы не имеют расширения), и нужно его как-то заархивировать, чтобы получился дистрибутив, который пользователь может запустить одним кликом. Мне вначале казалось, что это можно сделать так: создать каталог program.app, в нём подкаталог contents, в нём подкаталоги MacOs и Resources, в подкаталог Macos скопировать исполняемый файл, а в Resources — остальные файлы программы (которые обычно находится в едином каталоге с исполняемым файлом). Ещё нужно в Contents скопировать файлы Info.plist и PkgInfo с чем-то, что я пока не совсем понимаю. Рядом с каталогом program.app можно создать ещё каталоги с какими-то вспомогательными файлами, и далее всё это надо заархивировать в архив program.app.zip. Но когда я всё это сделал, работающий файл не получился. Подскажите, как создать Mac дистрибутив? Я пока не планирую добавляться в Apple Store, буду писать юзерам инструкцию, как через системные настройки Mac разрешить системе открывать этот файл. Если есть более красивые способы создать дистрибутив без обращения к Apple Store — подскажите.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Khimik, Вы писали:
K>Если есть более красивые способы создать дистрибутив без обращения к Apple Store — подскажите.
Нужна подпись, xcode и Mac. Можно выкладывать dmg на сайте, но его всё равно надо подписать вроде бы чтобы он встал на Мак. Вероятность того, что не подписанная программа не встанет на устройство пользователя без включения каких-нибудь спец. режимов примерно 100%.
Здравствуйте, Khimik, Вы писали:
K>Мне другой человек портирует мою программу на Mac, и возникла такая задача: есть исполняемый файл
Странно, что человек который портирует прогу на мак не знает там устроены приложения. Наверное стоит начать с факта что маковский апп это не файл, а папка с определенной структурой и расширением .app:
Бинарник кладется в MacOS, обычно это толстый файл для разных архитектур, сейчас это x86_64 и aarch64. В Info.plist идет информация о приложении и некоторые служебные флаги, примеры можете взять из других приложений. В PkgInfo обычно одна строка APPL????, при этом в Info.plist будет запись:
Вся это конструкция ужимается в DMG файл, еще обычно делают красивый фон и ярлык на /Applications, чтобы юзер мог перетащить папку туда после открытия DMG файла. Проще всего это сделать с помощью appdmg.
Ну и самое главное: папка перед упаковкой в DMG должна быть подписана с помощью утилиты codesign, для чего нужны сертификаты Apple и платное членство. Но это еще не все, финальный DMG файл надо нотаризовать, то есть послать в Apple используя инструменты командой строки и аккаунт разработчика. Apple проверит его на вирусы и добавит хеш в свою онлайн систему, c которой новые версии ОС сверяются при открытии образов (можно еще прицепить к DMG тикет для офлайн установки).
Короче говоря, без аккаунта разработчика и сертификатов Apple софт конечно запустить можно, но это не тривиальная задача и я не думаю что пользователи будут этим заморачиваться.
Здравствуйте, Черный □□ Властелин, Вы писали:
ЧВ> K>Мне другой человек портирует мою программу на Mac, и возникла такая задача: есть исполняемый файл
ЧВ> Странно, что человек который портирует прогу на мак не знает там устроены приложения.
Странно, что человек даже не может найти кнопку (Create Application Bundle) в настройках проекта лазаря.
Здравствуйте, Черный 😈 Властелин, Вы писали:
ЧВ>Странно, что человек который портирует прогу на мак не знает там устроены приложения.
Ну он мне до этого присылал архивы со структурой, которую описал и я и вы ниже (zip архив, в нём каталог program.app и так далее). Проблема в том, что его zip файл у юзеров запускается, а то что я вручную пытался продублировать в Windows — не запускается. Внешне архивы вроде идентичны.
ЧВ>Вся это конструкция ужимается в DMG файл, еще обычно делают красивый фон и ярлык на /Applications, чтобы юзер мог перетащить папку туда после открытия DMG файла. Проще всего это сделать с помощью appdmg.
Файл с расширением dmg? Я раньше этого не видел, как уже сказал я видел mac дистрибутив в виде zip архива.
ЧВ>Ну и самое главное: папка перед упаковкой в DMG должна быть подписана с помощью утилиты codesign, для чего нужны сертификаты Apple и платное членство. Но это еще не все, финальный DMG файл надо нотаризовать, то есть послать в Apple используя инструменты командой строки и аккаунт разработчика. Apple проверит его на вирусы и добавит хеш в свою онлайн систему, c которой новые версии ОС сверяются при открытии образов (можно еще прицепить к DMG тикет для офлайн установки).
Я пока попробую обойти всё это: пропущу дистрибутив через Virustotal, сделаю скриншот, выложу этот скриншот на сайт, напишу на сайте инструкцию как через настройки запустить мой файл.
ЧВ>Короче говоря, без аккаунта разработчика и сертификатов Apple софт конечно запустить можно, но это не тривиальная задача и я не думаю что пользователи будут этим заморачиваться.
А Apple не банит сейчас россиян?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Kernan, Вы писали:
K>Здравствуйте, Khimik, Вы писали:
K>>Если есть более красивые способы создать дистрибутив без обращения к Apple Store — подскажите. K>Нужна подпись, xcode и Mac. Можно выкладывать dmg на сайте, но его всё равно надо подписать вроде бы чтобы он встал на Мак. Вероятность того, что не подписанная программа не встанет на устройство пользователя без включения каких-нибудь спец. режимов примерно 100%.
Вероятность того что не-подписанная программа запустится == 100%, если у скачанной из интернета программы удалить удалить аттрибут com.apple.quarantine
Делается примерно так(включая компиляцию программы и создание ZIP): выбираем в Хcode наш проект, потом нужный TARGET, потом вверху popup окна, Any Mac(Apple silicon, Intel)
выбираем в меню Xcode, Product -> Archive и ждем когда все скомпилируется , когда закончится появится окно органайзера (если что потом можно открыть через меню Window -> Organizer)
в органайзере выбираем наш архив приложения и нажимаем кнопку [Distribute App], в новом окне выбираем (Copy App), выбираем где сделать папку с приложением и жмем [Export]
в Finder заходим в эту новую папка и видим там наше приложение, здесь же в Finder можете его сжать в ZIP
ZIP кладете куда-то на ваш сервер
user скачивает себе этот ZIP, разархивирует и после этого надо в том каталоге куда скачана программа выполнить следующую команду
Здравствуйте, sergmalinin, Вы писали:
S>Здравствуйте, Kernan, Вы писали:
K>>Здравствуйте, Khimik, Вы писали:
K>>>Если есть более красивые способы создать дистрибутив без обращения к Apple Store — подскажите. K>>Нужна подпись, xcode и Mac. Можно выкладывать dmg на сайте, но его всё равно надо подписать вроде бы чтобы он встал на Мак. Вероятность того, что не подписанная программа не встанет на устройство пользователя без включения каких-нибудь спец. режимов примерно 100%.
S>Вероятность того что не-подписанная программа запустится == 100%, если у скачанной из интернета программы удалить удалить аттрибут com.apple.quarantine S>Делается примерно так(включая компиляцию программы и создание ZIP): S> S> выбираем в Хcode наш проект, потом нужный TARGET, потом вверху popup окна, Any Mac(Apple silicon, Intel) S> выбираем в меню Xcode, Product -> Archive и ждем когда все скомпилируется , когда закончится появится окно органайзера (если что потом можно открыть через меню Window -> Organizer) S> в органайзере выбираем наш архив приложения и нажимаем кнопку [Distribute App], в новом окне выбираем (Copy App), выбираем где сделать папку с приложением и жмем [Export] S> в Finder заходим в эту новую папка и видим там наше приложение, здесь же в Finder можете его сжать в ZIP S> ZIP кладете куда-то на ваш сервер S> user скачивает себе этот ZIP, разархивирует и после этого надо в том каталоге куда скачана программа выполнить следующую команду S>
S>где MyBest.app соотвественно имя вашего приложения S>после этого можете запускать без проблем ваше приложение, GateKeeper ничего не будет проверять.
S>
Я бы сам не стал такие проги устанавливать, если девелопер поленился сделать как надо, то почему пользователь должен делать какие то дополнительные действия в коммандной строке.
Пользователь просто в поиске откроет следующую ссылку.
Программы под мак распространяются либо через dmg и должны быть нотаризованы либо через Map App Store.