Должен ли я переписать GUI с GTK + вместо WinForms для Mono?

Я делал приложение с Visual Studio, winforms, и я использую openTK. Недавно я подумал о том, чтобы сделать его кросс-платформенным. Я собираюсь использовать Моно, потому что я не знаю ничего подобного. И у меня нет никакого опыта с GTK+. В моем приложении в настоящее время есть 4 окна (конечно, в будущем их будет больше). Я хочу быстро сделать приложение в Windows, Linux и OS X. Я читал, что GTK + лучше WinForms, но все еще не уверен, что выбрать. Итак, я должен переделать все для GTK + или остаться с WinForms и почему? Кроме того, есть ли какой-нибудь инструмент, который будет делать это для меня?

Ответ 1

Честно говоря, вам нужно будет рассказать нам больше о вашей аудитории/предполагаемом рынке, чтобы дать отличный ответ, но мои 0,02 доллара из-за некоторого опыта разработки там - это то, что разработка графического интерфейса для Mono на рабочем столе - это многоцелевое дело если вы хотите сделать это "Правильно". Вам нужно будет развить общую бэкэнду исключительно модульно, а затем написать интерфейс для платформы.

Окно

Windows.Forms, реализованный на Mono, является отличным костылем, если ваше приложение находится в зачаточном состоянии, что позволяет сразу же настроить таргетинг на Windows и развернуть его в несколько искаженном виде на OS X и Linux. Обратите внимание, однако, что в IRC мне сообщили, что разработка Windows.Forms на Mono практически мертва. Старые ошибки не обновляются, и, например, я столкнулся с SelectionBackColor, не работающим в RichTextBox на OS X (это проблема в lib Mono для Windows.Forms на OS X) в течение нескольких минут после тестирования. Аккуратно, что это там, возможно, полезно для быстрых утилит, где вы можете кодировать свои ограничения (см. Вопрос здесь для примера).

OS X

Для таргетинга на OS X, если у вас есть реальное коммерческое приложение для конечных пользователей, вам нужно будет привыкнуть, um, взаимодействовать с Интерфейс Builder. Я должен пояснить здесь, что использование XCode и Interface Builder абсолютно требует наличия у вас доступа к ящику с операционной системой OS X. В противном случае вы застряли в Windows.Forms или, желательно, я думаю, Gtk #.

Xamarin отлично справился с тем, что его IDE-заглушки подключались к собственным пользовательским интерфейсам, встроенным в XCode. Это то, как они делают это для развития iOS. Он работает достаточно хорошо, хотя документация слабая. Там отличное видео с 2011 года от Майкла Хатчингсона, описывающего этот процесс, хотя я предполагаю, что он долгое время встает на зубы (т.е. "Старый" ). (Прямая ссылка на видео)

Я предполагаю, что интерфейс Builder также является вашим единственным реальным выбором, если вы хотите настроить таргетинг на Mac App Store. Но посмотрите, это собственный пользовательский интерфейс, который был заглушен вашим кодом на С#, который, как считается, является отличным компромиссом.

Linux

Я не нацелился на Linux. Кажется, что Gtk # был бы естественным подспорьем, но я не очень помогаю там. Мои вещи строятся в Windows.Forms, и есть грубые грани, как и в OS X. Если бы я стал более серьезным, я бы начал с Gtk #, а также там, где MonoDevelop также имеет свой графический интерфейс RAD.

Пример серьезного, зрелого, кроссплатформенного приложения Gtk #

Быстрое примечание: Banshee использует Gtk # для целевой ОС X, Windows (alpha) и Linux. Вы можете получить отличный контекст, так как трудно использовать Gtk # на большой кросс-платформе приложения, проверив свой список рассылки и другие ресурсы.

Извините, новости не легче. Нет никакой серебряной пули/единого правильного ответа.


201607 UPDATE: Я думаю, что ответ постепенно становится использовать Xamarin.Forms для ориентации на кросс-платформу. На данный момент вы все еще можете писать отдельный интерфейс Mac, но есть основания полагать, что в какой-то момент поддержка Xamarin.Forms тоже будет; см. ниже.

К сожалению, если вы ориентируетесь на Linux, я думаю, что вы все еще находитесь в той же лодке, что и раньше.

  • Windows: теперь вы можете использовать Xamarin.Forms и UWP.
  • macOS: Вы по-прежнему по существу там же, но у меня был сотрудник Xamarin, который сказал мне в прошлый уик-энд, что Xamarin.Forms неофициально находится в разработке для OS X. Я считаю, это репо на GitHub. (Там даже ветка для tvOS.)

Ответ 2

Я бы посоветовал вам рассмотреть, какова ваша целевая аудитория. Написание пользовательского интерфейса с использованием структуры, такой как GTK #, может показаться хорошей идеей, но для обычного пользователя ваше приложение не будет выглядеть как их другие приложения Windows/OSX, которые легко могут помешать людям использовать его (если только это не является действительно исключительным каким-либо другим способом).

Лучший способ сделать это (что может быть невозможно из-за ограничений по времени/бюджету) - это разместить вашу логику приложения в отдельной сборке, а затем написать интерфейс для каждой платформы, используя Winform (или WPF) для Windows, MonoMac/Cocoa для OSX и GTK # для Linux. Он также не будет ограничивать использование функций, доступных на всей платформе, что значительно ухудшит работу пользователя.

Ответ 3

Сейчас у меня возникла аналогичная проблема, но то, что сказал Карл-Йоханн о том, что логика приложения будет раздельной, сделает задачу намного проще. Посмотрите на шаблон ViewModel (MVVM), и у вас будет гораздо меньше кода для перезаписи и тестирования для каждой платформы, поскольку центральная логика становится агностиком пользовательского интерфейса.