Приложение Mac от Gtk в Visual Studio Mac

Я очень новичок в среде разработки Mac. Я установил Visual Studio для Mac и создал новый проект решения .NET/Gtk 2.0 для создания инструмента для переименования файлов с графическим интерфейсом. Я создал инструмент. Однако, когда я создаю его в отладке и выпуске, он генерирует файл .exe, который я могу запускать только с оболочкой.

Однако мне нужно создать эту программу в пакете приложений, чтобы я мог отправить ее другим пользователям, и они могли запустить ее, щелкнув по ней. Есть ли способ сделать это? (Я потратил на это несколько часов, но не смог увидеть четкого документа, объясняющего мне. Если ничего не работает, мне нужно переписать его на Java).

Огромное спасибо заранее!


person ozimax06    schedule 08.12.2016    source источник
comment
Я также получаю исполняемый файл, когда собираю для Linux, и на моем компьютере с Ubuntu с установленным моно я могу просто дважды щелкнуть исполняемый файл, чтобы запустить его. Если это не работает, возможно, вы можете создать сценарий оболочки или собственное приложение, которое запускает exe?   -  person Kelson Ball    schedule 09.12.2016
comment
Да, двойной щелчок не работает, я запускаю его из оболочки, и я не думаю, что пользователи будут довольны оболочкой или необходимостью загружать моно-фреймворк для ее запуска. Так что я думаю, я создам его с помощью Java, так как я никогда раньше не создавал нативное приложение для Mac. Спасибо хоть!   -  person ozimax06    schedule 09.12.2016


Ответы (1)


Предполагая, что Mono установлен на всех ваших целевых машинах, вы можете собрать (вручную) папку пакета .app, которая будет запускать ваш .exe-файл, когда пользователь дважды щелкнет по нему. Есть определенный набор вещей, которые вам нужно поместить в пакет .app, одним из которых является файл командной оболочки, который запускает ваш .exe и будет выполняться при запуске .app.

Кстати. Visual Studio Mac, Xamarin Studio и MonoDevelop — это, по сути, разные варианты одного и того же — MonoDevelop. В VS mac и XS есть дополнительные возможности, но основной базовой IDE является MD. Какой бы из этих продуктов вы ни использовали для компиляции своего кода, вряд ли получится что-то отличное от следующего.

Структура базовой папки .app:

MyApp.app
  +-- Contents
      --- Info.plist
      +-- MacOS
          --- MyApp
          --- MyApp.exe
      +-- Resources
          --- MyApp.icns

Содержание следующее:

Info.plist — это XML-файл для Mac OS, который содержит описание вашего пакета .app. Это будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleExecutable</key>
    <string>MyApp</string>
    <key>CFBundleIconFile</key>
    <string>MyApp.icns</string>
    <key>CFBundleIdentifier</key>
    <string>com.myapp</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>My App Name</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.2.3</string>
    <key>CFBundleSignature</key>
    <string>xmmd</string>
    <key>CFBundleVersion</key>
    <string>1.2.3</string>
    <key>NSAppleScriptEnabled</key>
    <string>NO</string>
</dict>
</plist>

Файл MyApp.icns — это файл значка, который вы хотите использовать в качестве значка для своего пакета приложения.

Файл MyApp.exe — это ваш скомпилированный .NET exe.

Файл MyApp — это исполняемый командный файл, который выполняется, когда пользователь запускает пакет .app. Это указано в файле plist в разделе CFBundleExecutable и должно быть исполняемым (+x разрешения, ). Вот как это может выглядеть:

#!/bin/sh

DIR=$(cd "$(dirname "$0")"; pwd)
MONO_FRAMEWORK_PATH=/Library/Frameworks/Mono.framework/Versions/Current
export DYLD_FALLBACK_LIBRARY_PATH="$DIR:$MONO_FRAMEWORK_PATH/lib:/lib:/usr/lib"
export PATH="$MONO_FRAMEWORK_PATH/bin:$PATH"

exec mono "$DIR/MyApp.exe"

Надеюсь это поможет. Здоровья, Мартин.

person muszeo    schedule 04.06.2017