SlideShare a Scribd company logo
Platforms
Goal : Conoscere le piattaforme più utilizzate per lo sviluppo di
giochi ed applicazioni
Chi è Acrm net
-aCrm net è una società italiana specializzata nello sviluppo di CRM
open 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.
Contatti
aCrm Via Enrico Berlinguer, 18 (00054)
Fiumicino (Roma) Italia
www.acrmnet.com
info_net@acrmnet.it
Phone +39 06 95214464
Fax +39 06 92913681
Le nostre APPS
HERMES HEALTY SPIECES PET ISLAND SWAP ISLAND MORE OR LESS NAPOMEMO
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
3
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 “casual
Content”
• GameSalad per la creazione di giochi
• Appery.io per la creazione di app enterprise
aCrm net training course
Apr 2014
4
Creare Videogiochi senza scrivere una sola riga di
codice?
aCrm net training course
Apr 2014
5
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,
Windows
Versione Pro:Android, iOS, Mac,
Windows
Android, iOS, Mac,
Windows PC,
Windows 8,
Windows Phone 8,
Ubuntu, HTML5
Android, iOS, Mac,
Windows 8
Pro version
349$/anno
Personal edition
119$ totali
Pro version
59.99$ totali
Master
Collection
499.99$ totali
Pro Version
299$/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
6
Creare Videogiochi senza scrivere una sola riga di
codice?
aCrm net training course
Apr 2014
7
Drag & Drop Codice
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
8
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
9
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
10
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
11
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
12
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
13
• Facebook eliminò la sua app basata su HTML5 e ne sviluppò una basata al 100%
su codice nativo
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
14
• Prima di iniziare, iOS:
– E’ obbligatoria l’iscrizione all’Apple developer account
– l’utilizzo di un Mac
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
15
PhoneGap getting started
• Apriamo Eclipse e generiamo un nuovo progetto Android
aCrm net training course
Apr 2014
16
PhoneGap getting started
• Scegliamo il nome e il sistema operativo
aCrm net training course
Apr 2014
17
PhoneGap getting started
• Workspace e icone
aCrm net training course
Apr 2014
18
PhoneGap getting started
• Activity
aCrm net training course
Apr 2014
19
PhoneGap getting started
• Activity name e layout name
aCrm net training course
Apr 2014
20
PhoneGap getting started
• Folder di progetto e prossimi passi
aCrm net training course
Apr 2014
21
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
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
22
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
23
PhoneGap getting started
• Modificare il file AndroidManifest.xml
aCrm net training course
Apr 2014
24
<supports-screens
android: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" />
PhoneGap getting started
• Modificare il file MainActivity.java nella cartella src
aCrm net training course
Apr 2014
25
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 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new
PlaceholderFragment()).commit();
}
}
PhoneGap getting started
• Modificare il file MainActivity.java nella cartella src
aCrm net training course
Apr 2014
26
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");
}
}
PhoneGap getting started
• Android Virtual Device Manager
aCrm net training course
Apr 2014
27
PhoneGap getting started
• Emulatore Android
aCrm net training course
Apr 2014
28
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
29
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
30
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
31
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
32
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
33
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
34
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
35
aCrm net training course
Apr 2014
36
Native iOS Development
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
37
Native iOS Developing: Xcode
• Apple X-Code
– Source Editor
– Graphical User Interface Editor
aCrm net training course
Apr 2014
38
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
39
Native iOS Developing: Objective-C
• Objective-C è un linguaggio Object Oriented basato sul linguaggio C
aCrm net training course
Apr 2014
40
Native iOS Developing: Xcode
aCrm net training course
Apr 2014
41
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
42
Native iOS Developing: Xcode template 2/2
aCrm net training course
Apr 2014
43
Page-Based Application Tabbed Application Utility Application
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
44
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
45
Native iOS Developing: Xcode Interfaccia
aCrm net training course
Apr 2014
46
Native iOS Developing: Xcode Interfaccia
aCrm net training course
Apr 2014
47
• 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.
Native iOS Developing: Xcode Interfaccia
aCrm net training course
Apr 2014
48
• 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.
Native iOS Developing: Xcode Interfaccia
aCrm net training course
Apr 2014
49
• 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
Native iOS Developing: Xcode Interfaccia
aCrm net training course
Apr 2014
50
• 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
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
51
Native iOS Developing: View Controller e View
aCrm net training course
Apr 2014
52
Native iOS Developing: Sistema di riferimento
aCrm net training course
Apr 2014
53
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
54
Native iOS Developing: Sistema di riferimento
aCrm net training course
Apr 2014
55
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
56
Native iOS Developing: Sistema di riferimento
aCrm net training course
Apr 2014
57
Native iOS Developing: Sistema di riferimento
aCrm net training course
Apr 2014
58
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
59
Native iOS Developing: Sistema di riferimento
aCrm net training course
Apr 2014
60
secondView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;
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
61
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
62
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
63
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
64
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
65
• 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
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
66
• 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”).
Submitting your App : Tempi di approvazione
Il tempo medio è di 2 settimane
aCrm net training course
Apr 2014
67
Non fatevi prendere dallo sconforto se al primo invio l’app
non viene approvata
aCrm net training course
Apr 2014
68
Developing fo Android
Developing for Android
aCrm net training course
Apr 2014
69
• 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
Developing for Android: Il modello Google
aCrm net training course
Apr 2014
70
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
Developing for Android: Installare l’SDK
aCrm net training course
Apr 2014
71
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.
Developing for Android: Registrarsi a Google Play
aCrm net training course
Apr 2014
72
https://play.google.com/apps/publish/signup/
Developing for Android: Eclipse 1/2
aCrm net training course
Apr 2014
73
• Google supporta in modalità nativa Eclipse:
– Wizards e GUIs
– Testing diretto via porta USB
Developing for Android: Eclipse 2/2
aCrm net training course
Apr 2014
74
Developing for Android: Concetti base
aCrm net training course
Apr 2014
75
• 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.
Developing for Android: Concetti base
aCrm net training course
Apr 2014
76
• 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.
Developing for Android: Concetti base
aCrm net training course
Apr 2014
77
• 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
Developing for Android: Concetti base
aCrm net training course
Apr 2014
78
• 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()
Developing for Android: The Activity Life Cicle 2/2
aCrm net training course
Apr 2014
79
Developing for Android: Service, Content Provider e
Broadcast Receiver
aCrm net training course
Apr 2014
80
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).
Developing for Android: Gestione della memoria 1/3
aCrm net training course
Apr 2014
81
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.
Developing for Android: Gestione della memoria 2/3
aCrm net training course
Apr 2014
82
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;
Developing for Android: Gestione della memoria 3/3
aCrm net training course
Apr 2014
83
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.
Developing for Android: Architettura del progetto
aCrm net training course
Apr 2014
84
• 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.
Developing for Android: View e ViewGroup 1/2
aCrm net training course
Apr 2014
85
• 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.
Developing for Android: View e ViewGroup 2/2
aCrm net training course
Apr 2014
86
• 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.
Developing for Android: Costruire un layout tramite
XML 1/3
aCrm net training course
Apr 2014
87
• 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
Developing for Android: Costruire un layout tramite
XML 2/3
aCrm net training course
Apr 2014
88
• <?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>
Developing for Android: Costruire un layout tramite
XML 3/3
aCrm net training course
Apr 2014
89
• 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
Developing for Android: Intent 1/3
aCrm net training course
Apr 2014
90
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.
Developing for Android: Intent 2/3
aCrm net training course
Apr 2014
91
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.
Developing for Android: Intent 3/3
aCrm net training course
Apr 2014
92
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
Developing for Android: Setup dispositivi
aCrm net training course
Apr 2014
93
• 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
Developing for Android: Testare il proprio lavoro
aCrm net training course
Apr 2014
94
• 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)
Developing for Android: Android Virtual Devices 1/2
aCrm net training course
Apr 2014
95
Android Virtual Devices (ADV) permette di testare l’app tramite l’emulatore Android
Developing for Android: Android Virtual Devices 2/2
aCrm net training course
Apr 2014
96
Developing for Android: Publishing
aCrm net training course
Apr 2014
97
• 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.
Developing for Android: Google Play Distribution
aCrm net training course
Apr 2014
98
• 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
Developing for Android: Tempi di approvazione
Il tempo medio è di 2 giorni
aCrm net training course
Apr 2014
99

