25
Android vs iOS Domenico Gabriele Android Developer Francesco Gambino iOS Specialist

Android vs iOS

Embed Size (px)

Citation preview

Android vs iOS

Domenico GabrieleAndroid Developer

Francesco Gambino iOS Specialist

Francesco Gambino● Dottore Magistrale in Informatica (Unical)● iOS & Mobile Specialist● 6 anni di esperienza nella progettazione e sviluppo di applicazioni mobile

ad alte prestazioni con l’integrazione delle tecnologie più avanzate (Location tracking, Realtà Aumentata, Face Detection), programmazione di sensori e realizzazione di interfacce custom con grande attenzione all’usabilità.

Domenico Gabriele●Laurea in Informatrica (Unical)●Java & Android Developer●3 Anni di esperienza in Android

● 3 Anni di esperienza di sviluppo in applicazioni Web java based

Chi siamo

Android

● Nexus 5, 6, 9 Galaxy S 5, 6, …

● 4 screen size

● 6 screen densities (mdpi, hdpi, xhdpi, …)

● Lollipop, ICS, Jelly Bean e… ALTRO

iOS

● iPhone, iPad, iPod

● 3 screen densities (@1x, @2x, @3x)

● iOS 8, 7 e… STOP

Strumenti

Android

● Android Studio

● Android

● JAVA/ C++

● ART/ Dalvik

● Emulatore

● Lifecycle Activity

iOS

● Xcode

● Objective-C / Swift

● Cocoa Touch (Foundation Kit, UIKit)

● Automatic Reference Counting (ARC)

● Simulatore

● Model-View-Controller (MVC)

Domenico Gabriele
Conviene secondo me mettere prima android e dopo java
Francesco Gambino
no, prima il linguaggio, poi la libreria secondo me
Francesco Gambino
C++ sebbene possa essere utilizzato per android potrebbe essere fuorviante per chi vede la slide, lo direi solo a voce
Domenico Gabriele
Ok Per me eè essenziale invertirli erche si collega alla gestione della memoria ART

Android

string = string.replace("to", "xyz");

iOS

[string stringByReplacingOccurrencesOfString:@"to" withString:@"xyz" options:0 range:NSMakeRange(0, string.length)];

Activity

● Una Activity rappresenta una possibile interazione dell’utente con l’applicazione e può essere associata al concetto di schermata.

● Essa si occupa di creare la finestra nel quale può essere associata l’UI ma non è strettamente legata ad essa.

● Importanza fondamendale è il Lifecycle di un’Activity

Lifecycle activity

Model-View-Controller

● È l’unità fondamentale per lo sviluppo di una app iOS

● Interagisce con i Model e altri Controller per presentare una UI coerente

● È strettamente associato ad una view, che gestisce durante il suo ciclo di vita

○ carica, effettua il layout e il resize

○ si occupa di aggiornare il contenuto

○ intercetta gli eventi

UIViewController

App lifecycle e ViewController lifecycle

View e Layout In Android la definizione della user interface si basa tutta sul concetto di View e ViewGroup

● View : Questa classe rappresenta l'elemento fondamentale per i componenti dell'interfaccia utente. TUTTI gli elementi grafici ereditano da essa. TextView , Button, EditText…

● ViewGroup: Una speciale View che può contenere altre view . Questa è la classe base di tutti i layout. LinearLayout,RelativeLayout,ListView

LinearLayout RelativeLayout ListView

● UI realizzata tramite Interface Builder

● XIB vs Storyboard

● Composizione tramite drag&drop

● Specifica del layout tramite Autolayout

○ definizione di vincoli tra gli elementi grafici (~ Relative Layout Android)

○ UI dinamica che si adatta a diverse dimensioni dello schermo, orientamento e localizzazione

View e layout

Relative layout vs Autolayout

Esempio di LayoutiOS

● referenziare il vincolo di interesse

● manipolarlo manualmente in maniera da ottenere il risultato desiderato

priceViewTop = -priceView.height;

[self.view layoutIfNeeded];

Android

view.setVisibility(View.GONE);

Include : Si possono includere Layout in altri tramite include

