Создание следующего поколения приложений

Улучшения платформы и цели для Юноны

Вот уже чуть более 7 лет элементарная компания намерена выпускать приложения-убийцы на настольные компьютеры с открытым исходным кодом. В течение цикла разработки Juno мы усердно работали, чтобы воплотить наше видение этих приложений, но не вся работа, которую мы выполнили, видна обычному пользователю. В этом посте я расскажу о небольшой истории того, как мы собираем все вместе и как выглядит новый нормальный элемент для элементарных приложений. Пристегнитесь на ваших шлемах разработчиков, и давайте станем отвратительными.

Генерал я

Мы выпустили самую первую версию элементарной ОС с лучшим шансом на разработку привлекательных приложений с открытым исходным кодом. У нас не было стандартного языка. Приложения были написаны на Python, C #, C, Vala, что угодно. Там не было никакого руководства по стилю кода. Наш код был очень грязным и не очень последовательным. Gtk2 была вещь. А также рисование вещей вручную в Каире. Это была эра элементарной разработки приложений «клейкая лента и проволочная сетка».

0,1 Юпитер, лучше всего смотреть с этим сопровождающим счетом

Во время нашей поездки на Ubuntu Developer Summit в далеком 2011 году, после того как мы представили некоторые из наших новых приложений в Ubuntu Desktop Team, мы встретились с разработчиком Unity Джейсоном Смитом, который дал нам жесткую правду: мы не были отличным магазином кода и нам нужно было изменить способ работы.

Быт II

Во время разработки Luna мы сделали много трудных решений, и некоторые из них стоили нам ценных вкладчиков. Два самых больших изменения были стандартизацией на Vala и введением обзоров кода.

Выбор стандартного языка был действительно воротами для повышения наших стандартов. Это позволило каждому, кто работает над одним приложением, легче вносить вклад в другое приложение, и это позволило нам создать единое руководство по стилю кода, с которым каждый мог бы ознакомиться. Позже это позволило бы нам написать исчерпывающую документацию для разработчиков и дать третьим сторонам четкий путь доставки своих приложений элементарным пользователям ОС. Мы также выбрали стандартную систему сборки с CMake по тем же причинам.

Представить обзоры кода было гораздо более трудной задачей. В отличие от современных инструментов, таких как GitHub, наша платформа для размещения кода, Launchpad, не имела собственной концепции обзоров. Мы начали использовать бота под названием Tarmac, который разработчики Canonical начали использовать. Это было медленно и мучительно, и некоторые разработчики восприняли это лично, что мы хотели, чтобы их код был проверен, прежде чем он попадет в ствол разработки.

Файлы с Gtk + HeaderBar в 0.3 Freya

Начиная с Luna, но во всей Freya и даже в Loki мы стремились создать чистый рабочий стол Gtk3, и я действительно с гордостью могу сказать, что мы завершили наш переход еще до того, как многие другие проекты начали их. Мы охватили и внедрили HeaderBars по всем направлениям, даже в тех местах, где GNOME еще не сделал. Gtk3 также позволил нам создавать более сложные, настраиваемые стили с помощью CSS и внедрять более качественную типографику в наши приложения с более тонким контролем высоты и веса шрифта.

Мы также представили новую библиотеку под названием Granite для совместного использования общего кода между проектами и расширения возможностей, которые мы получили от Gtk +. Многие из созданных нами виджетов в конечном итоге будут заменены реализациями в самом Gtk +, включая HeaderBars, Popovers и другие. Хотя Granite продолжает совершенствоваться и добавляются новые функции и виджеты, мы также очень взволнованы, когда можем отказаться от классов, поскольку Gtk + приобретает новые функции.

Gen II был длинным и хорошим, и он принес много больших улучшений в то, как мы создавали приложения. Это было время постепенных изменений без особых серьезных неприятностей, так как мы сделали этот трудный выбор в Луне. Время встряхнуть вещи.