More Related Content

Viewers also liked

Define & design apps for success en
Define & design apps for success enDefine & design apps for success en
Define & design apps for success enAcrmnet s.r.l.
 
Define & design apps for success
Define & design apps for successDefine & design apps for success
Define & design apps for successAcrmnet s.r.l.
 
wow factor apps and ux design techniques ( for i phone and ipad )
wow factor apps and ux design techniques ( for i phone and ipad )wow factor apps and ux design techniques ( for i phone and ipad )
wow factor apps and ux design techniques ( for i phone and ipad )Acrmnet s.r.l.
 
Synasthesia
SynasthesiaSynasthesia
Synasthesia
Valentin Sviridov
 
Well being, biodiversity, post-2015 agenda, by Ashish Kothari
Well being, biodiversity, post-2015 agenda, by Ashish KothariWell being, biodiversity, post-2015 agenda, by Ashish Kothari
Well being, biodiversity, post-2015 agenda, by Ashish Kothari
Ashish Kothari
 
How to go viral?
How to go viral?How to go viral?
How to go viral?
Valentin Sviridov
 
Презентация проекта унф рарус дорхан
Презентация проекта унф рарус дорханПрезентация проекта унф рарус дорхан
Презентация проекта унф рарус дорханDoorHanLLC
 
Semantic wikis
Semantic wikisSemantic wikis
Semantic wikis
Valentin Sviridov
 
