Как создать дистрибутив Mac программы
От: Khimik  
Дата: 15.04.23 09:26
Оценка:
Мне другой человек портирует мою программу на 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 — подскажите.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re: Как создать дистрибутив Mac программы
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 15.04.23 10:34
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Если есть более красивые способы создать дистрибутив без обращения к Apple Store — подскажите.

Нужна подпись, xcode и Mac. Можно выкладывать dmg на сайте, но его всё равно надо подписать вроде бы чтобы он встал на Мак. Вероятность того, что не подписанная программа не встанет на устройство пользователя без включения каких-нибудь спец. режимов примерно 100%.
Sic luceat lux!
Отредактировано 15.04.2023 10:44 Kernan . Предыдущая версия . Еще …
Отредактировано 15.04.2023 10:43 Kernan . Предыдущая версия .
Re: Как создать дистрибутив Mac программы
От: Черный 😈 Властелин Австралия https://www.softperfect.com
Дата: 15.04.23 11:28
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Мне другой человек портирует мою программу на Mac, и возникла такая задача: есть исполняемый файл


Странно, что человек который портирует прогу на мак не знает там устроены приложения. Наверное стоит начать с факта что маковский апп это не файл, а папка с определенной структурой и расширением .app:

CD-Erector.app/
   Contents/
      Info.plist
      MacOS/
      PkgInfo
      Resources/

Бинарник кладется в MacOS, обычно это толстый файл для разных архитектур, сейчас это x86_64 и aarch64. В Info.plist идет информация о приложении и некоторые служебные флаги, примеры можете взять из других приложений. В PkgInfo обычно одна строка APPL????, при этом в Info.plist будет запись:

<key>CFBundleSignature</key>
<string>????</string>

В папку Resources кладется как минимум файл ICNS c иконками и имя иконки упоминается в Info.plist:

<key>CFBundleIconFile</key>
<string>myiconfile</string>

Вся это конструкция ужимается в DMG файл, еще обычно делают красивый фон и ярлык на /Applications, чтобы юзер мог перетащить папку туда после открытия DMG файла. Проще всего это сделать с помощью appdmg.

Ну и самое главное: папка перед упаковкой в DMG должна быть подписана с помощью утилиты codesign, для чего нужны сертификаты Apple и платное членство. Но это еще не все, финальный DMG файл надо нотаризовать, то есть послать в Apple используя инструменты командой строки и аккаунт разработчика. Apple проверит его на вирусы и добавит хеш в свою онлайн систему, c которой новые версии ОС сверяются при открытии образов (можно еще прицепить к DMG тикет для офлайн установки).

Короче говоря, без аккаунта разработчика и сертификатов Apple софт конечно запустить можно, но это не тривиальная задача и я не думаю что пользователи будут этим заморачиваться.
Re[2]: Как создать дистрибутив Mac программы
От: rudzuk  
Дата: 15.04.23 13:46
Оценка:
Здравствуйте, Черный □□ Властелин, Вы писали:

ЧВ> K>Мне другой человек портирует мою программу на Mac, и возникла такая задача: есть исполняемый файл


ЧВ> Странно, что человек который портирует прогу на мак не знает там устроены приложения.


Странно, что человек даже не может найти кнопку (Create Application Bundle) в настройках проекта лазаря.
avalon/3.0.2
Re[2]: Как создать дистрибутив Mac программы
От: Khimik  
Дата: 15.04.23 16:07
Оценка:
Здравствуйте, Черный 😈 Властелин, Вы писали:

ЧВ>Странно, что человек который портирует прогу на мак не знает там устроены приложения.


Ну он мне до этого присылал архивы со структурой, которую описал и я и вы ниже (zip архив, в нём каталог program.app и так далее). Проблема в том, что его zip файл у юзеров запускается, а то что я вручную пытался продублировать в Windows — не запускается. Внешне архивы вроде идентичны.

ЧВ>Вся это конструкция ужимается в DMG файл, еще обычно делают красивый фон и ярлык на /Applications, чтобы юзер мог перетащить папку туда после открытия DMG файла. Проще всего это сделать с помощью appdmg.


Файл с расширением dmg? Я раньше этого не видел, как уже сказал я видел mac дистрибутив в виде zip архива.


ЧВ>Ну и самое главное: папка перед упаковкой в DMG должна быть подписана с помощью утилиты codesign, для чего нужны сертификаты Apple и платное членство. Но это еще не все, финальный DMG файл надо нотаризовать, то есть послать в Apple используя инструменты командой строки и аккаунт разработчика. Apple проверит его на вирусы и добавит хеш в свою онлайн систему, c которой новые версии ОС сверяются при открытии образов (можно еще прицепить к DMG тикет для офлайн установки).