Aperto Chiuso

Comunicazione inter-app

● Le app sul dispositivo possono comunicare tra loro solo in maniera indiretta -> SANDBOX

● URL Schemes

○ la app registra un URL custom

○ attraverso l’URL altre app possono aprire la app

○ la app originale può presentare i dati contenuti nell’URL

● API per l’accesso alle app di sistema: camera, telefono, contatti, mappe, calendario, salute, passbook, etc.

● Extensions (>= iOS 8)

○ danno accesso a funzionalità e contenuti di altre applicazioni

● Implicit Intent :

Uri number = Uri.parse("tel:5551234");

Intent callIntent = new

Intent(Intent.ACTION_DIAL, number);

● StartActivityForResult(Intent,

RequestCode);

protected void onActivityResult(int

requestCode, int resultCode, Intent

data) ;

● Content Providers

getContentResolver().query(URI,

Selection,SelectionArgs,SortOrder);

Android iOS

Gestione permessi

● Le permission In Android vengono specificate tutte all’interno del file Manifest

● Tutti i permessi definiti nel Manifest vengono mostrati essere accettati dall’utente al momento dell'installazione del’app

● Uses-feature Risorse hardware o software. Non è detto che il device le possieda

● Permesso obbligatorio per accedere a determinate feature del dispositivo / sistema

○ notifiche, posizione, camera, contatti, aggiornamenti in background, ...

● Responsabilità dello sviluppatore gestire il processo di request / response

● Richiesta one-shot

Android iOS

Esecuzione background

● Service

● Started : Avviato tramite

startService(). Può rimanere in

background per un periodo di

tempo indefinito.

● Bound: Avvitao tramite

bindService(). Offre una client-

server interface.Legato a uno o

piu componenti. ● System Service

● Download Manager : gestione del

download demandata al sistema

● Sync Adapter● Broadcast Receiver

La piattaforma permette di

● completare un breve task partito in foreground (esecuzione finita)

● completare download partiti in foreground affidandoli al sistema

● eseguire task specifici avanzati in background

○ audio○ location○ voip○ external-accessory○ background fetch○ remote notifications

Android iOS

● Poco customizzabili: solo suono e quick actions

● Protocollo TCP (con TLS/SSL), comunicazione unidirezionale

○ Server -> Server Apple -> Device

● Payload max 2KB (prima 256 bytes!)

● Per poter utilizzare le notifiche:

○ richiesta permesso one-shot

○ registrazione al server remoto

○ gestire gli eventi (notifica in-app, apertura da zero della app)

● Ricche e altamente customizzabili

● Protocolli: HTTP, XMPP

● Payload max 4KB

● Presentazione

○ Permesi richiesti all'installazione dell’app

○ fuori app: responsabilità sviluppatore(NotificationManager)

○ in-app: avvio:responsabilità sviluppatore (NotificationManager)

Notifiche PushAndroid iOS

Notifiche pushiOSAndroid

● Account sviluppatore sul Google Play 25€, una tantum

● Fee su paid apps e in-app purchase: 30%

● Servizi:

● Google Play Developer Console

● Scelta del prezzo libera per ogni paese

● Non perdere il Keystore per la release App altrimente sarà impossibile pubblicare aggiornamenti.

Pubblicazione

● Apple Developer account: 99€ / anno

● Fee su paid apps e in-app purchase: 30-40 %

● Servizi:

○ App Store (Watch), Mac App Store

○ Risorse e materiali grafici di supporto

○ SDK e OS beta

● Scelta dei prezzi vincolata

Android iOS

Pubblicazione● Paid App non presente in tutti i Paesi.

Es China

● Bisogna rispettare le Norme del programma di Google Play

● Nessun controllo dopo circa 2 ore disponibile sullo store

● Non è possibile rimuovere l’app una volta pubblicata .

● Tempi di pubblicazione biblici

~ 15 giorni

● App controllata realmente!

● Alta probabilità di rifiuto

○ se non si seguono le HIG Apple

○ …ma a volte anche per motivi assurdi

● Una piccola soluzione: expedited