Как составить резюме без опыта работы
Как составить резюме без опыта работыКак составить резюме без опыта работы
Как составить резюме без опыта работы
JobRest.ru
 
Как написать идеальное резюме
Как написать идеальное резюмеКак написать идеальное резюме
Как написать идеальное резюме
JobRest.ru
 
Советы по найму
Советы по найму Советы по найму
Советы по найму
JobRest.ru
 
Storytelling
StorytellingStorytelling
Storytelling
Valentin Sviridov
 
Как НЕ следует вести себя на собеседовании
Как НЕ следует вести себя на собеседованииКак НЕ следует вести себя на собеседовании
Как НЕ следует вести себя на собеседовании
JobRest.ru
 
Дружить ли с начальником в социальных сетях?
Дружить ли с начальником в социальных сетях?Дружить ли с начальником в социальных сетях?
Дружить ли с начальником в социальных сетях?
JobRest.ru
 

Viewers also liked (16)

Define & design apps for success en
Define & design apps for success enDefine & design apps for success en
Define & design apps for success en
 
Define & design apps for success
Define & design apps for successDefine & design apps for success
Define & design apps for success
 
wow factor apps and ux design techniques ( for i phone and ipad )
wow factor apps and ux design techniques ( for i phone and ipad )wow factor apps and ux design techniques ( for i phone and ipad )
wow factor apps and ux design techniques ( for i phone and ipad )
 
Synasthesia
SynasthesiaSynasthesia
Synasthesia
 
Well being, biodiversity, post-2015 agenda, by Ashish Kothari
Well being, biodiversity, post-2015 agenda, by Ashish KothariWell being, biodiversity, post-2015 agenda, by Ashish Kothari
Well being, biodiversity, post-2015 agenda, by Ashish Kothari
 
lean stack
lean stacklean stack
lean stack
 
How to go viral?
How to go viral?How to go viral?
How to go viral?
 
Презентация проекта унф рарус дорхан
Презентация проекта унф рарус дорханПрезентация проекта унф рарус дорхан
Презентация проекта унф рарус дорхан
 
Semantic wikis
Semantic wikisSemantic wikis
Semantic wikis
 
Как составить резюме без опыта работы
Как составить резюме без опыта работыКак составить резюме без опыта работы
Как составить резюме без опыта работы
 
Как написать идеальное резюме
Как написать идеальное резюмеКак написать идеальное резюме
Как написать идеальное резюме
 
Советы по найму
Советы по найму Советы по найму
Советы по найму
 
Storytelling
StorytellingStorytelling
Storytelling
 
Как НЕ следует вести себя на собеседовании
Как НЕ следует вести себя на собеседованииКак НЕ следует вести себя на собеседовании
Как НЕ следует вести себя на собеседовании
 
Дружить ли с начальником в социальных сетях?
Дружить ли с начальником в социальных сетях?Дружить ли с начальником в социальных сетях?
Дружить ли с начальником в социальных сетях?
 
wireframe prototyping
wireframe prototypingwireframe prototyping
wireframe prototyping
 

Similar to platforms

Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatoreSMAU
 
Sviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi MobiliSviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi Mobili
Dominopoint - Italian Lotus User Group
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
Paolo Tosato
 