Генерал III

В новом поколении мы внесли несколько крупных изменений с целью облегчить участие новых участников и старых участников в поддержке зрелых баз кода.

Одна из самых больших из них - полностью обратная нотация доменных имен (RDNN). Из-за нашей долгой истории новые участники могут обнаружить, что когда они, например, клонируют элементарные файлы / файлы, двоичное имя проекта называется pantheon-files, файл .desktop называется org.pantheon.files, а настройки хранятся в сети. launchpad.marlin. Когда все именования основаны на RDNN, новые участники могут легко предсказать, что имена двоичных файлов, .desktops, путей GSettings и т. Д. Всегда будут, например, io.elementary.files. Это также гарантирует, что у нас не будет конфликтов имен файлов с пакетами из наших апстримов, таких как Debian или Ubuntu. Подробнее об этом вы можете прочитать в предыдущей статье Кэссиди «Очистка кодовых названий приложений».

Визуальное представление о том, как Gen III чувствует себя под капотом

Мы также стремимся иметь согласованную структуру каталогов исходного кода со стандартными файлами, такими как Application.vala в каталоге src, который содержит класс Application (представьте себе!), Ожидая, что вы сможете найти .desktops и appdata.xml в данных каталог и т. д. Это облегчает разработчикам, работающим над несколькими проектами, быстрый поиск общих файлов между проектами.

Приложения Gen III также используют GResources для пользовательских ресурсов, таких как значки, изображения и CSS, вместо установки файлов в файловую систему. Это важно как для обеспечения того, чтобы эти ресурсы не вызывали конфликты пакетов при установке в системный каталог, такой как каталог значков с многоцветной графикой, так и для уменьшения ошибок ввода-вывода и повышения производительности.

Слева: Линго Gen I приложение | Справа: приложение Palaura a Gen III

Вы также заметите, что во многих приложениях Gen III гораздо более полно используется Gtk.CSS для обеспечения брендинга, включая такие вещи, как более стилизованные шрифты и цветные заголовки. Вы можете прочитать больше о некоторых инструментах, доступных для разработчиков, здесь, в нашей последней статье Советы для разработчиков.

В прошлом году мы говорили о внедрении новых стандартов метаданных в форме AppStream и отказе от диалогов «О». Мы будем продолжать идти по этому пути и в настоящее время изучаем новые стандарты, такие как OARS, которые позволят использовать новые формы родительского контроля и обеспечат пользователям больший контроль над типом контента, который используется на их устройствах.

Мы также достигли огромного прогресса в создании всех наших приложений с помощью Meson и внесли исправления для улучшения поддержки Vala и инструментов локализации. Вы можете прочитать больше об этом здесь.

И последнее, но не менее важное: мы значительно расширили возможности использования автоматического тестирования в форме Travis CI на GitHub и Flightcheck, нашего решения для тестирования AppCenter Dashboard. Непрерывное тестирование в дополнение к проверке кода помогает нам поддерживать высокое качество кода и метаданных и избегать регрессий. В данный момент мы тестируем непрерывную версию Flightcheck, чтобы всем было проще запускать полный набор элементарных поддерживаемых тестов с Travis. Подробнее об этом в ближайшее время.

Мы также надеемся предоставить больше инструментов и лучшую документацию на протяжении всего цикла Juno, поэтому следите за обновлениями на нашем блоге, чтобы узнать больше о том, как вы тоже можете создавать потрясающие приложения с открытым исходным кодом.

Еще раз спасибо всем разработчикам, создающим приложения для AppCenter, всем, кто купил приложение в AppCenter, нашим сторонникам в Bountysource и Patreon, а также тем, кто приобрел копию элементарной ОС или мерч в нашем магазине. Каждый вклад помогает сделать все это возможным, и мы не были бы здесь без вас! Если вы хотите помочь улучшить элементарную ОС, не стесняйтесь подключиться!