Ubuntu Touch: Sviluppo App e Convergenza

download Ubuntu Touch: Sviluppo App e Convergenza

If you can't read please download the document

Transcript of Ubuntu Touch: Sviluppo App e Convergenza

Sviluppo App e Convergenza

Giulio Collura

Il futuro del computing

Ubuntu funziona su smartphone, desktop, server e cloud

Interfaccia veloce e intuitiva per ogni dispositivo

Core Apps di qualit e un ecosistema di app in continua crescita

Ubuntu SDK con supporto nativo e HTML5

Differenziazione senza frammentazione

Spazio agli sviluppatori

Ubuntu fornisce tutti gli strumenti necessari allo sviluppoUbuntu SDK

Applicazioni native e HTML5

Portale con documentazione, tutorial e API reference

Linee guida per il design

Processo di upload e pubblicazione app semplice e sicuro

Ubuntu Store

Comunit di sviluppatori e designer attiva e entusiasta

La piattaforma Ubuntu

Sistema Operativo Ubuntu, con un layer Android per il device

Unity

Ubuntu SDK fornisce API trasparente per l'accesso ai servizi, device

Convergenza

QtQuick

Non solo adattamento nella dimensione dei componenti, design e modi d'uso devono essere ottimizzati

La prima versione LTS a essere completamente convergente sar la 16.04

Unity 8, gi in uso su smartphone e tablet, rimpiazzer Unity 7 nella versione desktop

foundations SDK

Ubuntu SDK

Fornisce tutti gli strumenti per sviluppare app semplicemente

Disponibile per numerosi linguaggi:QML, linguaggio dichiarativo utile a descrivere l'interfaccia utente di un programma

Javascript

C++

HTML5

QtQuick

Interfacce utente semplici e veloci

Design-oriented

Sviluppo rapido

Il QML un linguaggio dichiarativo che consente agli oggetti di essere definiti secondo le loro propriet e di come possono interagire e rispondere ai cambiamenti

Componenti

Layouts

Resolution Independence

Localizzazioni

Cloud-ready

Emulatore

Servizi

Command-line parsing

The kit provides the features expected from a modern SDK> Layouts a flexible layouting engine to create responsive user interfaces.> Resolution independence facilities to manage UI element sizes to behave consistently across form factors> Internationalization run your app in any language, graciously handle locale-aware settings and formats> Cloud-ready integration with Ubuntu's U1DB to store documents and app settings in the cloud> Automatic State Saving save the state of any component for logic that depends on previous runs> Emulator which makes testing of apps super easy.> Services (Alarm), Command-line parsing and more!

Ambiente di sviluppo

Qt CreatorCompleto supporto al C++ e QML

Interfaccia grafica per la gestione del dispositivo

Connessione al device tramite SSH (Secure Shell)

Permette l'avvio e l'interruzione di applicazioni durante lo sviluppo

Comprende tool di packaging, convalida e installazione

Cross-compilation direttamente dal desktop

Accesso diretto alla documentazione

Linea di comando

Installazione

Tramite terminale:Per Ubuntu 12.04 LTS, 13.10 e 14.04

Per versioni in sviluppo

sudo add-apt-repository ppa:ubuntu-sdk-team/ppa && sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get install ubuntu-sdksudo apt-get update && sudo apt-get install ubuntu-sdk

Ciclo di vita di una app

Le app sono sospese quando non visibili

Il ciclo di vita di una app progettato per essere semplice, sicuro e ottimizzare il consumo di batteria

Sicurezza

Tutte le app sono confinate grazie ad AppArmor, tramite specifiche restrizioni

AppArmor un modulo di sicurezza del kernel

Ogni app possiede un profilo AppArmor definito tramite un file di configurazione

Ogni app pu solo scrivere nella propria directory

Lo scambio di informazioni tra app consentito tramite ContentHub

Qt/QML e web app

Supporto completo per entrambe le piattaforme di sviluppo

Massime performance con il supporto nativo

Tutte le potenzialit del web grazie alle web appHTML 5 e CCS 3

Nessuna modifica richiesta alle webapp gi esistenti

App native

Scrivere app native per sfruttare tutta la potenza del dispositivo

QML + Javascript + C++ (Google Go)

Il Javascript si integra direttamente nel QML

Grazie alle librerie Qt, il C++ non mai stato cos semplice da usare