Intro xamarin forms
Intro xamarin formsIntro xamarin forms
Intro xamarin forms
Nicolò Carandini
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
Diego La Monica
 
Prodigyt at Next Step IBMi, 11 luglio 2017
Prodigyt at Next Step IBMi, 11 luglio 2017Prodigyt at Next Step IBMi, 11 luglio 2017
Prodigyt at Next Step IBMi, 11 luglio 2017
Ruggero Borgonovo
 
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
 Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
Microsoft Mobile Developer
 
Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapDotNetMarche
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione Avanzata
Stefano Sanna
 
Club degli sviluppatori: Sencha Touch - 1°parte
Club degli sviluppatori: Sencha Touch - 1°parteClub degli sviluppatori: Sencha Touch - 1°parte
Club degli sviluppatori: Sencha Touch - 1°parte
Giuseppe Toto
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5
Gabriele Gaggi
 
Servizi online della Microsoft per gli studenti
Servizi online della Microsoft per gli studentiServizi online della Microsoft per gli studenti
Servizi online della Microsoft per gli studenti
Wilfried Mbouenda Mbogne
 
Conoscere Android per poterlo Programmare
Conoscere Android per poterlo Programmare Conoscere Android per poterlo Programmare
Conoscere Android per poterlo Programmare
Flavius-Florin Harabor
 
Passare A Mac
Passare A MacPassare A Mac
Passare A Mac
Fabio Farè
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
Diego La Monica
 
Meet no Neet: presentazione del progetto App per organizzare eventi
Meet no Neet: presentazione del progetto App per organizzare eventiMeet no Neet: presentazione del progetto App per organizzare eventi
Meet no Neet: presentazione del progetto App per organizzare eventi
Fondazione Mondo Digitale
 
Il futuro di Windows Phone
Il futuro di Windows PhoneIl futuro di Windows Phone
Il futuro di Windows Phone
Matteo Pagani
 
Introduzione Xamarin
Introduzione XamarinIntroduzione Xamarin
Introduzione Xamarin
Andrea Tosato
 
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoWorkshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Gabriele Gaggi
 
Flutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaFlutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaforma
Commit University
 

Similar to platforms (20)

Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatore
 
Sviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi MobiliSviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi Mobili
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Intro xamarin forms
Intro xamarin formsIntro xamarin forms
Intro xamarin forms
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
 
Prodigyt at Next Step IBMi, 11 luglio 2017
Prodigyt at Next Step IBMi, 11 luglio 2017Prodigyt at Next Step IBMi, 11 luglio 2017
Prodigyt at Next Step IBMi, 11 luglio 2017
 
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
 Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
 
Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGap
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione Avanzata
 
Club degli sviluppatori: Sencha Touch - 1°parte
Club degli sviluppatori: Sencha Touch - 1°parteClub degli sviluppatori: Sencha Touch - 1°parte
Club degli sviluppatori: Sencha Touch - 1°parte
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5
 
Servizi online della Microsoft per gli studenti
Servizi online della Microsoft per gli studentiServizi online della Microsoft per gli studenti
Servizi online della Microsoft per gli studenti
 
Conoscere Android per poterlo Programmare
Conoscere Android per poterlo Programmare Conoscere Android per poterlo Programmare
Conoscere Android per poterlo Programmare
 
Passare A Mac
Passare A MacPassare A Mac
Passare A Mac
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
 
Meet no Neet: presentazione del progetto App per organizzare eventi
Meet no Neet: presentazione del progetto App per organizzare eventiMeet no Neet: presentazione del progetto App per organizzare eventi
Meet no Neet: presentazione del progetto App per organizzare eventi
 
Il futuro di Windows Phone
Il futuro di Windows PhoneIl futuro di Windows Phone
Il futuro di Windows Phone
 
Introduzione Xamarin
Introduzione XamarinIntroduzione Xamarin
Introduzione Xamarin
 
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoWorkshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
 
Flutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaFlutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaforma
 

