Date post: | 22-May-2015 |
Category: |
Presentations & Public Speaking |
Upload: | acrmnet-srl |
View: | 619 times |
Download: | 0 times |
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 CRMopen source e di soluzioni ad hoc per il web e il mobile.
- aCrm net vanta più di 50 dipendenti che coprono una vasta gamma di figure professionali e ha ben due sedi in Europa: Roma e Ginevra.
ContattiaCrm Via Enrico Berlinguer, 18 (00054)Fiumicino (Roma) [email protected] +39 06 95214464Fax +39 06 92913681
Le nostre APPS
HERMES HEALTY SPIECES PET ISLAND SWAP ISLAND MORE OR LESS NAPOMEMO
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
4
Creare Videogiochi senza scrivere una sola riga di codice?
• Sono molti gli strumenti che stanno emergendo e che permettono di creare app senza scrivere codice
• L’utilizzo di interfacce plug&play è ormai all’ordine del giorno.
• TheAppBuilder per la creazione di app “casualContent”
• GameSalad per la creazione di giochi
• Appery.io per la creazione di app enterprise
aCrm net training course Apr 2014
5
Creare Videogiochi senza scrivere una sola riga di codice?
aCrm net training course Apr 2014
6
Versione Mac e Windows
Windows Funziona attraverso il browser web
Windows Versione Mac e Windows
Android e iOS Android e iOS (CocoonJS and Direct Canvas), Desktop, Windows 8, Windows Phone 8, HTML5
Versione gratuita: Android, WindowsVersione Pro:Android, iOS, Mac, Windows
Android, iOS, Mac, Windows PC, Windows 8, Windows Phone 8, Ubuntu, HTML5
Android, iOS, Mac, Windows 8
Pro version349$/anno
Personal edition119$ totali
Pro version59.99$ totali
Master Collection499.99$ totali
Pro Version299$/anno
Pro: facilità di testing con il simulatore
Pro: Ottime performance HTML5
Pro: Ottima scelta per sviluppare giochi per Android gratuitamente
Pro: Doppia posibilità di scrittura codice o di drag & drop
Pro: Facile da usare per i principianti
Contro: Richiede comunque un minimo di programmazione
Contro: Pessime performance in Android e iOS
Contro: Richiede un livello base di programmazione
Contro: Il test dei giochi non è performante
Contro: Poche features
Creare Videogiochi senza scrivere una sola riga di codice?
aCrm net training course Apr 2014
7
Creare Videogiochi senza scrivere una sola riga di codice?
aCrm net training course Apr 2014
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
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
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
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
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
13
Adobe PhoneGap cosa non si può fare
• Accesso limitato alle ultime funzionalità del sistema operativo• Codice personalizzato• Basse performance
aCrm net training course Apr 2014
• Facebook eliminò la sua app basata su HTML5 e ne sviluppò una basata al 100% su codice nativo
14
Creating apps with Adobe PhoneGap
• Prima di iniziare, Android:– Per utilizzare e installare le app di PhoneGap abilitare sul proprio device Android la
possibilità di installare le applicazioni che provengono da fonti diverse da Play Store– Abilitare la modalità sviluppatore e il debug su porta USB
aCrm net training course Apr 2014
• Prima di iniziare, iOS:– E’ obbligatoria l’iscrizione all’Apple developer account– l’utilizzo di un Mac
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
16
PhoneGap getting started
• Apriamo Eclipse e generiamo un nuovo progetto Android
aCrm net training course Apr 2014
17
PhoneGap getting started
• Scegliamo il nome e il sistema operativo
aCrm net training course Apr 2014
18
PhoneGap getting started
• Workspace e icone
aCrm net training course Apr 2014
19
PhoneGap getting started
• Activity
aCrm net training course Apr 2014
20
PhoneGap getting started
• Activity name e layout name
aCrm net training course Apr 2014
21
PhoneGap getting started
• Folder di progetto e prossimi passi
aCrm net training course Apr 2014
1) Caricare i files di progetto(https://github.com/phonegap/phonegap-start)
2) Aggiungere la libreria di phonehap (cordova)
3) Modifica del file AndroidManifest.xml
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
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
24
PhoneGap getting started
• Modificare il file AndroidManifest.xml
aCrm net training course Apr 2014
<supports-screensandroid:anyDensity="true"android:largeScreens="true"android:normalScreens="true"android:resizeable="true"android:smallScreens="true" />
<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.RECEIVE_SMS" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.RECORD_VIDEO"/><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.GET_ACCOUNTS" /><uses-permission android:name="android.permission.BROADCAST_STICKY" />
25
PhoneGap getting started
• Modificare il file MainActivity.java nella cartella src
aCrm net training course Apr 2014
package com.example.phonegaptest;
import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBar;import android.support.v4.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.os.Build;
public class MainActivity extends ActionBarActivity {
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();}
}
26
PhoneGap getting started
• Modificare il file MainActivity.java nella cartella src
aCrm net training course Apr 2014
package com.example.phonegaptest;
import org.apache.cordova.DroidGap;import android.os.Bundle; public class MainActivity extends DroidGap { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/www/index.html"); }}
27
PhoneGap getting started
• Android Virtual Device Manager
aCrm net training course Apr 2014
28
PhoneGap getting started
• Emulatore Android
aCrm net training course Apr 2014
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
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
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
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
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
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
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
36aCrm net training course Apr 2014
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
38
Native iOS Developing: Xcode
• Apple X-Code
– Source Editor
– Graphical User Interface Editor
aCrm net training course Apr 2014
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
40
Native iOS Developing: Objective-C
• Objective-C è un linguaggio Object Oriented basato sul linguaggio C
aCrm net training course Apr 2014
41
Native iOS Developing: Xcode
aCrm net training course Apr 2014
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
43
Native iOS Developing: Xcode template 2/2
aCrm net training course Apr 2014
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
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
46
Native iOS Developing: Xcode Interfaccia
aCrm net training course Apr 2014
47
Native iOS Developing: Xcode Interfaccia
aCrm net training course Apr 2014
• Nel menu di sinistra, sulla prima icona a forma di cartella ci verrà mostrata la gerarchia dei file del nostro progetto.
• Il tasto in giallo ci porterà alla finestra di warning ed errori.
48
Native iOS Developing: Xcode Interfaccia
aCrm net training course Apr 2014
• Altra parte molto importante dell’interfaccia, sono i pulsanti per l’esecuzione e lo stop dell’applicazione.
• Il tasto play compila ed esegue ma esistono delle scorciatoie da tastiera sia per compilare (Build) lanciare (Run) e fermare (Stop) che sono molto comode e veloci da utilizzare:– Build: shift+cmd+B– Run: cmd+R– Stop: shift+cmd+invio.
• Alla destra dei pulsanti Run e Stop troviamo un’altro pulsante molto utile che ci permetterà di decidere quale schema utilizzare nella fase di compilazione e su quale dispositivo installare l’applicazione.
• facendo clic sul nome del dispositivo, potremo scegliere se installare l’app sul dispositivo fisico o sul simulatore.
49
Native iOS Developing: Xcode Interfaccia
aCrm net training course Apr 2014
• Al momento del lancio dell’app, viene istanziato un oggetto della classe UIApplication il quale svolge il ruolo di coordinatore dell’intera applicazione smistando i vari eventi, generati dall’utente, verso gli oggetti opportuni.
• Successivamente viene creata un’istanza della classe AppDelegate. La UIApplication è un design pattern di tipo creazionale ed il suo compito è quello di assicurare che durante l’esecuzione dell’applicazione (o di un programma in generale), una determinata classe venga istanziata una sola volta.
• L’AppDelegate deriva dalla UIResponder
50
Native iOS Developing: Xcode Interfaccia
aCrm net training course Apr 2014
• Al momento del lancio dell’app, viene istanziato un oggetto della classe UIApplication il quale svolge il ruolo di coordinatore dell’intera applicazione smistando i vari eventi, generati dall’utente, verso gli oggetti opportuni.
• Successivamente viene creata un’istanza della classe AppDelegate. La UIApplication è un design pattern di tipo creazionale ed il suo compito è quello di assicurare che durante l’esecuzione dell’applicazione (o di un programma in generale), una determinata classe venga istanziata una sola volta.
• L’AppDelegate deriva dalla UIResponder
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
52
Native iOS Developing: View Controller e View
aCrm net training course Apr 2014
53
Native iOS Developing: Sistema di riferimento
aCrm net training course Apr 2014
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
55
Native iOS Developing: Sistema di riferimento
aCrm net training course Apr 2014
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
57
Native iOS Developing: Sistema di riferimento
aCrm net training course Apr 2014
58
Native iOS Developing: Sistema di riferimento
aCrm net training course Apr 2014
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
60
Native iOS Developing: Sistema di riferimento
aCrm net training course Apr 2014
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
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
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
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
65
Submitting your App 3/4
• E’ possibile iscriversi al programma Apple come– Individual - Standard (99$ = 79€)– Company - Enterprise(299$)
aCrm net training course Apr 2014
• Tutti i campi richiesti sono obbligatori– Nome, descrizione, icone, screenshoot, informazioni di contatto– Non fornire tutti i campi è il modo migliore per non farsi approvare l’app
• Tips– Molte aziende aggiornano anche gli screenshoot dell’applicazione dopo ogni
update in questo modo mostrano i miglioramenti dell’app
66
Submitting your App 4/4
• Verifica dell’app create– Prima di procedere con l’upload dell’app, testarla e verificare che rispetti tutte le
norme descritte nel documento HIG
aCrm net training course Apr 2014
• Firmare digitalmente il software– creare un certificato di distribuzione (tramite l’applicazione Keychain Access) – aprire un nuovo ID Apple– elaborare un “Provisioning Profile” di distribuzione tramite l’apposito portale
(“Provisioning portal”).
67
Submitting your App : Tempi di approvazione
Il tempo medio è di 2 settimane
aCrm net training course Apr 2014
Non fatevi prendere dallo sconforto se al primo invio l’app non viene approvata
68aCrm net training course Apr 2014
Developing fo Android
69
Developing for Android
aCrm net training course Apr 2014
• Google’s Android OS è il sistema operativo mobile leader del settore– Apple con il suo developer program è la prima linea di difesa del consumatore, per
Android lo sviluppatore deve supportare il consumatore in ogni fase
70
Developing for Android: Il modello Google
aCrm net training course Apr 2014
Esistono molti sentieri che portano alla stessa montagna
Pubblicare un app su Google Play è molto più facile rispetto ad Apple, questo perché Google vuole che lo sviluppatore si concentri sul modo migliore di creare il prodotto
71
Developing for Android: Installare l’SDK
aCrm net training course Apr 2014
Il file SDK per Android è reperibile sul sito:http://developer.android.com/sdk Il download include l’Android Developer Tools (ADT)• Eclipse Integrated Developer Environment (IDE) • ADT plugin • SDK tools• platform tools• the latest version of Android• the Android emulator.
72
Developing for Android: Registrarsi a Google Play
aCrm net training course Apr 2014
https://play.google.com/apps/publish/signup/
73
Developing for Android: Eclipse 1/2
aCrm net training course Apr 2014
• Google supporta in modalità nativa Eclipse:
– Wizards e GUIs
– Testing diretto via porta USB
74
Developing for Android: Eclipse 2/2
aCrm net training course Apr 2014
75
Developing for Android: Concetti base
aCrm net training course Apr 2014
• Salvaguardia delle risorse: essendo progettato per sistemi embedded, quindi dotati di poche risorse di memoria, Android è un SO parsimonioso. Android è particolarmente bravo nel distruggere e ricreare parti dell’applicazione in maniera del tutto impercettibile all’utente.
• Sicurezza: Android è figlio di Linux. Ogni applicazione è un utente a sé stante e vive in un proprio processo in cui viene allocata una nuova istanza della virtual machine, ciò per evitare che il crash di un’applicazione propaghi instabilità alle altre app in esecuzione. Questa forma di “isolamento” viene riflessa anche sulla memoria di massa in quanto ogni applicazione ha un suo spazio in cui lavorare e custodire i propri dati.
• E’ assolutamente vietata, qualsiasi pratica che porti un’app ad invadere lo spazio riservato ad un’altra.
76
Developing for Android: Concetti base
aCrm net training course Apr 2014
• Una volta installato sul device ogni app Android risiede in una sandbox: • Il sistema operativo Android è un sistema Linux multi-utente e ogni App viene
definita come un diverso utente.• Di default, il sistema assegna ad ogni app un Linux user ID univoco (L’ID è usato
solo dal sistema ed è sconosciuto all’app) . Il sistema imposta le autorizzazioni per tutti i file di un'applicazione in modo che solo l'ID utente assegnato a tale applicazione possa accedervi.
• Ogni processo ha la sua virtual machine, e quindi il codice di una app gira in maniera isolata rispetto alle altre app.
• Di default, ogni app viene eseguita in un proprio processo Linux. Android inizia il processo quando uno dei componenti della app bisogno di essere eseguito, quindi arresta il processo quando non è necessario o quando il sistema deve recuperare la memoria per altre applicazioni.
77
Developing for Android: Concetti base
aCrm net training course Apr 2014
• E’, ovviamente, possibile, trasferire o utilizzare dei dati da un’app all’altra :
• E’ possibile fare in modo che due app abbiano lo stesso Linux user ID, in questo caso le app hanno la possibilità di accedere ognuna ai file dell’altra. Per risparmiare le risorse del sistema, le app con lo stesso Linus user ID possono essere avviate dallo stesso processo Linux e possono quindi condividere la stessa VM.
• Un app può richiedere il permesso di accedere ai dati presenti nel device, come I contatti utente, I messaggi SMS, I dati presenti su SD card, ecc.. . In questo caso tutte le autorizzazioni vanno richieste all’utente in fase di installazione dell’app
78
Developing for Android: Concetti base
aCrm net training course Apr 2014
• Android affida le sue funzionalità a quattro tipi di componenti: Activity, Service, Content Provider e BroadcastReceiver
• Un’Activity è un’interfaccia utente. Ogni volta che si usa un’app generalmente si interagisce con una o più “pagine” mediante le quali si consultano dati o si immettono input. Ovviamente la realizzazione di Activity è il punto di partenza di ogni corso di programmazione Android visto che è il componente con cui l’utente ha il contatto più diretto.
• ogni Activity è responsabile del salvataggio del proprio stato in modo da poterlo ristabilire successivamente come parte del ciclo di vita dell’applicazione.
Le Activity di Android:
1. Created, Quando un’attività viene creata: onCreate()2. Started, Quando è visibile sullo schermo: onStart()3. Resumed, Quando torna visibile dopo essere stata in pausa: onResume()4. Paused, Parzialmente visibile (è stata oscurata da un’altra attività): onPause()5. Stopped, Non visibile e non in esecuzione, può essere rispresa (resumed): onStop()6. Destroyed, Non può essere ripresa: onDestroy()
79
Developing for Android: The Activity Life Cicle 2/2
aCrm net training course Apr 2014
80
Developing for Android: Service, Content Provider e Broadcast Receiver
aCrm net training course Apr 2014
Un componente Service svolge un ruolo opposto all’Activity. Infatti rappresenta un lavoro – generalemente lungo e continuato – che viene svolto interamente in background senza bisogno di interazione diretta con l’utente. I Service spesso preparano i dati che le activity devono mostrare all’utente permettendo una reattività maggiore nel momento della visualizzazione.
Un componente di tipo Content Provider ha lo scopo di organizzare la condivisione di dati tra applicazioni. Questi componenti permettono di condividere, contenuti di database, contenuti su file o contenuti reperibili tramite rete.
Un componente Broadcast Receiver è un componente che reagisce ad un invio di messaggi a livello di sistema con cui Android notifica l’avvenimento di un determinato evento (l’arrivo di un SMS o di una chiamata).
81
Developing for Android: Gestione della memoria 1/3
aCrm net training course Apr 2014
Android sa che il fattore fondamentale della sopravvivenza di un sistema mobile è la corretta gestione delle risorse. Quindi farà in modo di tenere in vita ogni processo il più a lungo possibile. Ciò non toglie che in alcune circostanze ed in base alle risorse hardware a disposizione, il sistema operativo si troverà nella necessità di dover liberare memoria abbattendo processi.
Sì ma: quale processo abbattere?La discriminante è quanto un’applicazione, candidata all’eliminazione, sia importante per la user experience. Maggiore sarà l’importanza riconosciuta, minori saranno le probabilità che venga arrestata.Così facendo Android tenterà di raggiungere il suo duplice scopo: preservare il sistema e salvaguardare l’utente.
82
Developing for Android: Gestione della memoria 2/3
aCrm net training course Apr 2014
I processi possono essere classificati, in ordine di importanza decrescente, come:• Foreground: sono quelli che interagiscono direttamente o indirettamente con
l’utente. Stiamo parlando delle applicazioni che, contengono l’Activity attualmente utilizzata o i Service ad essa collegati. Questi sono i processi che Android tenterà di preservare maggiormente.
• Visibili: non sono importanti come quelli in foreground ma sono tutelati da Android. Infatti, avendo componenti ancora visibili all’utente anche se non vi interagiscono più, svolgono comunque un ruolo particolarmente critico. Anche in questo caso si tratta di Activity visibili e Service ad esse collegati;
83
Developing for Android: Gestione della memoria 3/3
aCrm net training course Apr 2014
Service: contengono dei servizi in esecuzione che generalmente svolgono lavori molto utili all’utente anche se non direttamente collegati con ciò che egli vede nel display. Il loro livello di priorità può essere considerato medio
Background: contengono activity non più visibili all’utente. Questa è una categoria solitamente molto affollata composta dal gran numero di applicazioni che l’utente ha usato e messo poi in disparte, ad esempio premendo il tasto Home. Non sono considerati molto importanti e sono dei buoni candidati all’eliminazione in caso di scarsità di risorse;
Empty: sono praticamente vuoti nel senso che non hanno alcuna componente di sistema attiva. Vengono conservati solo per motivi di cache, per velocizzare la loro riattivazione qualora si rendesse necessaria. Come ovvio, sono i candidati “numero 1” all’eliminazione da parte del sistema operativo.
84
Developing for Android: Architettura del progetto
aCrm net training course Apr 2014
• la cartella src che conterrà tutto il codice Java che scriveremo;
• la cartella res in cui risiederanno le cosiddette risorse dell’applicazione per la maggior parte configurate in XML ma non solo;
• il file AndroidManifest.xml anch’esso in XML che custodirà configurazioni e ruoli dei componenti della nostra app.
85
Developing for Android: View e ViewGroup 1/2
aCrm net training course Apr 2014
• Il cuore dei controlli progettati da Android per i device mobili è rappresentato da due classi, android.view.View e android.view.ViewGroup.
• Una View è sostanzialmente un’area rettangolare nello schermo responsabile del disegno degli elementi grafici e della cattura e gestione degli eventi generati dall’utente. Un oggetto ViewGroup è anch’esso una View, ma che contiene altre View.
• Nella piattaforma Android si utilizza il concetto di “layout” per gestire l’impaginazione dei controlli all’interno di un contenitore di oggetti View.
86
Developing for Android: View e ViewGroup 2/2
aCrm net training course Apr 2014
• Utilizzare i layout facilita la progettazione delle interfacce perché è più semplice orientare e posizionare i controlli che le compongono.
• Possiamo scegliere diversi approcci per la costruzione delle interfacce in ambiente Android:• Possiamo definire l’interfaccia interamente da codice• Possiamo scegliere di costruire le interfacce attraverso delle
configurazione XML• Possiamo scegliere un approccio “ibrido”, definire le interfacce in XML e
poi, attraverso un riferimento, modificarle e gestirle da codice.
87
Developing for Android: Costruire un layout tramite XML 1/3
aCrm net training course Apr 2014
• Ogni file XML di layout deve contenere un solo elemento di root, l’elemento di root deve essere un oggetto View o ViewGroup. Una volta che si è definito l’elemento di root, possiamo aggiungere dei nuovi oggetti come elementi figli in modo da creare una View di tipo gerarchicoche definirà il nostro layout.
• Nel prossimo esempio vedremo un layout XML che usa un LinearLayout verticale per contenete una TextView and un Button
88
Developing for Android: Costruire un layout tramite XML 2/3
aCrm net training course Apr 2014
• <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width=“400" android:layout_height=“100" android:text="Hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width=“250" android:layout_height=“100" android:text="Hello, I am a Button" /></LinearLayout>
89
Developing for Android: Costruire un layout tramite XML 3/3
aCrm net training course Apr 2014
• Una volta definito il nostro layout, il file XML (ovviamente con estensione.xml) va inserito nella cartella del nostro progetto Android, res/layout/, in modo da essere compilato da Eclipse.
• Per ulteriori informazioni sui layout:• http://developer.android.com/guide/topics/resources/layout-resource.html
90
Developing for Android: Intent 1/3
aCrm net training course Apr 2014
L’Intent è uno dei concetti e dei meccanismi fondamentali di Android
Un Intent è un meccanismo che descrive un’azione specifica, come “inviare un sms” 0 “chiamare un numero telefonico”: in Android praticamente ogni cosa passa attraverso un Intent, e possono essere utilizzati per riusare o sostituire diversi componenti software.
Ad esempio è disponibile un Intent “inviare una email”: se nella nostra applicazione abbiamo la necessità di gestire l’invio di email possiamo invocare l’Intent che il sistema ci mette a disposizione, oppure possiamo scriverne uno nuovo e utilizzare quest’ultimo nelle nostre Activity sostituendo l’Intent di default con quello implementato da noi.
91
Developing for Android: Intent 2/3
aCrm net training course Apr 2014
Possiamo immaginare un Intent come un’azione che possiamo far invocare ad Android: un Intent può essere molto specifico ed essere richiamabile da una specifica Activity oppure può essere generico e disponibile per qualsiasi Activity che rispetta determinati criteri:
• trasmettere l’informazione per cui un particolare evento (o azione) si è verificato;• esplicitare un’intenzione che una Activity o un Service possono sfruttare per
eseguire un determinato compito o azione, solitamente con o su un particolare insieme di dati;• lanciare una particolare Activity o Service;• supportare l’interazione tra qualsiasi applicazione installata sul dispositivo
Android, senza doversi preoccupare di che tipo di applicazione sia o di quale componente software gli Intent facciano parte.
92
Developing for Android: Intent 3/3
aCrm net training course Apr 2014
In pratica gli intent richiedono un azione oppuure facilitano la comunicazione tra I componenti all’interno dell’app, la comunicazione tra componenti avviene in 3 casi:
• Per far partire una Activity: Un Activity rappresenta una singola schermata di un’app. Si può far partire una nuova instanza di questa Activity passando un Intent alla funzione startActivity(). L’intent descrive l’attività di esecuzione e recupera i dati necessari.
• Per far partire un Servizio: Un Service è un componente per le operazioni che funziona senza una user interface. Si può far partire un servizio, per esempio un servizio che faccia il download di un file passando un Intent alla funzione startService(). L’ Intent fornirà al servizio la partenza e tutti i dati necessari
93
Developing for Android: Setup dispositivi
aCrm net training course Apr 2014
• Prima di iniziare, Android:– Per utilizzare e installare le app sviluppate con ADT abilitare sul proprio device Android la
possibilità di installare le applicazioni che provengono da fonti diverse da Play Store– Abilitare la modalità sviluppatore e il debug su porta USB
94
Developing for Android: Testare il proprio lavoro
aCrm net training course Apr 2014
• Android permette di testare il proprio lavoro direttamente su un dispositivo mobile in due modalità:– Installazione diretta da Eclipse– Installazione tramite command-line attraverso Android Debug Bridge (ADB)
95
Developing for Android: Android Virtual Devices 1/2
aCrm net training course Apr 2014
Android Virtual Devices (ADV) permette di testare l’app tramite l’emulatore Android
96
Developing for Android: Android Virtual Devices 2/2
aCrm net training course Apr 2014
97
Developing for Android: Publishing
aCrm net training course Apr 2014
• Prima di pubblicare il vostro file .apk nel Google Play bisogna:– Rimuovere il debugging– E’ necessario “firmare” la versione da distribuire (Si usa l’SDK)– Assicurarsi che le risorse dell’applicazione siano aggiornate (succede che all’ultimo
vengano inseriti nuovi device che devono essere opportunamente configurati)– Se l’applicazione richiede un web-service per funzionare verificate che sia tutto
configurato– Assicuratevi di avere una private key opportunamente configurata per ogni servizio
incorporato (Google Maps API)
• Tips:– Attualmente Google Play non accetta apk più grandi di 50MB– Android fornisce l'accesso a uno strumento denominato ProGuard che serve per
ottimizzare il codice di base.
98
Developing for Android: Google Play Distribution
aCrm net training course Apr 2014
• Google Play, rispetto all’Apple Store, permette una maggiore flessibilità nelle politiche commerciali:– Si possono determinare i paesi dove distribuire l’app e richiedere un prezzo diverso
per ogni paese– Decidere il content rating (classificazione dei contenuti: per tutti, bassa, media e alta)– Confermare le dimensioni dello schermo compatibili con l’app– Determinare il prezzo dell’app, Google ritiene che “se un’app è gratuita deve rimanere
gratuita”– Selezionare la categoria di appartenenza dell’app aiuta ad essere trovati dagli utenti– Google Play permette di pubblicare versioni beta della vostra App, basta fare in modo
che gli utenti ne siano consapevoli.
• Tips:– In un primo momento potete distribuire le vostre applicazioni anche via email, basta
allegare il file .apk come allegato.– Le apps possono essere distribuite anche attraverso siti web privati
99
Developing for Android: Tempi di approvazione
Il tempo medio è di 2 giorni
aCrm net training course Apr 2014