C++ per il backend come un plugin, QML per il frontend

Click packages

I pacchetti Click (.click) sono il nuovo modo in cui sono impacchettate, distribuite e installate le app per Ubuntu Touch e, in futuro, Ubuntu Desktop

Concetto simile agli .apk di Android

Progettati per essere semplici, veloci e sicuri, grazie all'integrazione di AppArmor

Possono essere creati direttamente da QtCreator

Forniscono isolamento tra aggiornamenti del sistema e delle appGli aggiornamenti del sistema vengono forniti tramite Debian packages o aggiornamenti OTA (over-the-air) incrementali

Gli aggornamenti delle app tramite pacchetti click

app project design develop publish

Nuovo progetto

IdeeNuove applicazioni

Porting di Harmattan apps

Remake di app iOS e Android

TutorialDisponibili in rete http://developer.ubuntu.com

Design guidelineshttp://design.ubuntu.com/apps

ReferenceCore Apps

Kit: ambiente con architettura emulata armhf o i386

Consente la cross-compilation e la cross-configuration di una app

Gestione del device direttamente da QtCreator

Sono forniti anche tool da linea di comandosudo apt-get install phablet-tools

Struttura del QML

Il QML un linguaggio dichiarativo: si definisce il componente che si vuole e si specifica le sue propriet

Specificare un id serve a rendere il componente accessibile da altre parti nel codice

Esempio:

Rectangle { id: canvas width: 200 height: 200 color: "blue" }

Gli oggetti possono essere innestati

Notare come logo acceda alle propriet di rect

import QtQuick 2.0

Rectangle { id: rect width: 300 height: 300 color: "orange"

Image { id: logo source: "/usr/share/icons/ubuntu-mobile/apps/scalable/calculator.svg" anchors.centerIn: parent height: rect.height / 2 width: rect.width / 2 } }

Integrazione Javascript e QML

Codice Javascript pu essere integrato con semplicit per fornire controllo sugli elementi e altri benefici

Item { width: randomNumber() height: width < 100 ? 100 : (width + 50) / 2 function randomNumber() { return Math.random() * 360; }}

MainView

Componente principale per tutte le applicazioni

Aggiunge automaticamente un header, utile alla gestione di Tab e comandi

Ruota automaticamente i contenuti a seconda della rotazione del device

Modulo di Ubuntu.Componentsimport Ubuntu.Components 1.0

main.qml

import QtQuick 2.1import Ubuntu.Components 1.1import "ui"

MainView { objectName: "mainView" applicationName: "com.ubuntu.developer.."

Tabs { id: tabs HelloTab { objectName: "helloTab" } WorldTab { objectName: "worldTab" } }}

Resolution Independence

DeviceConversione

Comuni schermi(laptop, desktop)1 gu = 8 px

Retina display1 gu = 16 px

Smartphones1 gu = 18 px

Nuovi componenti

utile creare nuovi componenti esternamente per modularizzare la propria applicazione

Molto semplice

necessario creare un nuovo modulo .qml all'interno del progetto

Esempio

components/HelloComponent.qml

import QtQuick 2.0import Ubuntu.Components 0.1

UbuntuShape { width: 200 height: width

property alias text: myText.text

Label { id: myText anchors.centerIn: parent }}

main.qml

import QtQuick 2.0import Ubuntu.Components 0.1import "components"MainView { width: units.gu(48) height: units.gu(60) Page { title: "Example page" HelloComponent { anchors.centerIn: parent text: "Hello world!" } }}

Convergenza

Una sola applicazione per tutti i dispositivi

Uso efficiente dello spazio dello schermo

Interfacce dinamiche

Layouts

Layouts

Ubuntu.Layouts

Componente dell'SDK utile a posizionare i vari elementi date certe condizioni

import Ubuntu.Layouts 1.0

ElementiLayouts

ItemLayout

ConditionalLayout

U1db

Modulo per la gestione di un database basato su JSON objects

Molto semplice da usare

Comodo per salvare impostazioni e informazioni permanentemente

Implementa la sincronizzazione con i server UbuntuOne

import U1db 1.0 as U1db

Policy: networking

Domande

Contatti

Email: [email protected]: gcollura93IRC: gcolluraLinkedin: Giulio Collura

Le slide saranno disponibili sulla mia pagina web:http://gcollura.github.io/projects

Grazie!