platforms

  • 1. Platforms Goal : Conoscere le piattaforme più utilizzate per lo sviluppo di giochi ed applicazioni
  • 2. Chi è Acrm net -aCrm net è una società italiana specializzata nello sviluppo di CRM open 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. Contatti aCrm Via Enrico Berlinguer, 18 (00054) Fiumicino (Roma) Italia www.acrmnet.com info_net@acrmnet.it Phone +39 06 95214464 Fax +39 06 92913681 Le nostre APPS HERMES HEALTY SPIECES PET ISLAND SWAP ISLAND MORE OR LESS NAPOMEMO
  • 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 3
  • 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 “casual Content” • GameSalad per la creazione di giochi • Appery.io per la creazione di app enterprise aCrm net training course Apr 2014 4
  • 5. Creare Videogiochi senza scrivere una sola riga di codice? aCrm net training course Apr 2014 5
  • 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, Windows Versione Pro:Android, iOS, Mac, Windows Android, iOS, Mac, Windows PC, Windows 8, Windows Phone 8, Ubuntu, HTML5 Android, iOS, Mac, Windows 8 Pro version 349$/anno Personal edition 119$ totali Pro version 59.99$ totali Master Collection 499.99$ totali Pro Version 299$/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 6
  • 7. Creare Videogiochi senza scrivere una sola riga di codice? aCrm net training course Apr 2014 7 Drag & Drop Codice
  • 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 8
  • 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 9
  • 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 10
  • 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 11
  • 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 12
  • 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 13 • Facebook eliminò la sua app basata su HTML5 e ne sviluppò una basata al 100% su codice nativo
  • 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 14 • Prima di iniziare, iOS: – E’ obbligatoria l’iscrizione all’Apple developer account – l’utilizzo di un Mac
  • 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 15
  • 16. PhoneGap getting started • Apriamo Eclipse e generiamo un nuovo progetto Android aCrm net training course Apr 2014 16
  • 17. PhoneGap getting started • Scegliamo il nome e il sistema operativo aCrm net training course Apr 2014 17
  • 18. PhoneGap getting started • Workspace e icone aCrm net training course Apr 2014 18
  • 19. PhoneGap getting started • Activity aCrm net training course Apr 2014 19
  • 20. PhoneGap getting started • Activity name e layout name aCrm net training course Apr 2014 20
  • 21. PhoneGap getting started • Folder di progetto e prossimi passi aCrm net training course Apr 2014 21 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
  • 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 22
  • 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 23
  • 24. PhoneGap getting started • Modificare il file AndroidManifest.xml aCrm net training course Apr 2014 24 <supports-screens android: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" />
  • 25. PhoneGap getting started • Modificare il file MainActivity.java nella cartella src aCrm net training course Apr 2014 25 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 { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } }
  • 26. PhoneGap getting started • Modificare il file MainActivity.java nella cartella src aCrm net training course Apr 2014 26 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"); } }
  • 27. PhoneGap getting started • Android Virtual Device Manager aCrm net training course Apr 2014 27
  • 28. PhoneGap getting started • Emulatore Android aCrm net training course Apr 2014 28
  • 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 29
  • 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 30
  • 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 31
  • 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 32
  • 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 33
  • 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 34
  • 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 35
  • 36. aCrm net training course Apr 2014 36 Native iOS Development
  • 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 37
  • 38. Native iOS Developing: Xcode • Apple X-Code – Source Editor – Graphical User Interface Editor aCrm net training course Apr 2014 38
  • 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 39
  • 40. Native iOS Developing: Objective-C • Objective-C è un linguaggio Object Oriented basato sul linguaggio C aCrm net training course Apr 2014 40
  • 41. Native iOS Developing: Xcode aCrm net training course Apr 2014 41
  • 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 42
  • 43. Native iOS Developing: Xcode template 2/2 aCrm net training course Apr 2014 43 Page-Based Application Tabbed Application Utility Application
  • 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 44
  • 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 45
  • 46. Native iOS Developing: Xcode Interfaccia aCrm net training course Apr 2014 46
  • 47. Native iOS Developing: Xcode Interfaccia aCrm net training course Apr 2014 47 • 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.
  • 48. Native iOS Developing: Xcode Interfaccia aCrm net training course Apr 2014 48 • 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.
  • 49. Native iOS Developing: Xcode Interfaccia aCrm net training course Apr 2014 49 • 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
  • 50. Native iOS Developing: Xcode Interfaccia aCrm net training course Apr 2014 50 • 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
  • 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 51
  • 52. Native iOS Developing: View Controller e View aCrm net training course Apr 2014 52
  • 53. Native iOS Developing: Sistema di riferimento aCrm net training course Apr 2014 53
  • 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 54
  • 55. Native iOS Developing: Sistema di riferimento aCrm net training course Apr 2014 55
  • 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 56
  • 57. Native iOS Developing: Sistema di riferimento aCrm net training course Apr 2014 57
  • 58. Native iOS Developing: Sistema di riferimento aCrm net training course Apr 2014 58
  • 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 59
  • 60. Native iOS Developing: Sistema di riferimento aCrm net training course Apr 2014 60 secondView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;
  • 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 61
  • 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 62
  • 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 63
  • 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 64
  • 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 65 • 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
  • 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 66 • 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”).
  • 67. Submitting your App : Tempi di approvazione Il tempo medio è di 2 settimane aCrm net training course Apr 2014 67 Non fatevi prendere dallo sconforto se al primo invio l’app non viene approvata
  • 68. aCrm net training course Apr 2014 68 Developing fo Android
  • 69. Developing for Android aCrm net training course Apr 2014 69 • 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
  • 70. Developing for Android: Il modello Google aCrm net training course Apr 2014 70 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
  • 71. Developing for Android: Installare l’SDK aCrm net training course Apr 2014 71 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.
  • 72. Developing for Android: Registrarsi a Google Play aCrm net training course Apr 2014 72 https://play.google.com/apps/publish/signup/
  • 73. Developing for Android: Eclipse 1/2 aCrm net training course Apr 2014 73 • Google supporta in modalità nativa Eclipse: – Wizards e GUIs – Testing diretto via porta USB
  • 74. Developing for Android: Eclipse 2/2 aCrm net training course Apr 2014 74
  • 75. Developing for Android: Concetti base aCrm net training course Apr 2014 75 • 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.
  • 76. Developing for Android: Concetti base aCrm net training course Apr 2014 76 • 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.
  • 77. Developing for Android: Concetti base aCrm net training course Apr 2014 77 • 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
  • 78. Developing for Android: Concetti base aCrm net training course Apr 2014 78 • 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()
  • 79. Developing for Android: The Activity Life Cicle 2/2 aCrm net training course Apr 2014 79
  • 80. Developing for Android: Service, Content Provider e Broadcast Receiver aCrm net training course Apr 2014 80 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).
  • 81. Developing for Android: Gestione della memoria 1/3 aCrm net training course Apr 2014 81 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.
  • 82. Developing for Android: Gestione della memoria 2/3 aCrm net training course Apr 2014 82 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;
  • 83. Developing for Android: Gestione della memoria 3/3 aCrm net training course Apr 2014 83 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.
  • 84. Developing for Android: Architettura del progetto aCrm net training course Apr 2014 84 • 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.
  • 85. Developing for Android: View e ViewGroup 1/2 aCrm net training course Apr 2014 85 • 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.
  • 86. Developing for Android: View e ViewGroup 2/2 aCrm net training course Apr 2014 86 • 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.
  • 87. Developing for Android: Costruire un layout tramite XML 1/3 aCrm net training course Apr 2014 87 • 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
  • 88. Developing for Android: Costruire un layout tramite XML 2/3 aCrm net training course Apr 2014 88 • <?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>
  • 89. Developing for Android: Costruire un layout tramite XML 3/3 aCrm net training course Apr 2014 89 • 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
  • 90. Developing for Android: Intent 1/3 aCrm net training course Apr 2014 90 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.
  • 91. Developing for Android: Intent 2/3 aCrm net training course Apr 2014 91 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.
  • 92. Developing for Android: Intent 3/3 aCrm net training course Apr 2014 92 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
  • 93. Developing for Android: Setup dispositivi aCrm net training course Apr 2014 93 • 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
  • 94. Developing for Android: Testare il proprio lavoro aCrm net training course Apr 2014 94 • 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)
  • 95. Developing for Android: Android Virtual Devices 1/2 aCrm net training course Apr 2014 95 Android Virtual Devices (ADV) permette di testare l’app tramite l’emulatore Android
  • 96. Developing for Android: Android Virtual Devices 2/2 aCrm net training course Apr 2014 96
  • 97. Developing for Android: Publishing aCrm net training course Apr 2014 97 • 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.
  • 98. Developing for Android: Google Play Distribution aCrm net training course Apr 2014 98 • 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
  • 99. Developing for Android: Tempi di approvazione Il tempo medio è di 2 giorni aCrm net training course Apr 2014 99