Presented on Oct 2013 at Pragma Conference 2013 in Milan, this is an introduction about how I and my team at CreoLabs made a drop-in simulator of iOS's UIKit framework from the scratch, which is running on OS X without using native Apple's simulator.
This is part of a big project called CreoApp we are developing at CreoLabs (www.creolabs.com).
Durante la mia lunga e intima amicizia con Lotus Holmes, non lo avevo mai inteso parlare del package “com.ibm.notes.java.ui” prima del rilascio della versione 8.5.
Presente inizialmente come "undocumented feature", il mistero fu svelato grazie all'aiuto degli Irregolari di Eclipse Street.
Da quel giorno fu possibile creare plug-ins per il client Notes in grado, ad esempio, di interagire con i documenti selezionati in una vista, evitando di replicare lo stesso agente su ciascun database per tutte quelle sempreverdi necessità di front-end (modifica di campi, aggiunta di autori e lettori, e così via) o di esportare dati dal documento o dalla vista attivi a fogli di calcolo o documenti Lotus Symphony.
Un'ulteriore prova, se mai ce ne fosse stato bisogno, che l'unica risposta possibile per tutte quelle domande relative al miglior software per la collaborazione e il group working, orientato all'integrazione con strumenti di desktop office è una e una soltanto: «Elementare: Notes!».
Caso risolto.
Tech Webinar: Test e2e per AngularJS e non soloCodemotion
Luca Ferretti illustra Protractor: il framework JavaScript indispensabile alla realizzazione di completi test e2e per web app AngularJS (e non solo).
Iscriviti qui per partecipare ad altri Tech Webinar gratuiti: http://goo.gl/iW81VD
Scrivici a: training@codemotion.it
Tw: http://twitter.com/CodemotionTR
Slides della sessione su Automatic Reference Counting, tenuta da Giuseppe Arici alla WhyMCA 2012.
http://www.whymca.org/intervento/automatic-reference-counting
-----
Presentata da Apple nel corso dell'ultima WWDC, l'Automatic Reference Counting, secondo gli ingegneri di Cupertino, è la soluzione definitiva all'annoso problema della gestione della memoria nello sviluppo di applicazioni Mac e iOS. ARC promette di ridurre notevolmente il carico di lavoro del programmatore, limitando al minimo la possibilità di errore ed assicurando al contempo un aumento significativo delle prestazioni. Nella compilazione di codice Objective-C, con ARC, il programmatore è sollevato dalla responsabilità di applicare in modo meccanico e ripetitivo le regole fondamentali della gestione della memoria. Inoltre ARC si propone di migliorare l'attività di sviluppo, senza per questo gravare sulle prestazioni del sistema, sulla durata della batteria e sulla sicurezza del codice prodotto. In un ambiente nativo con accesso libero ai puntatori, ARC rappresenta il migliore compromesso possibile tra la gestione manuale della memoria e la garbage collection completamente automatica.
In questa sessione si presenteranno le pratiche che permettono di sfruttare al meglio le potenzialità di ARC, si illustreranno le tecniche di migrazione del codice preesistente al nuovo modello di gestione della memoria e si esamineranno i problemi più ricorrenti che si possono incontrare utilizzando ARC in progetti di media complessità.
Slides della sessione su iOS Api Client: soluzioni a confronto, tenuta da Massimo Oliviero e Francesco Sinopoli alla WhyMCA 2012.
http://www.whymca.org/intervento/ios-api-client-soluzioni-confronto
-----
Abbiamo sognato un giorno in cui REST diventerà lo standard per tutti i servizi web, le API saranno progettate e documentate come quelle di Twitter, tutti capiranno il significato di concetti come Risorsa, URI e HATEOAS e il mondo sarà per sempre riconoscente a Roy Fielding. Abbiamo sognato … Poi ci siamo svegliati e siamo andati al lavoro. Puntualmente abbiamo trovato il seguente scenario: applicazione critica, progetto in scadenza, API server inviolabili.
Vi ricordate quella battuta in Apollo 13: come incastrare un tubo tondo in un boccaporto quadrato? In questa sessione mostreremo alcune pratiche, prodotte dalle nostre Lesson Learned, per realizzare un client iOS chiamato ad interagire con API remote ponendo l'accento sull'architettura software.
Presented on Oct 2013 at Pragma Conference 2013 in Milan, this is an introduction about how I and my team at CreoLabs made a drop-in simulator of iOS's UIKit framework from the scratch, which is running on OS X without using native Apple's simulator.
This is part of a big project called CreoApp we are developing at CreoLabs (www.creolabs.com).
Durante la mia lunga e intima amicizia con Lotus Holmes, non lo avevo mai inteso parlare del package “com.ibm.notes.java.ui” prima del rilascio della versione 8.5.
Presente inizialmente come "undocumented feature", il mistero fu svelato grazie all'aiuto degli Irregolari di Eclipse Street.
Da quel giorno fu possibile creare plug-ins per il client Notes in grado, ad esempio, di interagire con i documenti selezionati in una vista, evitando di replicare lo stesso agente su ciascun database per tutte quelle sempreverdi necessità di front-end (modifica di campi, aggiunta di autori e lettori, e così via) o di esportare dati dal documento o dalla vista attivi a fogli di calcolo o documenti Lotus Symphony.
Un'ulteriore prova, se mai ce ne fosse stato bisogno, che l'unica risposta possibile per tutte quelle domande relative al miglior software per la collaborazione e il group working, orientato all'integrazione con strumenti di desktop office è una e una soltanto: «Elementare: Notes!».
Caso risolto.
Tech Webinar: Test e2e per AngularJS e non soloCodemotion
Luca Ferretti illustra Protractor: il framework JavaScript indispensabile alla realizzazione di completi test e2e per web app AngularJS (e non solo).
Iscriviti qui per partecipare ad altri Tech Webinar gratuiti: http://goo.gl/iW81VD
Scrivici a: training@codemotion.it
Tw: http://twitter.com/CodemotionTR
Slides della sessione su Automatic Reference Counting, tenuta da Giuseppe Arici alla WhyMCA 2012.
http://www.whymca.org/intervento/automatic-reference-counting
-----
Presentata da Apple nel corso dell'ultima WWDC, l'Automatic Reference Counting, secondo gli ingegneri di Cupertino, è la soluzione definitiva all'annoso problema della gestione della memoria nello sviluppo di applicazioni Mac e iOS. ARC promette di ridurre notevolmente il carico di lavoro del programmatore, limitando al minimo la possibilità di errore ed assicurando al contempo un aumento significativo delle prestazioni. Nella compilazione di codice Objective-C, con ARC, il programmatore è sollevato dalla responsabilità di applicare in modo meccanico e ripetitivo le regole fondamentali della gestione della memoria. Inoltre ARC si propone di migliorare l'attività di sviluppo, senza per questo gravare sulle prestazioni del sistema, sulla durata della batteria e sulla sicurezza del codice prodotto. In un ambiente nativo con accesso libero ai puntatori, ARC rappresenta il migliore compromesso possibile tra la gestione manuale della memoria e la garbage collection completamente automatica.
In questa sessione si presenteranno le pratiche che permettono di sfruttare al meglio le potenzialità di ARC, si illustreranno le tecniche di migrazione del codice preesistente al nuovo modello di gestione della memoria e si esamineranno i problemi più ricorrenti che si possono incontrare utilizzando ARC in progetti di media complessità.
Slides della sessione su iOS Api Client: soluzioni a confronto, tenuta da Massimo Oliviero e Francesco Sinopoli alla WhyMCA 2012.
http://www.whymca.org/intervento/ios-api-client-soluzioni-confronto
-----
Abbiamo sognato un giorno in cui REST diventerà lo standard per tutti i servizi web, le API saranno progettate e documentate come quelle di Twitter, tutti capiranno il significato di concetti come Risorsa, URI e HATEOAS e il mondo sarà per sempre riconoscente a Roy Fielding. Abbiamo sognato … Poi ci siamo svegliati e siamo andati al lavoro. Puntualmente abbiamo trovato il seguente scenario: applicazione critica, progetto in scadenza, API server inviolabili.
Vi ricordate quella battuta in Apollo 13: come incastrare un tubo tondo in un boccaporto quadrato? In questa sessione mostreremo alcune pratiche, prodotte dalle nostre Lesson Learned, per realizzare un client iOS chiamato ad interagire con API remote ponendo l'accento sull'architettura software.
Wearable Lab: Progettazione per Apple WatchPaolo Musolino
Le applicazioni mobile hanno trovato diffusione su larga scala attraverso gli smartphone. Oggi queste app hanno un nuovo modo di essere portate in mobilità grazie ad Apple Watch, un dispositivo wearable capace di sfoggiare una interfaccia familiare come quella di iOS. Ma progettare app per l’Apple Watch pone gli sviluppatori e i designer di fronte ad una nuova sfida ancora più audace: con un piccolo schermo c’è molto meno spazio per l’interazione dell’utente. In questo lab tenuto a Todi Appy Days 2015, assieme all'amico Erik Peruzzi ho spiegato quali sono le possibilità offerta da Apple Watch, come farlo comunicare con iPhone, e cosa possiamo aspettarci nel breve periodo grazie all’introduzione di Watch OS 2.
Come sviluppare app native per iOS a partire dal suo IDE di sviluppo Xcode per proseguire con un tutorial completo per realizzare una piccola rubrica di contatti.
Antonio Russo, Federico Oldrini e Jacopo Giola di Makeitapp hanno presentato il workshop di CommitUniversity, dedicato al Backend as a Service, mostrandoci come costruire con esso un applicazione.
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
Direzioni fondamentali per entrare rapidamente nella comprensione di Plone e del suo mondo, e costruire il vostro sistema di gestione contenuti in capo a pochi giorni.
Grazie a Team Foundation Build è possibile adottare pratiche di integrazione continua nel proprio progetto. In questa presentazione viene introdotta la struttura di tfs build assieme alle tecniche base per effettuare una customizzazione della build.
Slide Tesi di laurea:
Separazione dei ruoli tra Designer e Developer nello sviluppo di applicazioni Desktop: uso di WPF e del pattern Model-View-ViewModel
Wearable Lab: Progettazione per Apple WatchPaolo Musolino
Le applicazioni mobile hanno trovato diffusione su larga scala attraverso gli smartphone. Oggi queste app hanno un nuovo modo di essere portate in mobilità grazie ad Apple Watch, un dispositivo wearable capace di sfoggiare una interfaccia familiare come quella di iOS. Ma progettare app per l’Apple Watch pone gli sviluppatori e i designer di fronte ad una nuova sfida ancora più audace: con un piccolo schermo c’è molto meno spazio per l’interazione dell’utente. In questo lab tenuto a Todi Appy Days 2015, assieme all'amico Erik Peruzzi ho spiegato quali sono le possibilità offerta da Apple Watch, come farlo comunicare con iPhone, e cosa possiamo aspettarci nel breve periodo grazie all’introduzione di Watch OS 2.
Come sviluppare app native per iOS a partire dal suo IDE di sviluppo Xcode per proseguire con un tutorial completo per realizzare una piccola rubrica di contatti.
Antonio Russo, Federico Oldrini e Jacopo Giola di Makeitapp hanno presentato il workshop di CommitUniversity, dedicato al Backend as a Service, mostrandoci come costruire con esso un applicazione.
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
Direzioni fondamentali per entrare rapidamente nella comprensione di Plone e del suo mondo, e costruire il vostro sistema di gestione contenuti in capo a pochi giorni.
Grazie a Team Foundation Build è possibile adottare pratiche di integrazione continua nel proprio progetto. In questa presentazione viene introdotta la struttura di tfs build assieme alle tecniche base per effettuare una customizzazione della build.
Slide Tesi di laurea:
Separazione dei ruoli tra Designer e Developer nello sviluppo di applicazioni Desktop: uso di WPF e del pattern Model-View-ViewModel
3. Di cosa parliamo oggi?
• MVC - Design Pattern Modal View Controller
• Xcode: introduzione alle funzioni base
• Sviluppiamo la nostra prima App:
• main.m
• AppDelegate
• UIViewController
• UINavigationController
• UITableViewController
iOS Bootcamp
4. MVC
Coordinator
Aggiorna Input utente
Controller
Model View
Notifica Aggiorna
Data Display
Il design pattern MVC assegna ad ogni oggetto un ruolo
preciso: Model,View o Controller
iOS Bootcamp
5. Model
Descrive il/i modello/i dei dati utilizzato/i dalla nostra
applicazione
Definisce la logica con cui vengono manipolati questi
dati. es: salvataggio, modifica, eliminazione...
iOS Bootcamp
6. View
E’ ciò che l’utente vede
• Sa come disegnarsi
• Risponde alle azioni dell’utente
iOS Bootcamp
7. Controller
E’ l’intermediario tra una o più View e uno o più Model
• Interpreta le azioni dell’utente eseguite nella View
e comunica al Model eventuali cambiamenti da
apportare
• Segnala alla View le variazioni ai dati compiute dal
Model
• Gestisce il ciclo di vita degli altri oggetti
iOS Bootcamp
8. Best practice
1. Utilizziamo l’MVC per dividere il lavoro
2. Impariamo a conoscere il Framework, non
reinventiamolo.
3. Non abusiamo delle View
4. Minimiziamo le dipendenze mutuali
5. Dividiamo il codice in moduli
iOS Bootcamp
12. Library
• File Template Library (ctrl + alt + cmd + 1)
• Code Snipped Library (ctrl + alt + cmd + 2)
• Object Library (ctrl + alt + cmd + 3)
• Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
13. Jump Bar
• Mostra il percorso relativo del file corrente
• Ci permette di navigare velocemente tra i file che
si trovano allo stesso livello
iOS Bootcamp
14. IBOutlet
@property (nonatomic, retain) IBOutlet UILabel *label;
• Rappresenta una variabile d’istanza che referenzia
un altro oggetto
• Questa referenza è configurata ed archiviata
attraverso l’Interface Builder
• Ogni volta che accediamo ad uno xib viene
ristabilita la connessione tra l’oggetto utilizzato
nello xib e la variabile d’istanza ad esso collegata
iOS Bootcamp
16. IBActions
- (IBAction)doSomething:(id)sender;
• Utilizzato al posto di void
• Dichiara che il metodo è una “Action”. In questo
modo IB, come per gli IBOutlet, è consapevole
della sua presenza e può collegarlo ad un evento
• Il parametro sender è controllo che manda il
messaggio
iOS Bootcamp
18. La prima App...
dalla teoria alla pratica
Stefano Zanetti § The Alchemist
19. Il punto di ingresso: main.m
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil,
NSStringFromClass([AppDelegate class]));
}
}
iOS Bootcamp
20. AppDelegate Start & End
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Il sistema notifica alla nostra applicazione che la fase di
caricamento è terminata
}
- (void)applicationWillTerminate:(UIApplication *)application
{
! Il sistema notifica alla nostra applicazione che l'utente o
//
il sistema stesso ha richiesto la chiusura della nostra
applicazione. Possiamo usare questo metodo per salvare lo
status della nostra applicazione.
}
iOS Bootcamp
21. Enter in Background
- (void)applicationWillResignActive:(UIApplication
*)application
{
// Il sistema notifica alla nostra applicazione che sta per
diventare inattiva. Disabilitare Timer, mettere in pausa i
Task, ...
}
- (void)applicationDidEnterBackground:(UIApplication
*)application
{
// Se la nostra applicazione supporta il background, questo
metodo viene chiamato al posto del applicationWillTerminate.
Utilizzate questo metodo per rilasciare le risorse, salvare i
dati, invalidare i timers...
}
iOS Bootcamp
22. Enter in Foreground
- (void)applicationWillEnterForeground:(UIApplication
*)application
{
! Il sistema notifica che l’applicazione sta passando dallo
//
stato di background a quello di inattiva. In questo metodo è
possibile ripristinare la maggior parte delle cambiamenti
effettuati prima di entrare in background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
! Il sistema notifica che l’applicazione è tornata attiva.
//
Utilizzare questo metodo per far ripartire i vari task attivi,
timers, eventualmente per effettuare un refresh
dell’interfaccia utente...
}
iOS Bootcamp
23. UIViewController
• Un UIViewController è controller generico utile
per manipolare le UIView.
• Mette a disposizione diversi metodi che sono
chiamati quando una vista appare o scompare.
iOS Bootcamp
25. Creare un ViewController
PMViewController *controller = [[[PMViewController alloc]
initWithNibName:@"PMViewController" bundle:nil] autorelease];
Bundle in cui
Nome del file xib
cercare il file xib
iOS Bootcamp
27. Utilizziamo il ViewController
Presentiamo in modale il ViewController
[self presentModalViewController:controller animated:YES];
Rimuoviamo il ViewController
[self dismissModalViewControllerAnimated:YES];
iOS Bootcamp
33. Push
Creiamo e aggiungiamo un nuovo contenuto allo stack
dei ViewControllers
UIViewController *detailViewController = [[UIViewController
alloc] initWithNibName:@"detailViewController" bundle:nil];
[self.navigationController
pushViewController:detailViewController animated:YES];
[detailViewController release];
iOS Bootcamp
34. Pop
Rimuoviamo il ViewController corrente dallo stack e
torniamo a quello precedente
[self.navigationController popViewControllerAnimated:YES];
Rimuoviamo tutti i ViewControllers dallo stack e
torniamo al rootViewController
[self.navigationController popToRootViewControllerAnimated:YES];
iOS Bootcamp
36. UITableView
Cosa ci serve?
• un UITableViewController
Oppure:
• un UIViewController
• una UITableView
• implementare correttamente
UITableViewDataSource (rappresentazione dei
dati) e il UITableViewDelegate (visualizzazione
contenuto celle)
iOS Bootcamp
42. Cell Identifier
Descriviamo le singole righe della slide precedente:
CellIdentifier viene definito statico perchè questo metodo viene
richiamato moltissime volte. La parola chiave “static” permette
di non ricreare un oggetto se ne esiste già uno di quel tipo.
static NSString *cellIdentifier = @"Cell";
iOS Bootcamp
43. Riutilizzare le celle
Il DataSource riutilizza gli oggetti UITableViewCell. Tramite
questo metodo chiediamo alla UITableView se esiste una cella
con quel particolare identifier che possiamo riutilizzare
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:cellIdentifier];
iOS Bootcamp
44. UITableView
Nel caso non esista nessuna cella riutilizzabile ne creiamo una
nuova
if (cell == nil)
{
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellIdentifier] autorelease];
}
Aggiorniamo il testo della cella con la riga del nostro array
corrispondente alla riga dell’NSIndexPath interessato
cell.textLabel.text = [_elements objectAtIndex:indexPath.row];
iOS Bootcamp
46. What’s NeXT !?
Using Storyboard iCl
cat Push
ou
d
ion
int
egr
No and
atio
n
tifi
cal
Lo
e
has
Ma Dat
urc
nag a
pP
Co em
red ent
Ap
ata : Advanced UITableView
In-
and custom
UITableViewCell
iOS Bootcamp