Как создать пакет.app для Mac OS с приложением Chef Omnibus в программе установки DMG

У меня очень ограниченные знания Mac OS, и у меня есть пара вопросов, связанных с установщиками DMG.

У нас есть приложение, которое работает на Windows, Mac и Ubuntu. Мы создаем наши установщики для всех трех ОС с Chef Omnibus.

Наш установщик DMG немного базовый, но работает нормально, т.е. наше приложение установлено так, как должно. Тем не менее, у наших пользователей нет простого способа запустить приложение - им нужно пойти и поискать папку установки, найти сам файл запуска.sh и запустить его.

Из того, что я до сих пор собирал, пакет Mac OS.app может помочь нам в этом. Однако я не нашел никакой информации о том, как создать пакет в процессе создания установщика Omnibus. Я вижу, что пакет - это набор папок и файлов, которые имеют определенную структуру:

  • файл info.plist
  • исполняемый файл - это может быть наш упомянутый выше файл bash
  • папка Ресурсы
  • ... и другие файлы

Я обнаружил, что самый простой способ создать пакет - это использовать редактор xCode, но это не вариант для нас. Мы создаем установщики в процессе CI автоматически, и мы предпочитаем сохранять его таким, он очень эффективный и надежный. Лучше всего было бы как-то расширить процесс Omnibus, чтобы мы также получили этот пакетный файл. Однако на данный момент я даже не уверен, возможно ли это.

Я действительно застрял, поэтому я благодарен за любые указатели.

Вот наш файл distribution.xml для справки, если он имеет отношение к этой проблеме. Он используется Omnibus для команды productbuild. Я искал варианты для расширения этого, но нет ничего, связанного с пакетами:

<?xml version="1.0" standalone="no"?>
<installer-gui-script minSpecVersion="1">
 <title><%= friendly_name %></title>
 <background file="background.png" alignment="bottomleft" mime- 
   type="image/png"/>
 <welcome file="welcome.html" mime-type="text/html"/>
 <license file="license.html" mime-type="text/html"/>

 <!-- Generated by productbuild - - synthesize -->
 <pkg-ref id="<%= identifier %>"/>
 <options customize="never" require-scripts="false"/>
 <choices-outline>
  <line choice="default">
   <line choice="<%= identifier %>"/>
  </line>
 </choices-outline>
 <choice id="default"/>
 <choice id="<%= identifier %>" visible="false">
  <pkg-ref id="<%= identifier %>"/>
 </choice>
 <pkg-ref id="<%= identifier %>" version="<%= version %>" 
    onConclusion="none"><%= component_pkg %></pkg-ref>
 <domains enable_anywhere="false" enable_currentUserHome="true" 
   enable_localSystem="false" />
</installer-gui-script>

1 ответ

Решение

наше приложение установлено как надо

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

.app это особая структура папок:

MyApp.app/
   Contents/
      Info.plist
      MacOS/
          executable
      Frameworks/
          library.dylib
      Resources/
          icon.icns

Библиотеки в Frameworks/ должны быть связаны с executable с install_name_tool

Например,

install_name_tool -change /opt/local/lib/library.dylib @rpath/library.dylib MyApp.app/Contents/MacOS/executable
install_name_tool -add_rpath @executable_path/../Frameworks MyApp.app/Contents/MacOS/executable

Почти все остальное можно классифицировать Ресурсы, ничто не может войти в верхний уровень приложения, кроме Contents/ папка. Ты можешь codesign когда приложение будет завершено и полностью в комплекте.

Когда вы вернетесь к своему другому программному обеспечению, используйте .app создать .dmgтогда вы можете codesign тот.

В типичной установке с .dmgПользователь обычно представлен приложением и псевдонимом в папке /Applications. Для установки пользователь перетаскивает приложение в папку /Applications.

Немного .dmg Программное обеспечение для создания будет делать более сложные вещи, такие как отображение фона или требует лицензионного соглашения с конечным пользователем.

Другие вопросы по тегам