LINUX.ORG.RU
ФорумAdmin

Упаковать бинарник в dmg пакет для macOS

 , ,


0

1

Здравствуйте, моя цель собирать rust исходники и из них создавать .dmg файл для установки в macOS в окружении linux.

С первым пунктом, собирать rust исходники, у меня проблем нет, а вот для создания .dmg пакета проблемы появились.

Сейчас делаю так (кусок из gitlab-ci.yml):

package:osx:
  stage: package
  image: ubuntu:24.04
  needs:
    - job: build-client:aarch64-apple-darwin
      artifacts: true
  rules: *rules-client

  script:
    - apt-get update && apt-get install -y xmlstarlet hfsprogs hfsplus p7zip-full
    - export PACKAGE_VERSION=$(grep ^version client/Cargo.toml | cut -d'"' -f2)
    - |
      export APP_NAME="Contextmenu"
      export DMG_NAME="$APP_NAME.dmg"
      export MOUNT_DIR="/tmp/$APP_NAME-dmg"
    - mkdir -p misc/package/osx/${APP_NAME}.app/{MacOS,Resources}
    - cp client/dist/contextmenu-client-macos-aarch64 misc/package/osx/${APP_NAME}.app/MacOS
    - cd misc/package/osx/
    - xmlstarlet ed --inplace   -u "/plist/dict/key[.='CFBundleVersion']/following-sibling::string[1]" -v "$VERSION"   -u "/plist/dict/key[.='CFBundleShortVersionString']/following-sibling::string[1]" -v "$VERSION" ${APP_NAME}.app/Info.plist
    - mkdir dmg-root
    - cp -vr $APP_NAME.app dmg-root/
    - ln -s /Applications dmg-root/Applications
    - dd if=/dev/zero of=$DMG_NAME bs=1M count=128 status=progress
    - mkfs.hfsplus -v "$APP_NAME" $DMG_NAME
    - mkdir -p $MOUNT_DIR
    - mount -o loop -t hfsplus $DMG_NAME $MOUNT_DIR
    - |
      cp -a dmg-root/. $MOUNT_DIR/
      sync
      umount $MOUNT_DIR
    - 7z l ${DMG_NAME}

  artifacts:
    name: "contextmenu-client-macos-aarch64-dmg"
    paths:
      - misc/package/osx/Contextmenu.dmg

На всякий случай привожу Info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <!-- App identity -->
    <key>CFBundleName</key>
    <string>ContextMenu</string>
    <key>CFBundleDisplayName</key>
    <string>ContextMenu</string>
    <key>CFBundleIdentifier</key>
    <string>com.contextmenu.client</string>
    <!-- Executable -->
    <key>CFBundleExecutable</key>
    <string>contextmenu-client</string>
    <!-- Versioning -->
    <key>CFBundleVersion</key>
    <string>1.86.4</string>
    <key>CFBundleShortVersionString</key>
    <string>1.86.4</string>
    <!-- Bundle type -->
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <!-- Platform -->
    <key>LSMinimumSystemVersion</key>
    <string>11.0</string>
    <!-- UI behavior -->
    <key>LSUIElement</key>
    <true/>
    <!--
    <key>CFBundleIconFile</key>
    <string>AppIcon.icns</string>
    -->
  </dict>
</plist>

На выходе я получаю валидный .dmg архив, но при установке в macOS, отображается ошибка пакет повреджен или что-то в этом духе.

У кого был опыт создания .dmg пакетов для macOS в Linux среде?

Подскажите куда копать, пожалуйста.

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

Mishahack
()
Ответ на: комментарий от Mishahack

Плюсую за это предположение. sudo spctl --master-disable и после этого (возможно нужен ребут) в настройках «Конфиденциальность и безопастность» в пункте «Разрешить использование приложений из:» появлялся вариант «из любого источника» (не дословно).
Проверил, всё ещё робит, ребут не нужен.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария