+ All Categories

platforms

Date post: 22-May-2015
Category:
Upload: acrmnet-srl
View: 619 times
Download: 0 times
Share this document with a friend
99
Platforms Goal : Conoscere le piattaforme più utilizzate per lo sviluppo di giochi ed applicazioni
Transcript
Page 1: platforms

Platforms

Goal : Conoscere le piattaforme più utilizzate per lo sviluppo di giochi ed applicazioni

Page 2: platforms

Chi è Acrm net

-aCrm net è una società italiana specializzata nello sviluppo di CRMopen source e di soluzioni ad hoc per il web e il mobile.

- aCrm net vanta più di 50 dipendenti che coprono una vasta gamma di figure professionali e ha ben due sedi in Europa: Roma e Ginevra.

ContattiaCrm Via Enrico Berlinguer, 18 (00054)Fiumicino (Roma) [email protected] +39 06 95214464Fax +39 06 92913681

Le nostre APPS

HERMES HEALTY SPIECES PET ISLAND SWAP ISLAND MORE OR LESS NAPOMEMO

Page 3: platforms

3

Apps native, web apps e apps ibride

• Le apps in linguaggio nativo normalmente sono più performanti, le transizioni e gli effetti sono più integrati e belli e le apps native vengono caricate in minor tempo e hanno il completo accesso a tutto l’hardware del device usato. Bisogna dire però che le apps native richiedono molto più tempo di sviluppo incrementando significativamente i costi di un progetto e inoltre devono essere sviluppate separatamente per ogni sistema operativo.

• Le web apps sono create utilizzando gli standards Web, quindi è possibile avere una base comune per tutti i device supportati e minori tempi di sviluppo. Una web app non ha bisogno di essere approvata dagli store ma può essere raggiunta solo tramite URL web inoltre non ha possibilità di avere accesso all’hardware del device e non funziona in modalità off-line.

• Una app ibrida usa gli standards web, funziona anche in modalità off-line ed ha acesso ai maggiori strumenti hardware del device usato. Tuttavia, come per le apps in linguaggio nativo, deve essere approvata dagli store.

• A prima vista sembrerebbe che un app ibrida sia la soluzione a tutti I nostri problemi, in realtà possiamo dire che molto dipende dal tipo di requisito software richiesto. Per un app che ha bisogno di grafica 3D si usa il codice nativo, se invece è un semplice gioco di carte forse la soluzione ibrida è più interessante.

aCrm net training course Apr 2014

Page 4: platforms

4

Creare Videogiochi senza scrivere una sola riga di codice?

• Sono molti gli strumenti che stanno emergendo e che permettono di creare app senza scrivere codice

• L’utilizzo di interfacce plug&play è ormai all’ordine del giorno.

• TheAppBuilder per la creazione di app “casualContent”

• GameSalad per la creazione di giochi

• Appery.io per la creazione di app enterprise

aCrm net training course Apr 2014

Page 5: platforms

5

Creare Videogiochi senza scrivere una sola riga di codice?

aCrm net training course Apr 2014

Page 6: platforms

6

Versione Mac e Windows

Windows Funziona attraverso il browser web

Windows Versione Mac e Windows

Android e iOS Android e iOS (CocoonJS and Direct Canvas), Desktop, Windows 8, Windows Phone 8, HTML5

Versione gratuita: Android, WindowsVersione Pro:Android, iOS, Mac, Windows

Android, iOS, Mac, Windows PC, Windows 8, Windows Phone 8, Ubuntu, HTML5

Android, iOS, Mac, Windows 8

Pro version349$/anno

Personal edition119$ totali

Pro version59.99$ totali

Master Collection499.99$ totali

Pro Version299$/anno

Pro: facilità di testing con il simulatore

Pro: Ottime performance HTML5

Pro: Ottima scelta per sviluppare giochi per Android gratuitamente

Pro: Doppia posibilità di scrittura codice o di drag & drop

Pro: Facile da usare per i principianti

Contro: Richiede comunque un minimo di programmazione

Contro: Pessime performance in Android e iOS

Contro: Richiede un livello base di programmazione

Contro: Il test dei giochi non è performante

Contro: Poche features

Creare Videogiochi senza scrivere una sola riga di codice?

aCrm net training course Apr 2014

Page 7: platforms

7

Creare Videogiochi senza scrivere una sola riga di codice?

aCrm net training course Apr 2014

Drag & Drop Codice

Page 8: platforms

8

Creare Videogiochi senza scrivere una sola riga di codice?

• I software elencati precedentemente sono utili per creare giochi multipiattaforma senza “quasi” scrivere codice

• Permettono di creare facilmente giochi per Android, iOS, HTML5, Mac e Windows in una sola soluzione, senza cioè riscrivere la stessa applicazione per più device.

• Anche se si sforzano di essere semplici e accessibili a chiunque voglia cimentarsi almeno una volta con pixel e affini, è bene notare che oltre a diventare estremamente complessi, questi software sono limitati e poco performanti.

• Dimenticatevi di poter sviluppare i prossimi Call of Duty 78 o FIFA 819• Ma, tenete presente che un giochino, anche se in 2D, se ben fatto può

scalare le classifiche.

aCrm net training course Apr 2014

Page 9: platforms

9

Creating apps with Adobe PhoneGap

• Cos’è PhoneGap?– E’ un framework javascript per creare applicazioni mobili ibride utilizzando codice

javascript, html5 e css3.

aCrm net training course Apr 2014

Page 10: platforms

10

Creating apps with Adobe PhoneGap

• In pratica PhoneGap crea un’applicazione con una web browser interface impostata come full screen.

aCrm net training course Apr 2014

Page 11: platforms

11

Creating apps with Adobe PhoneGap

• PhoneGap permette l’accesso alle più comuni funzionalità native del dispositivo mobile (fotocamera, GPS, bussola, rubrica…).

aCrm net training course Apr 2014

Page 12: platforms

12

Creating apps with Adobe PhoneGap

• Crea un package praticamente per ogni sistema operativo mobile: Android, iOS, Windows Phone, Blackberry, Symbian OS …

aCrm net training course Apr 2014

Page 13: platforms

13

Adobe PhoneGap cosa non si può fare

• Accesso limitato alle ultime funzionalità del sistema operativo• Codice personalizzato• Basse performance

aCrm net training course Apr 2014

• Facebook eliminò la sua app basata su HTML5 e ne sviluppò una basata al 100% su codice nativo

Page 14: platforms

14

Creating apps with Adobe PhoneGap

• Prima di iniziare, Android:– Per utilizzare e installare le app di PhoneGap abilitare sul proprio device Android la

possibilità di installare le applicazioni che provengono da fonti diverse da Play Store– Abilitare la modalità sviluppatore e il debug su porta USB

aCrm net training course Apr 2014

• Prima di iniziare, iOS:– E’ obbligatoria l’iscrizione all’Apple developer account– l’utilizzo di un Mac

Page 15: platforms

15

Creating apps with Adobe PhoneGap

• Android per Eclipse:• Lanciare Eclipse e selezionare dal menù Help | Install New Software.• Cliccare su Add in alto a destra.• Nella dialog Add Repository, inserire “ADT Plugin” come Nome e l’URL

https://dl-ssl.google.com/android/eclipse/ nel campo Location field.• Terminata l’installazione riavviare Eclipse.

aCrm net training course Apr 2014

Page 16: platforms

16

PhoneGap getting started

• Apriamo Eclipse e generiamo un nuovo progetto Android

aCrm net training course Apr 2014

Page 17: platforms

17

PhoneGap getting started

• Scegliamo il nome e il sistema operativo

aCrm net training course Apr 2014

Page 18: platforms

18

PhoneGap getting started

• Workspace e icone

aCrm net training course Apr 2014

Page 19: platforms

19

PhoneGap getting started

• Activity

aCrm net training course Apr 2014

Page 20: platforms

20

PhoneGap getting started

• Activity name e layout name

aCrm net training course Apr 2014

Page 21: platforms

21

PhoneGap getting started

• Folder di progetto e prossimi passi

aCrm net training course Apr 2014

1) Caricare i files di progetto(https://github.com/phonegap/phonegap-start)

2) Aggiungere la libreria di phonehap (cordova)

3) Modifica del file AndroidManifest.xml

Page 22: platforms

22

PhoneGap getting started

• Caricare i files di progetto: Creare la cartella www dentro assets e copiare i file di test

aCrm net training course Apr 2014

Page 23: platforms

23

PhoneGap getting started

• Aggiungere la libreria di phonegap (cordova.js) nella cartella libs e il folder xml con il file confing.xml nella cartella xml nella directory principale

aCrm net training course Apr 2014

Page 24: platforms

24

PhoneGap getting started

• Modificare il file AndroidManifest.xml

aCrm net training course Apr 2014

<supports-screensandroid:anyDensity="true"android:largeScreens="true"android:normalScreens="true"android:resizeable="true"android:smallScreens="true" />

<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.RECEIVE_SMS" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.RECORD_VIDEO"/><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.GET_ACCOUNTS" /><uses-permission android:name="android.permission.BROADCAST_STICKY" />

Page 25: platforms

25

PhoneGap getting started

• Modificare il file MainActivity.java nella cartella src

aCrm net training course Apr 2014

package com.example.phonegaptest;

import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBar;import android.support.v4.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.os.Build;

public class MainActivity extends ActionBarActivity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

if (savedInstanceState == null) {

getSupportFragmentManager().beginTransaction()

.add(R.id.container, new PlaceholderFragment()).commit();}

}

Page 26: platforms

26

PhoneGap getting started

• Modificare il file MainActivity.java nella cartella src

aCrm net training course Apr 2014

package com.example.phonegaptest;

import org.apache.cordova.DroidGap;import android.os.Bundle; public class MainActivity extends DroidGap { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/www/index.html"); }}

Page 27: platforms

27

PhoneGap getting started

• Android Virtual Device Manager

aCrm net training course Apr 2014

Page 28: platforms

28

PhoneGap getting started

• Emulatore Android

aCrm net training course Apr 2014

Page 29: platforms

29

PhoneGap getting started

• Utilizzare PhoneGap significa create app ibride basate su standards. L’app viene renderizzata con l’uso di una WebView che non è altro che un’istanza browser a tutto schermo.

• Per questa ragione è importante conoscere come usare alcuni tag HTML specifici, CSS, metodi JavaScript, proprietà ed eventi.

aCrm net training course Apr 2014

Page 30: platforms

30

PhoneGap alcuni importanti elementi

• Meta Tag viewport: Creato da Apple con iOS 1.0 è largamente supportato da tutti i maggiori browser mobile. Quando una pagina non si adatta alle dimensioni dello schermo viene scalata automaticamente dal browser. Il viewport è il meta tag che serve a controllare questo comportamento.

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1, maximum-scale=1.5, user-scalable=1">

• In questo esempio diciamo al browser che la larghezza e l’altezza predefinita del contenuto sono l’altezza e la larghezza dello schermo del dispositivo e che il contenuto è scalabile da 1 fino ad un massimo di 1,5

aCrm net training course Apr 2014

Page 31: platforms

31

PhoneGap alcuni importanti elementi

• Una delle problematiche dei browser mobili è il non perfetto riconoscimento dei numeri telefonici, il riconoscimento è automatico ma vengono considerati numeri telefonici anche indirizzi, codici ISBN e altre tipologie di numeri diversi da numeri telefonici. Per gestire il problema si aggiunge il seguente meta tag nell’header della pagina:

<meta name="format-detection" content="telephone=no"> • Nel codice HTML si usa il tag “tel” o “sms” per definire dei numeri di

telefono utilizzabili:<a href="tel:18005555555">Chiamaci al 1-800-555-5555</a> <a

href="sms:18005555555?body=Text_goes_here">

aCrm net training course Apr 2014

Page 32: platforms

32

PhoneGap alcuni importanti elementi

• L’inserimento di dati da parte dell’utente è un’azione normalmente noiosa e la correzione automatica normalmente non aiuta, per controllare la correzione automatica si usano i meta tag:

<input autocorrect="off" autocomplete="off" autocapitalize="off"> • Una delle più interessanti caratteristiche del CSS sono le media queries, in

realtà esistono già da qualche tempo, ma per I dispositivi mobile sono utilissimi. Il media query può essere utilizzato sia inline

@media all and (orientation: portrait) { body { } div { } } • Che come attributo all’interno di un tag:<link rel="stylesheet" media="all and (orientation: portrait)"

href="portrait.css" /> • Il metodo di utilizzo migliore dipende dal tipo di app, utilizzando il tag in

file CSS rende il codice più organizzato e pulito, inserendolo invece direttamente nell’HTML il codice è più difficile da leggere e rallenta i vecchi browser.

aCrm net training course Apr 2014

Page 33: platforms

33

PhoneGap alcuni importanti elementi

• Javascript QuerySelector e QuerySelectorAll:– Il metodo getElementById accede al primo elemento con l’ID Specificato.

Questo è uno dei metodi più vecchi ed utilizzati, tuttavia con l’avvento di jQuery è stato sostituito con selettori più precisi.

– Ci sono anche altri metodi per ispezionare il DOM, tra cui querySelector e querySelectorAll. querySelectorAll è una nuova API DOM che accetta classi CSS, ID, o tag HTML e restituisce l'elemento corrispondente.

/ / Recupera il primo tag <p> nel documento corrente var primo = document.querySelector ('p');

/ / Recupera tutti i tag <p> nel documento corrente var tutti = document.querySelectorAll ('p');

aCrm net training course Apr 2014

Page 34: platforms

34

PhoneGap alcuni importanti elementi

• Javascript addEventListener:– Il metodo addEventListener è il “meccanismo” javascript per catturare i listner

events.

addEventListener ('evento', eventHandler); Funzione eventHandler (evt) { / / Chiama un'altra funzione passando eventualmente i / / Valori memorizzati nell'oggetto evento

}

aCrm net training course Apr 2014

Page 35: platforms

35

PhoneGap alcuni importanti elementi

• Javascript Screen orientation e Device orientation:

– L’orientamento dello schermo è fondamentale quando riguarda un’applicazione mobile perché passare da un orientamento di tipo portrait (verticale) a landscape (orizzontale) cambia drasticamente gli spazi e i modi di utilizzo dell’app.

– L’orientamento può essere intercettato tramite l’evento orientationChange– L’orientamento corrente è disponibile invece chiamando il metodo

window.orientation– Se abbiamo bisogno di più informazioni sull’orientamento del dispositivo è

possibile definire un eventListener per l’evento deviceorientation, il deviceorientation fornisce informazioni sulla posizione del dispositivo sui 3 assi x, y e z

aCrm net training course Apr 2014

Page 36: platforms

36aCrm net training course Apr 2014

Native iOS Development

Page 37: platforms

37

Native iOS Developing: Considerazioni

• Gli utenti iPhone sono (in media):– Più giovani ( 20% tra i 18 e i 24 anni)– Più ricchi (41% di utenti hanno un reddito superiore a 100.000$)– Sono più propensi a pagare contenuti (23%) – Sono fidelizzati (80% hanno già posseduto un iPhone)

aCrm net training course Apr 2014

Page 38: platforms

38

Native iOS Developing: Xcode

• Apple X-Code

– Source Editor

– Graphical User Interface Editor

aCrm net training course Apr 2014

Page 39: platforms

39

Native iOS Developing: Xcode

• Nella schermata principale di Xcode è possibile creare un nuovo progetto e scegliere tra diversi template

aCrm net training course Apr 2014

Page 40: platforms

40

Native iOS Developing: Objective-C

• Objective-C è un linguaggio Object Oriented basato sul linguaggio C

aCrm net training course Apr 2014

Page 41: platforms

41

Native iOS Developing: Xcode

aCrm net training course Apr 2014

Page 42: platforms

42

Native iOS Developing: Xcode template 1/2

• Master-Detail Application: possiamo scegliere se sviluppare un app per iPhone/iPod, iPad o universale, offre la classica interfaccia suddivisa in due aree; a sinistra un View Controller (Master) utilizzato normalmente per la ricerca/consultazioni di dati ed un secondo View Controller (Detail) nella parte destra utilizzato per la visualizzazione dettagliata del contenuto scelto nel Master.

• OpenGL Game: Template utilizzato per giochi (Game Center)

• Page-Based Application: Utilizzato quando serve una struttura a pagine simile ad un libro

• Single-View Application: Il template viene creato con una sola vista chiamata “ViewController”

• Tabbed Application: fornisce un’applicazione con la “tab bar”, (barra composta da più sezioni come quella utilizzata nell’app “Musica”).

• Utility Application: fornisce un’interfaccia con il “flip” e un icona con le info/settings in basso a destra.

• Empty Application: La scelta giusta per ogni Objective-C ninja!aCrm net training course Apr 2014

Page 43: platforms

43

Native iOS Developing: Xcode template 2/2

aCrm net training course Apr 2014

Page-Based Application Tabbed Application Utility Application

Page 44: platforms

44

Native iOS Developing: Source Control

• Source Control disponibili in iOS– Git– Subversion

• Testing– Attraverso il simulatore di Xcode– Tramite device fisico

aCrm net training course Apr 2014

Page 45: platforms

45

Native iOS Developing: MVC

• Il Model-View-Controller design pattern (MVC) è il pattern design più utilizzato nello sviluppo di applicazioni iOS.

• Nel design pattern MVC un singolo oggetto può ricoprire solo singolo ruolo:– Modello– Vista – Controllore.

• I ruoli rappresentano una classificazione dell’oggetto che stiamo utilizzando e sono degli elementi logicamente separati ai quali però è consentita, una stretta comunicazione.

aCrm net training course Apr 2014

Page 46: platforms

46

Native iOS Developing: Xcode Interfaccia

aCrm net training course Apr 2014

Page 47: platforms

47

Native iOS Developing: Xcode Interfaccia

aCrm net training course Apr 2014

• Nel menu di sinistra, sulla prima icona a forma di cartella ci verrà mostrata la gerarchia dei file del nostro progetto.

• Il tasto in giallo ci porterà alla finestra di warning ed errori.

Page 48: platforms

48

Native iOS Developing: Xcode Interfaccia

aCrm net training course Apr 2014

• Altra parte molto importante dell’interfaccia, sono i pulsanti per l’esecuzione e lo stop dell’applicazione.

• Il tasto play compila ed esegue ma esistono delle scorciatoie da tastiera sia per compilare (Build) lanciare (Run) e fermare (Stop) che sono molto comode e veloci da utilizzare:– Build: shift+cmd+B– Run: cmd+R– Stop: shift+cmd+invio.

• Alla destra dei pulsanti Run e Stop troviamo un’altro pulsante molto utile che ci permetterà di decidere quale schema utilizzare nella fase di compilazione e su quale dispositivo installare l’applicazione.

• facendo clic sul nome del dispositivo, potremo scegliere se installare l’app sul dispositivo fisico o sul simulatore.

Page 49: platforms

49

Native iOS Developing: Xcode Interfaccia

aCrm net training course Apr 2014

• Al momento del lancio dell’app, viene istanziato un oggetto della classe UIApplication il quale svolge il ruolo di coordinatore dell’intera applicazione smistando i vari eventi, generati dall’utente, verso gli oggetti opportuni.

• Successivamente viene creata un’istanza della classe AppDelegate. La UIApplication è un design pattern di tipo creazionale ed il suo compito è quello di assicurare che durante l’esecuzione dell’applicazione (o di un programma in generale), una determinata classe venga istanziata una sola volta.

• L’AppDelegate deriva dalla UIResponder

Page 50: platforms

50

Native iOS Developing: Xcode Interfaccia

aCrm net training course Apr 2014

• Al momento del lancio dell’app, viene istanziato un oggetto della classe UIApplication il quale svolge il ruolo di coordinatore dell’intera applicazione smistando i vari eventi, generati dall’utente, verso gli oggetti opportuni.

• Successivamente viene creata un’istanza della classe AppDelegate. La UIApplication è un design pattern di tipo creazionale ed il suo compito è quello di assicurare che durante l’esecuzione dell’applicazione (o di un programma in generale), una determinata classe venga istanziata una sola volta.

• L’AppDelegate deriva dalla UIResponder

Page 51: platforms

51

Native iOS Developing: View Controller e View

• Un View Controller rappresenta l’elemento cardine di ogni app iOS perché gestisce le views (che rappresentano l’interfaccia che l’utente)ed inoltre funziona da controllore, mettendo in relazione le varie views con il modello dei dati. La classe UIViewController possiede, come attributo, una view, ma nulla vieta di aggiungerne altre.

• Le view controller sono utilizzate:– Per gestire il passaggio da una view all’altra– Per memorizzare i dati inseriti nei campi di input– Per gestire gli oggetti della view

• La classe UIView definisce un’area rettangolare sullo schermo del dispositivo dove possono essere posizionati gli elementi grafici della pagina. Durante l’esecuzione dell’applicazione il compito di una view è quello di mostrare a schermo i contenuti (inseriti su di essa) e gestire l’interazione dell’utente.

• La peculiarità della classe UIView è quella di permettere l’incapsulamento di altre views creando una struttura padre-figlio: il padre viene detto superview mentre i suoi figli subviews.

aCrm net training course Apr 2014

Page 52: platforms

52

Native iOS Developing: View Controller e View

aCrm net training course Apr 2014

Page 53: platforms

53

Native iOS Developing: Sistema di riferimento

aCrm net training course Apr 2014

Page 54: platforms

54

Native iOS Developing: Sistema di riferimento

• CGFloat width = 100;• CGFloat height = 100;• CGFloat x = (self.view.frame.size.width - width) / 2;• CGFloat y = (self.view.frame.size.height - height) / 2;

• UIView *secondView = [[UIView alloc] initWithFrame:CGRectMake(x,y,width,height)];

• secondView.backgroundColor = [UIColor redColor];• [self.view addSubview:secondView];• [secondView release];

aCrm net training course Apr 2014

Page 55: platforms

55

Native iOS Developing: Sistema di riferimento

aCrm net training course Apr 2014

Page 56: platforms

56

Native iOS Developing: Sistema di riferimento

• CGFloat width2 = 50;• CGFloat height2 = 50;• CGFloat x2 = secondView.frame.size.width - width2;• CGFloat y2 = secondView.frame.size.height - height2;• • UIView *thirdView = [[UIView alloc]

initWithFrame:CGRectMake(x2,y2,width2,height2)];• thirdView.backgroundColor = [UIColor yellowColor];• [secondView addSubview:thirdView];• [thirdView release];

aCrm net training course Apr 2014

Page 57: platforms

57

Native iOS Developing: Sistema di riferimento

aCrm net training course Apr 2014

Page 58: platforms

58

Native iOS Developing: Sistema di riferimento

aCrm net training course Apr 2014

Page 59: platforms

59

Native iOS Developing: Gestire la rotazione

• La property autoresizingMask serve per gestire la rotazione, questa proprietà ci permetterà di definire sei diverse regole per la view:

• UIViewAutoresizingFlexibleBottomMargin: fa si che la distanza della view dal bordo inferiore sia flessibile.

• UIViewAutoresizingFlexibleTopMargin: fa si che la distanza della view dal bordo superiore sia flessibile.

• UIViewAutoresizingFlexibleRightMargin: fa si che la distanza della view dal bordo destro sia flessibile.

• UIViewAutoresizingFlexibleLeftMargin: fa si che la distanza della view dal bordo sinistro sia flessibile.

• UIViewAutoresizingFlexibleWidth: fa si che la larghezza della view sia flessibile.• UIViewAutoresizingFlexibleHeight: fa si che l’altezza della view sia flessibile.

• Cosa significa flessibile? Al contrario di prima di prima, la distanza dai bordi della view verrà modificata in relazione al nuovo orientamento del dispositivo in modo da mantenere all’interno dello schermo la stessa posizione relativa.

aCrm net training course Apr 2014

Page 60: platforms

60

Native iOS Developing: Sistema di riferimento

aCrm net training course Apr 2014

secondView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin |  UIViewAutoresizingFlexibleLeftMargin |UIViewAutoresizingFlexibleBottomMargin |  UIViewAutoresizingFlexibleRightMargin;

Page 61: platforms

61

Native iOS Developing: Deallocazione della memoria

• I dispositivi iOS non posseggono un Garbage Colllector• Fulcro della gestione della memoria è una proprietà che ogni oggetto possiede: il

retainCount. Quest’ultimo indica il numero di riferimenti associati all’oggetto e quando il retainCount di qualsiasi oggetto arriva a 0 quest’ultimo viene deallocato.

• Questa operazione viene effettuata da un oggetto chiamato AutoreleasePool che è istanziato non appena l’applicazione viene eseguita e si occupa di monitorare i retainCount

• Quando un qualsiasi oggetto viene allocato ed inizializzato, il suo retainCount ha valore 1. Per deallocare in maniera esplicita il retainCount di un oggetto allocato:

• release: decrementa il retainCount di 1• Se creiamo un’app di prova “Hello World”, con una sola label il retainCount = 2

(firstViewController ) e poco dopo facciamo una chiamata al metodo release, decrementaremo di uno il retainCount, che sarà a questo punto = 1

• Ma quando verrà deallocata la label? Ciò avverrà quando il firstViewController verrà deallocato e dunque, non essendo più necessario il riferimento alla label, il suo retainCount verrà decrementato di 1 (assumendo dunque valore 0) e, finalmente, anche la label verrà deallocata.

aCrm net training course Apr 2014

Page 62: platforms

62

Native iOS Developing: Kit nativi per lo sviluppo su iOS

• UIKit: fornisce l'infrastruttura necessaria per la realizzazione di applicazioni grafiche, gestire il ciclo di eventi, ed eseguire altre operazioni relazionate all'interfaccia utente.

• MapKit (Apple Map): provvede all’interfaccia per l’embed di mappe, supporto per le note, per le viste e GEO coding

• GameKit: prevede interfacce per l’aggiornamento delle classifiche globali, social networking, voice-over IP

aCrm net training course Apr 2014

Page 63: platforms

63

Submitting your App 1/4

• Il 66% delle app pubblicate sullo Store sono in passivo

• Riuscire a pubblicare una app nello Store è solo il primo passo

aCrm net training course Apr 2014

Page 64: platforms

64

Submitting your App 2/4

• E’ obbligatorio iscriversi all’Apple Developer Program per poter pubblicare le app o per poter testare su device la propria app

(http://developer.apple.com)

aCrm net training course Apr 2014

Page 65: platforms

65

Submitting your App 3/4

• E’ possibile iscriversi al programma Apple come– Individual - Standard (99$ = 79€)– Company - Enterprise(299$)

aCrm net training course Apr 2014

• Tutti i campi richiesti sono obbligatori– Nome, descrizione, icone, screenshoot, informazioni di contatto– Non fornire tutti i campi è il modo migliore per non farsi approvare l’app

• Tips– Molte aziende aggiornano anche gli screenshoot dell’applicazione dopo ogni

update in questo modo mostrano i miglioramenti dell’app

Page 66: platforms

66

Submitting your App 4/4

• Verifica dell’app create– Prima di procedere con l’upload dell’app, testarla e verificare che rispetti tutte le

norme descritte nel documento HIG

aCrm net training course Apr 2014

• Firmare digitalmente il software– creare un certificato di distribuzione (tramite l’applicazione Keychain Access) – aprire un nuovo ID Apple– elaborare un “Provisioning Profile” di distribuzione tramite l’apposito portale

(“Provisioning portal”).

Page 67: platforms

67

Submitting your App : Tempi di approvazione

Il tempo medio è di 2 settimane

aCrm net training course Apr 2014

Non fatevi prendere dallo sconforto se al primo invio l’app non viene approvata

Page 68: platforms

68aCrm net training course Apr 2014

Developing fo Android

Page 69: platforms

69

Developing for Android

aCrm net training course Apr 2014

• Google’s Android OS è il sistema operativo mobile leader del settore– Apple con il suo developer program è la prima linea di difesa del consumatore, per

Android lo sviluppatore deve supportare il consumatore in ogni fase

Page 70: platforms

70

Developing for Android: Il modello Google

aCrm net training course Apr 2014

Esistono molti sentieri che portano alla stessa montagna

Pubblicare un app su Google Play è molto più facile rispetto ad Apple, questo perché Google vuole che lo sviluppatore si concentri sul modo migliore di creare il prodotto

Page 71: platforms

71

Developing for Android: Installare l’SDK

aCrm net training course Apr 2014

Il file SDK per Android è reperibile sul sito:http://developer.android.com/sdk Il download include l’Android Developer Tools (ADT)• Eclipse Integrated Developer Environment (IDE) • ADT plugin • SDK tools• platform tools• the latest version of Android• the Android emulator.

Page 72: platforms

72

Developing for Android: Registrarsi a Google Play

aCrm net training course Apr 2014

https://play.google.com/apps/publish/signup/

Page 73: platforms

73

Developing for Android: Eclipse 1/2

aCrm net training course Apr 2014

• Google supporta in modalità nativa Eclipse:

– Wizards e GUIs

– Testing diretto via porta USB

Page 74: platforms

74

Developing for Android: Eclipse 2/2

aCrm net training course Apr 2014

Page 75: platforms

75

Developing for Android: Concetti base

aCrm net training course Apr 2014

• Salvaguardia delle risorse: essendo progettato per sistemi embedded, quindi dotati di poche risorse di memoria, Android è un SO parsimonioso. Android è particolarmente bravo nel distruggere e ricreare parti dell’applicazione in maniera del tutto impercettibile all’utente.

• Sicurezza: Android è figlio di Linux. Ogni applicazione è un utente a sé stante e vive in un proprio processo in cui viene allocata una nuova istanza della virtual machine, ciò per evitare che il crash di un’applicazione propaghi instabilità alle altre app in esecuzione. Questa forma di “isolamento” viene riflessa anche sulla memoria di massa in quanto ogni applicazione ha un suo spazio in cui lavorare e custodire i propri dati.

• E’ assolutamente vietata, qualsiasi pratica che porti un’app ad invadere lo spazio riservato ad un’altra.

Page 76: platforms

76

Developing for Android: Concetti base

aCrm net training course Apr 2014

• Una volta installato sul device ogni app Android risiede in una sandbox: • Il sistema operativo Android è un sistema Linux multi-utente e ogni App viene

definita come un diverso utente.• Di default, il sistema assegna ad ogni app un Linux user ID univoco (L’ID è usato

solo dal sistema ed è sconosciuto all’app) . Il sistema imposta le autorizzazioni per tutti i file di un'applicazione in modo che solo l'ID utente assegnato a tale applicazione possa accedervi.

• Ogni processo ha la sua virtual machine, e quindi il codice di una app gira in maniera isolata rispetto alle altre app.

• Di default, ogni app viene eseguita in un proprio processo Linux. Android inizia il processo quando uno dei componenti della app bisogno di essere eseguito, quindi arresta il processo quando non è necessario o quando il sistema deve recuperare la memoria per altre applicazioni.

Page 77: platforms

77

Developing for Android: Concetti base

aCrm net training course Apr 2014

• E’, ovviamente, possibile, trasferire o utilizzare dei dati da un’app all’altra :

• E’ possibile fare in modo che due app abbiano lo stesso Linux user ID, in questo caso le app hanno la possibilità di accedere ognuna ai file dell’altra. Per risparmiare le risorse del sistema, le app con lo stesso Linus user ID possono essere avviate dallo stesso processo Linux e possono quindi condividere la stessa VM.

• Un app può richiedere il permesso di accedere ai dati presenti nel device, come I contatti utente, I messaggi SMS, I dati presenti su SD card, ecc.. . In questo caso tutte le autorizzazioni vanno richieste all’utente in fase di installazione dell’app

Page 78: platforms

78

Developing for Android: Concetti base

aCrm net training course Apr 2014

• Android affida le sue funzionalità a quattro tipi di componenti: Activity, Service, Content Provider e BroadcastReceiver

• Un’Activity è un’interfaccia utente. Ogni volta che si usa un’app generalmente si interagisce con una o più “pagine” mediante le quali si consultano dati o si immettono input. Ovviamente la realizzazione di Activity è il punto di partenza di ogni corso di programmazione Android visto che è il componente con cui l’utente ha il contatto più diretto.

• ogni Activity è responsabile del salvataggio del proprio stato in modo da poterlo ristabilire successivamente come parte del ciclo di vita dell’applicazione.

Le Activity di Android:

1. Created, Quando un’attività viene creata: onCreate()2. Started, Quando è visibile sullo schermo: onStart()3. Resumed, Quando torna visibile dopo essere stata in pausa: onResume()4. Paused, Parzialmente visibile (è stata oscurata da un’altra attività): onPause()5. Stopped, Non visibile e non in esecuzione, può essere rispresa (resumed): onStop()6. Destroyed, Non può essere ripresa: onDestroy()

Page 79: platforms

79

Developing for Android: The Activity Life Cicle 2/2

aCrm net training course Apr 2014

Page 80: platforms

80

Developing for Android: Service, Content Provider e Broadcast Receiver

aCrm net training course Apr 2014

Un componente Service svolge un ruolo opposto all’Activity. Infatti rappresenta un lavoro – generalemente lungo e continuato – che viene svolto interamente in background senza bisogno di interazione diretta con l’utente. I Service spesso preparano i dati che le activity devono mostrare all’utente permettendo una reattività maggiore nel momento della visualizzazione.

Un componente di tipo Content Provider ha lo scopo di organizzare la condivisione di dati tra applicazioni. Questi componenti permettono di condividere, contenuti di database, contenuti su file o contenuti reperibili tramite rete.

Un componente Broadcast Receiver è un componente che reagisce ad un invio di messaggi a livello di sistema con cui Android notifica l’avvenimento di un determinato evento (l’arrivo di un SMS o di una chiamata).

Page 81: platforms

81

Developing for Android: Gestione della memoria 1/3

aCrm net training course Apr 2014

Android sa che il fattore fondamentale della sopravvivenza di un sistema mobile è la corretta gestione delle risorse. Quindi farà in modo di tenere in vita ogni processo il più a lungo possibile. Ciò non toglie che in alcune circostanze ed in base alle risorse hardware a disposizione, il sistema operativo si troverà nella necessità di dover liberare memoria abbattendo processi.

Sì ma: quale processo abbattere?La discriminante è quanto un’applicazione, candidata all’eliminazione, sia importante per la user experience. Maggiore sarà l’importanza riconosciuta, minori saranno le probabilità che venga arrestata.Così facendo Android tenterà di raggiungere il suo duplice scopo: preservare il sistema e salvaguardare l’utente.

Page 82: platforms

82

Developing for Android: Gestione della memoria 2/3

aCrm net training course Apr 2014

I processi possono essere classificati, in ordine di importanza decrescente, come:• Foreground: sono quelli che interagiscono direttamente o indirettamente con

l’utente. Stiamo parlando delle applicazioni che, contengono l’Activity attualmente utilizzata o i Service ad essa collegati. Questi sono i processi che Android tenterà di preservare maggiormente.

• Visibili: non sono importanti come quelli in foreground ma sono tutelati da Android. Infatti, avendo componenti ancora visibili all’utente anche se non vi interagiscono più, svolgono comunque un ruolo particolarmente critico. Anche in questo caso si tratta di Activity visibili e Service ad esse collegati;

Page 83: platforms

83

Developing for Android: Gestione della memoria 3/3

aCrm net training course Apr 2014

Service: contengono dei servizi in esecuzione che generalmente svolgono lavori molto utili all’utente anche se non direttamente collegati con ciò che egli vede nel display. Il loro livello di priorità può essere considerato medio

Background: contengono activity non più visibili all’utente. Questa è una categoria solitamente molto affollata composta dal gran numero di applicazioni che l’utente ha usato e messo poi in disparte, ad esempio premendo il tasto Home. Non sono considerati molto importanti e sono dei buoni candidati all’eliminazione in caso di scarsità di risorse;

Empty: sono praticamente vuoti nel senso che non hanno alcuna componente di sistema attiva. Vengono conservati solo per motivi di cache, per velocizzare la loro riattivazione qualora si rendesse necessaria. Come ovvio, sono i candidati “numero 1” all’eliminazione da parte del sistema operativo.

Page 84: platforms

84

Developing for Android: Architettura del progetto

aCrm net training course Apr 2014

• la cartella src che conterrà tutto il codice Java che scriveremo;

• la cartella res in cui risiederanno le cosiddette risorse dell’applicazione per la maggior parte configurate in XML ma non solo;

• il file AndroidManifest.xml anch’esso in XML che custodirà configurazioni e ruoli dei componenti della nostra app.

Page 85: platforms

85

Developing for Android: View e ViewGroup 1/2

aCrm net training course Apr 2014

• Il cuore dei controlli progettati da Android per i device mobili è rappresentato da due classi, android.view.View e android.view.ViewGroup.

• Una View è sostanzialmente un’area rettangolare nello schermo responsabile del disegno degli elementi grafici e della cattura e gestione degli eventi generati dall’utente. Un oggetto ViewGroup è anch’esso una View, ma che contiene altre View.

• Nella piattaforma Android si utilizza il concetto di “layout” per gestire l’impaginazione dei controlli all’interno di un contenitore di oggetti View.

Page 86: platforms

86

Developing for Android: View e ViewGroup 2/2

aCrm net training course Apr 2014

• Utilizzare i layout facilita la progettazione delle interfacce perché è più semplice orientare e posizionare i controlli che le compongono.

• Possiamo scegliere diversi approcci per la costruzione delle interfacce in ambiente Android:• Possiamo definire l’interfaccia interamente da codice• Possiamo scegliere di costruire le interfacce attraverso delle

configurazione XML• Possiamo scegliere un approccio “ibrido”, definire le interfacce in XML e

poi, attraverso un riferimento, modificarle e gestirle da codice.

Page 87: platforms

87

Developing for Android: Costruire un layout tramite XML 1/3

aCrm net training course Apr 2014

• Ogni file XML di layout deve contenere un solo elemento di root, l’elemento di root deve essere un oggetto View o ViewGroup. Una volta che si è definito l’elemento di root, possiamo aggiungere dei nuovi oggetti come elementi figli in modo da creare una View di tipo gerarchicoche definirà il nostro layout.

• Nel prossimo esempio vedremo un layout XML che usa un LinearLayout verticale per contenete una TextView and un Button

Page 88: platforms

88

Developing for Android: Costruire un layout tramite XML 2/3

aCrm net training course Apr 2014

• <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width=“400" android:layout_height=“100" android:text="Hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width=“250" android:layout_height=“100" android:text="Hello, I am a Button" /></LinearLayout>

Page 89: platforms

89

Developing for Android: Costruire un layout tramite XML 3/3

aCrm net training course Apr 2014

• Una volta definito il nostro layout, il file XML (ovviamente con estensione.xml) va inserito nella cartella del nostro progetto Android, res/layout/, in modo da essere compilato da Eclipse.

• Per ulteriori informazioni sui layout:• http://developer.android.com/guide/topics/resources/layout-resource.html

Page 90: platforms

90

Developing for Android: Intent 1/3

aCrm net training course Apr 2014

L’Intent è uno dei concetti e dei meccanismi fondamentali di Android

Un Intent è un meccanismo che descrive un’azione specifica, come “inviare un sms” 0 “chiamare un numero telefonico”: in Android praticamente ogni cosa passa attraverso un Intent, e possono essere utilizzati per riusare o sostituire diversi componenti software.

Ad esempio è disponibile un Intent “inviare una email”: se nella nostra applicazione abbiamo la necessità di gestire l’invio di email possiamo invocare l’Intent che il sistema ci mette a disposizione, oppure possiamo scriverne uno nuovo e utilizzare quest’ultimo nelle nostre Activity sostituendo l’Intent di default con quello implementato da noi.

Page 91: platforms

91

Developing for Android: Intent 2/3

aCrm net training course Apr 2014

Possiamo immaginare un Intent come un’azione che possiamo far invocare ad Android: un Intent può essere molto specifico ed essere richiamabile da una specifica Activity oppure può essere generico e disponibile per qualsiasi Activity che rispetta determinati criteri:

• trasmettere l’informazione per cui un particolare evento (o azione) si è verificato;• esplicitare un’intenzione che una Activity o un Service possono sfruttare per

eseguire un determinato compito o azione, solitamente con o su un particolare insieme di dati;• lanciare una particolare Activity o Service;• supportare l’interazione tra qualsiasi applicazione installata sul dispositivo

Android, senza doversi preoccupare di che tipo di applicazione sia o di quale componente software gli Intent facciano parte.

Page 92: platforms

92

Developing for Android: Intent 3/3

aCrm net training course Apr 2014

In pratica gli intent richiedono un azione oppuure facilitano la comunicazione tra I componenti all’interno dell’app, la comunicazione tra componenti avviene in 3 casi:

• Per far partire una Activity: Un Activity rappresenta una singola schermata di un’app. Si può far partire una nuova instanza di questa Activity passando un Intent alla funzione startActivity(). L’intent descrive l’attività di esecuzione e recupera i dati necessari.

• Per far partire un Servizio: Un Service è un componente per le operazioni che funziona senza una user interface. Si può far partire un servizio, per esempio un servizio che faccia il download di un file passando un Intent alla funzione startService(). L’ Intent fornirà al servizio la partenza e tutti i dati necessari

Page 93: platforms

93

Developing for Android: Setup dispositivi

aCrm net training course Apr 2014

• Prima di iniziare, Android:– Per utilizzare e installare le app sviluppate con ADT abilitare sul proprio device Android la

possibilità di installare le applicazioni che provengono da fonti diverse da Play Store– Abilitare la modalità sviluppatore e il debug su porta USB

Page 94: platforms

94

Developing for Android: Testare il proprio lavoro

aCrm net training course Apr 2014

• Android permette di testare il proprio lavoro direttamente su un dispositivo mobile in due modalità:– Installazione diretta da Eclipse– Installazione tramite command-line attraverso Android Debug Bridge (ADB)

Page 95: platforms

95

Developing for Android: Android Virtual Devices 1/2

aCrm net training course Apr 2014

Android Virtual Devices (ADV) permette di testare l’app tramite l’emulatore Android

Page 96: platforms

96

Developing for Android: Android Virtual Devices 2/2

aCrm net training course Apr 2014

Page 97: platforms

97

Developing for Android: Publishing

aCrm net training course Apr 2014

• Prima di pubblicare il vostro file .apk nel Google Play bisogna:– Rimuovere il debugging– E’ necessario “firmare” la versione da distribuire (Si usa l’SDK)– Assicurarsi che le risorse dell’applicazione siano aggiornate (succede che all’ultimo

vengano inseriti nuovi device che devono essere opportunamente configurati)– Se l’applicazione richiede un web-service per funzionare verificate che sia tutto

configurato– Assicuratevi di avere una private key opportunamente configurata per ogni servizio

incorporato (Google Maps API)

• Tips:– Attualmente Google Play non accetta apk più grandi di 50MB– Android fornisce l'accesso a uno strumento denominato ProGuard che serve per

ottimizzare il codice di base.

Page 98: platforms

98

Developing for Android: Google Play Distribution

aCrm net training course Apr 2014

• Google Play, rispetto all’Apple Store, permette una maggiore flessibilità nelle politiche commerciali:– Si possono determinare i paesi dove distribuire l’app e richiedere un prezzo diverso

per ogni paese– Decidere il content rating (classificazione dei contenuti: per tutti, bassa, media e alta)– Confermare le dimensioni dello schermo compatibili con l’app– Determinare il prezzo dell’app, Google ritiene che “se un’app è gratuita deve rimanere

gratuita”– Selezionare la categoria di appartenenza dell’app aiuta ad essere trovati dagli utenti– Google Play permette di pubblicare versioni beta della vostra App, basta fare in modo

che gli utenti ne siano consapevoli.

• Tips:– In un primo momento potete distribuire le vostre applicazioni anche via email, basta

allegare il file .apk come allegato.– Le apps possono essere distribuite anche attraverso siti web privati

Page 99: platforms

99

Developing for Android: Tempi di approvazione

Il tempo medio è di 2 giorni

aCrm net training course Apr 2014


Recommended