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

У меня очень ограниченные знания 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 Ответ

0 голосов
/ 31 января 2019

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

Похоже, вам нужно сгенерировать .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 программы для создания могут выполнять более сложные задачи, такие как отображение фона или требовать лицензионного соглашения с конечным пользователем.

...