Я пока попробую обойти всё это: пропущу дистрибутив через Virustotal, сделаю скриншот, выложу этот скриншот на сайт, напишу на сайте инструкцию как через настройки запустить мой файл.

ЧВ>Короче говоря, без аккаунта разработчика и сертификатов Apple софт конечно запустить можно, но это не тривиальная задача и я не думаю что пользователи будут этим заморачиваться.


А Apple не банит сейчас россиян?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[2]: Как создать дистрибутив Mac программы
От: sergmalinin  
Дата: 15.04.23 22:39
Оценка: 8 (2)
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, Khimik, Вы писали:


K>>Если есть более красивые способы создать дистрибутив без обращения к Apple Store — подскажите.

K>Нужна подпись, xcode и Mac. Можно выкладывать dmg на сайте, но его всё равно надо подписать вроде бы чтобы он встал на Мак. Вероятность того, что не подписанная программа не встанет на устройство пользователя без включения каких-нибудь спец. режимов примерно 100%.

Вероятность того что не-подписанная программа запустится == 100%, если у скачанной из интернета программы удалить удалить аттрибут com.apple.quarantine
Делается примерно так(включая компиляцию программы и создание ZIP):
  1. выбираем в Хcode наш проект, потом нужный TARGET, потом вверху popup окна, Any Mac(Apple silicon, Intel)
  2. выбираем в меню Xcode, Product -> Archive и ждем когда все скомпилируется , когда закончится появится окно органайзера (если что потом можно открыть через меню Window -> Organizer)
  3. в органайзере выбираем наш архив приложения и нажимаем кнопку [Distribute App], в новом окне выбираем (Copy App), выбираем где сделать папку с приложением и жмем [Export]
  4. в Finder заходим в эту новую папка и видим там наше приложение, здесь же в Finder можете его сжать в ZIP
  5. ZIP кладете куда-то на ваш сервер
  6. user скачивает себе этот ZIP, разархивирует и после этого надо в том каталоге куда скачана программа выполнить следующую команду
    sudo xattr -d -r com.apple.quarantine ./MyBest.app

    где MyBest.app соотвественно имя вашего приложения
    после этого можете запускать без проблем ваше приложение, GateKeeper ничего не будет проверять.
Отредактировано 15.04.2023 22:44 sergmalinin . Предыдущая версия .
Re[3]: Как создать дистрибутив Mac программы
От: _synapse_  
Дата: 16.04.23 16:59
Оценка:
Здравствуйте, sergmalinin, Вы писали:

S>Здравствуйте, Kernan, Вы писали:


K>>Здравствуйте, Khimik, Вы писали:


K>>>Если есть более красивые способы создать дистрибутив без обращения к Apple Store — подскажите.

K>>Нужна подпись, xcode и Mac. Можно выкладывать dmg на сайте, но его всё равно надо подписать вроде бы чтобы он встал на Мак. Вероятность того, что не подписанная программа не встанет на устройство пользователя без включения каких-нибудь спец. режимов примерно 100%.

S>Вероятность того что не-подписанная программа запустится == 100%, если у скачанной из интернета программы удалить удалить аттрибут com.apple.quarantine

S>Делается примерно так(включая компиляцию программы и создание ZIP):
S>

    S>
  1. выбираем в Хcode наш проект, потом нужный TARGET, потом вверху popup окна, Any Mac(Apple silicon, Intel)
    S>
  2. выбираем в меню Xcode, Product -> Archive и ждем когда все скомпилируется , когда закончится появится окно органайзера (если что потом можно открыть через меню Window -> Organizer)
    S>
  3. в органайзере выбираем наш архив приложения и нажимаем кнопку [Distribute App], в новом окне выбираем (Copy App), выбираем где сделать папку с приложением и жмем [Export]
    S>
  4. в Finder заходим в эту новую папка и видим там наше приложение, здесь же в Finder можете его сжать в ZIP
    S>
  5. ZIP кладете куда-то на ваш сервер
    S>
  6. user скачивает себе этот ZIP, разархивирует и после этого надо в том каталоге куда скачана программа выполнить следующую команду
    S>
    S>sudo xattr -d -r com.apple.quarantine ./MyBest.app
    S>

    S>где MyBest.app соотвественно имя вашего приложения
    S>после этого можете запускать без проблем ваше приложение, GateKeeper ничего не будет проверять.

    S>
Я бы сам не стал такие проги устанавливать, если девелопер поленился сделать как надо, то почему пользователь должен делать какие то дополнительные действия в коммандной строке.
Пользователь просто в поиске откроет следующую ссылку.
Программы под мак распространяются либо через dmg и должны быть нотаризованы либо через Map App Store.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.