iOS e il Cloud
Francesco Novelli
francesco.nove@gmail.com - Run Code
Chi Sono?
Francesco Novelli
- iOS Developer
- Web Developer
- Autore di Programmare applicazioni per
iPhone ed iPad
-Autore di Programamre applicazioni per
Mac OS X
francesco.nove@gmail.com - Run Code
Chi Sono?
Francesco Novelli francesco.nove@gmail.com - Run Code
Di cosa parliamo oggi?
Francesco Novelli
CLOUD!
francesco.nove@gmail.com - Run Code
Di cosa parliamo oggi?
Francesco Novelli
e iOS...
francesco.nove@gmail.com - Run Code
Di cosa parliamo oggi?
Francesco Novelli
- iCloud
- DropBox
- Google Drive
- Amazon S3
francesco.nove@gmail.com - Run Code
iCloud
Francesco Novelli
- Caratteristiche principali
- Come implementarlo in un App
- Pro
- Contro
francesco.nove@gmail.com - Run Code
iCloud – Caratteristiche principali
Francesco Novelli
I numeri
- 250 milioni di utenti
- 500 milioni di iOS Device attivi
- 50% degli utenti usa iCloud
francesco.nove@gmail.com - Run Code
iCloud – Caratteristiche principali
Francesco Novelli
- Sincronizzazione automatica
- Implementazione nativa nell’OS
- Risoluzione conflitti automatica
- 5 GB di spazio gratuito
- Disponibile per Mac OS X
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
- Non necessita di framework
- Certificati necessari
- iCloud Storage
- iCloud Key-Value Data Storage
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
Certificati:
Entitlement attivo nell’app
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
Certificati:
AppID in iOS Dev Portal
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
Certificati:
Provisioning Profile dedicato
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
iCloud Data Storage:
Archiviazione file
Salvataggio Database
Salvataggio CoreData
Condivisione file tra devices
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
iCloud Data Storage:
// Controllare che iCloud sia attivo
id currentToken =
[[NSFileManager defaultManager]
ubiquityIdentityToken];
if (!currentToken) {
// Alert user
}
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
self.query = [[NSMetadataQuery alloc] init];
[self.query setSearchScopes:
[NSArray arrayWithObject:
NSMetadataQueryUbiquitousDocumentsScope]];
NSPredicate *pred = [NSPredicate
predicateWithFormat:@"%K like
'Note_*'", NSMetadataItemFSNameKey];
[self.query setPredicate:pred];
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
for (NSMetadataItem *item in [query results]) {
NSURL *url = [item valueForAttribute:NSMetadataItemURLKey];
Note *nota = [[Note alloc] initWithFileURL:url];
[nota openWithCompletionHandler:^(BOOL success) {
if (success) {
[self.notes addObject:nota];
}
}];
}
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
// CREARE UN FILE
NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"]
URLByAppendingPathComponent:fileName];
Note *nota = [[Note alloc] initWithFileURL:ubiquitousPackage];
[nota saveToURL:[nota fileURL]
forSaveOperation:UIDocumentSaveForCreating
completionHandler:^(BOOL success) {
if (success) {
[self.notes addObject:nota];
[self.tableView reloadData];
}
}];
];
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
DA RICORDARE
- NSFileManager per le operazioni di I/O
- NSMetadataQuery per la ricerca dei file
- I file vengono scaricati solo in caso di
necessità
- Caricare solo le differenze!
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
iCloud Key-Value Storage
Salvataggio impostazioni
Salvataggio stato dell’applicazione
Salvataggio piccoli dati
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
Classi ammesse:
• NSData
• NSString
• NSNumber
• NSDate
• NSArray
• NSDictionary
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
Scrivere un dato
[[NSUbiquitousKeyValueStore defaultStore]
setObject:@"testo"
forKey:@"key"];
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
Sincronizzare i dati
[[NSUbiquitousKeyValueStore defaultStore]
synchronize];
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
Leggere i dati
NSLog(@"%@",[[NSUbiquitousKeyValueSto
re defaultStore] objectForKey:@"key"]);
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
NSUbiquitousKeyValueStore
==
NSUserDefaults
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
PRO
Profondamente integrato con l’OS
Poco codice e nessuna dipendenza
Compatibilità da iOS 5
Compatibilità perfetta con OS X
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
CONTRO
Disponibile SOLO con device Apple
Sandbox impedisce spazio condiviso
L’utente non può accedere direttamente ai
file
francesco.nove@gmail.com - Run Code
Dropbox
Francesco Novelli
- Caratteristiche principali
- Come implementarlo in un App
- Pro
- Contro
francesco.nove@gmail.com - Run Code
Dropbox– Caratteristiche principali
Francesco Novelli
- 100 milioni di utenti
- Gratis fino a 16 Gb di spazio
- LAN Sync
- Condivisione cartelle tra utenti
francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli
Registrazione nell’App Console:
https://www.dropbox.com/developers/apps
- APP Type: API
- APP Name Univoco
- Access: App Folder
francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli francesco.nove@gmail.com - Run Code
App key
App secret
Dropbox– Come implementarlo in un App
Francesco Novelli
Download Dropbox iOS SDK
https://www.dropbox.com/developers/sync/
tutorial/ios
Dropbox.framework in Xcode
francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli
Altri framework necessari:
• CFNetwork.framework
• Security.framework
• SystemConfiguration.framework
• QuartzCore.framework
francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli
#import <Dropbox/Dropbox.h>
- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)opts {
...
// The account manager stores all the account info. Create this when your app launches
DBAccountManager* accountMgr =
[[DBAccountManager alloc] initWithAppKey:@"APP_KEY" secret:@"APP_SECRET"];
[DBAccountManager setSharedManager:accountMgr];
DBAccount *account = accountMgr.linkedAccount;
if (account) {
DBFilesystem *filesystem = [[DBFilesystem alloc] initWithAccount:account];
[DBFilesystem setSharedFilesystem:filesystem];
}
...
}
francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli
Info.plist
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>db-APP_KEY</string>
</array>
</dict>
</array>
francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
sourceApplication:(NSString *)source annotation:(id)annotation {
DBAccount *account = [[DBAccountManager sharedManager] handleOpenURL:url];
if (account) {
DBFilesystem *filesystem = [[DBFilesystem alloc] initWithAccount:account];
[DBFilesystem setSharedFilesystem:filesystem];
NSLog(@"App linked successfully!");
return YES;
}
...
}
francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli
// ELENCARE FILE
NSArray *contents =
[[DBFilesystem sharedFilesystem] listFolder:[DBPath root]
error:nil];
for (DBFileInfo *info in contents) {
NSLog(@"%@", info.path);
}
francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli
// SCRIVERE UN FILE
DBPath *newPath = [[DBPath root] childPath:@"hello.txt"];
DBFile *file = [[DBFilesystem sharedFilesystem] createFile:newPath error:nil];
[file writeString:@"Hello World!" error:nil];
// LEGGERE UN FILE
DBPath *newPath = [[DBPath root] childPath:@"hello.txt"];
DBFile *file = [[DBFilesystem sharedFilesystem] createFile:newPath error:nil];
NSString *fileContent [file readString:@"Hello World!" error:nil];
francesco.nove@gmail.com - Run Code
Dropbox– Come implementarlo in un App
Francesco Novelli
// CONTROLLARE LE MODIFICHE
DBPath *path = [[DBPath root] childPath:@"change-me.txt"];
self.file = [[DBFilesystem sharedFilesystem] createFile:path error:nil];
// Next, register for changes on that file
[self.file addObserver:self block:^() {
// This block will be called every time your file changes
// if newerStatus is not nil, it means a newer version is available
DBFileStatus *newerStatus = file.newerStatus;
if (newerStatus) {
if (!newerStatus.cached) {
NSLog(@"newerStatus.cached == NO; this means the file downloading");
} else {
// Update to the newly available version and print it out
[file update:nil];
NSLog(@"The file is done downloading: %@", [file readString:nil]);
}
}
}];
francesco.nove@gmail.com - Run Code
Dropbox - PRO
Francesco Novelli
PRO
Disponibile su tutte le piattaforme
File accessibili da qualsiasi app
Possibilità di ampliare lo spazio
gratuitamente
francesco.nove@gmail.com - Run Code
Dropbox - CONTRO
Francesco Novelli
CONTRO
Necessità di diverse dipendenze
Codice più complesso di iCloud
francesco.nove@gmail.com - Run Code
Google Drive
Francesco Novelli
- Caratteristiche principali
- Come implementarlo in un App
- Pro
- Contro
francesco.nove@gmail.com - Run Code
Google Drive
Francesco Novelli
- TUTTI hanno un account Google
- Integrato benissimo con Android..
- …ed ha le API per iOS
francesco.nove@gmail.com - Run Code
Google Drive
Francesco Novelli
- Registrare l’app nel Google API Console:
https://code.google.com/apis/console/
- Importare svariati framework
- Importare i framework di Google Drive
OPPURE
francesco.nove@gmail.com - Run Code
Google Drive
Francesco Novelli
Seguire alla lettera le istruzioni di questa
pagina:
https://developers.google.com/drive/quickst
art-ios
(non il video, l’app non compila!)
francesco.nove@gmail.com - Run Code
Google Drive
Francesco Novelli
GTLDriveFile *file = [GTLDriveFile object];
file.title = [dateFormat stringFromDate:[NSDate date]];
file.descriptionProperty = @”Desc";
file.mimeType = @"image/png";
NSData *data = …; // DATA TO UPLOAD
GTLUploadParameters *uploadParameters = [GTLUploadParameters
uploadParametersWithData:data MIMEType:file.mimeType];
GTLQueryDrive *query = [GTLQueryDrive queryForFilesInsertWithObject:file
uploadParameters:uploadParameters];
francesco.nove@gmail.com - Run Code
Google Drive
Francesco Novelli
[self.driveService executeQuery:query
completionHandler:^(GTLServiceTicket *ticket,
GTLDriveFile *insertedFile,
NSError *error) {
if (error == nil)
{
NSLog(@"File ID: %@", insertedFile.identifier);
}
}];
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
PRO
Tutti hanno un account Google
Disponibile in tutte le piattaforme
€/Gb più basso della concorrenza
francesco.nove@gmail.com - Run Code
iCloud – Come implementarlo in un App
Francesco Novelli
CONTRO
TANTE dipendenze
Codice complesso
Live Sync non disponibile
francesco.nove@gmail.com - Run Code
Amazon S3
Francesco Novelli
- Caratteristiche principali
- Come implementarlo in un App
- Pro
- Contro
francesco.nove@gmail.com - Run Code
Amazon S3
Francesco Novelli
- Spazio dello sviluppatore
- L’utente non ha bisogno di un account
- Servizio totalmente differente dagli altri
- Supporto a CoreData
francesco.nove@gmail.com - Run Code
Amazon S3
Francesco Novelli
- Scaricare l’SDK dal sito AWS:
http://aws.amazon.com/sdkforios/
- Importare AWSiOSSDK.framework nel
progetto
francesco.nove@gmail.com - Run Code
Amazon S3
Francesco Novelli
AWSPersistence.framework
CoreData tramite S3, ma ancora in beta
francesco.nove@gmail.com - Run Code
Amazon S3
Francesco Novelli
self.s3 = [[[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY_ID
withSecretKey:SECRET_KEY] autorelease];
self.s3.endpoint = [AmazonEndpoints s3Endpoint:US_WEST_2];
S3CreateBucketRequest *createBucketRequest = [[[S3CreateBucketRequest alloc]
initWithName:[Constants pictureBucket] andRegion:[S3Region USWest2]]
autorelease];
S3CreateBucketResponse *createBucketResponse = [self.s3
createBucket:createBucketRequest];
if(createBucketResponse.error != nil)
{
NSLog(@"Error: %@", createBucketResponse.error);
}
francesco.nove@gmail.com - Run Code
Amazon S3
Francesco Novelli
S3PutObjectRequest *por = [[[S3PutObjectRequest alloc] initWithKey:PICTURE_NAME
inBucket:[Constants pictureBucket]] autorelease];
por.contentType = @"image/jpeg";
por.data = imageData;
S3PutObjectResponse *putObjectResponse = [self.s3 putObject:por];
[self performSelectorOnMainThread:@selector(showCheckErrorMessage:)
withObject:putObjectResponse.error
waitUntilDone:NO];
francesco.nove@gmail.com - Run Code
Amazon S3
Francesco Novelli
S3ResponseHeaderOverrides *override = [[[S3ResponseHeaderOverrides alloc] init] autorelease];
override.contentType = @"image/jpeg";
// Request a pre-signed URL to picture that has been uplaoded.
S3GetPreSignedURLRequest *gpsur =
[[[S3GetPreSignedURLRequest alloc] init] autorelease];
gpsur.key = PICTURE_NAME;
gpsur.bucket = [Constants pictureBucket];
gpsur.expires =
[NSDate dateWithTimeIntervalSinceNow:(NSTimeInterval) 3600];
gpsur.responseHeaderOverrides = override;
// Get the URL
NSError *error;
NSURL *url = [self.s3 getPreSignedURL:gpsur error:&error];
francesco.nove@gmail.com - Run Code
Amazon S3 – PRO
Francesco Novelli
PRO
Spazio praticamente illimitato
Semplice implementazione
File condivisi con tutti
L’utente non ha bisogno di un account
francesco.nove@gmail.com - Run Code
Amazon S3 – CONTRO
Francesco Novelli
CONTRO
Lo spazio non è personale
Per grandi progetti da valutare il €/Gb
Costi per il trasferimento dei file
francesco.nove@gmail.com - Run Code
In conclusione
Francesco Novelli francesco.nove@gmail.com - Run Code
- iCloud per progetti iOS-Only (o Mac)
- Dropbox per applicazioni su più OS
- Google Drive come alternativa a Dropbox
- Amazon S3 per far caricare file all’utente
In conclusione
Francesco Novelli francesco.nove@gmail.com - Run Code
Q&A Time…
francesco.nove@gmail.com
@iF9
www.9lli.it/francesco
www.facebook.com/fnove
In conclusione
Francesco Novelli francesco.nove@gmail.com - Run Code

Cloud and iOS by Francesco Novelli

  • 1.
    iOS e ilCloud Francesco Novelli francesco.nove@gmail.com - Run Code
  • 2.
    Chi Sono? Francesco Novelli -iOS Developer - Web Developer - Autore di Programmare applicazioni per iPhone ed iPad -Autore di Programamre applicazioni per Mac OS X francesco.nove@gmail.com - Run Code
  • 3.
    Chi Sono? Francesco Novellifrancesco.nove@gmail.com - Run Code
  • 4.
    Di cosa parliamooggi? Francesco Novelli CLOUD! francesco.nove@gmail.com - Run Code
  • 5.
    Di cosa parliamooggi? Francesco Novelli e iOS... francesco.nove@gmail.com - Run Code
  • 6.
    Di cosa parliamooggi? Francesco Novelli - iCloud - DropBox - Google Drive - Amazon S3 francesco.nove@gmail.com - Run Code
  • 7.
    iCloud Francesco Novelli - Caratteristicheprincipali - Come implementarlo in un App - Pro - Contro francesco.nove@gmail.com - Run Code
  • 8.
    iCloud – Caratteristicheprincipali Francesco Novelli I numeri - 250 milioni di utenti - 500 milioni di iOS Device attivi - 50% degli utenti usa iCloud francesco.nove@gmail.com - Run Code
  • 9.
    iCloud – Caratteristicheprincipali Francesco Novelli - Sincronizzazione automatica - Implementazione nativa nell’OS - Risoluzione conflitti automatica - 5 GB di spazio gratuito - Disponibile per Mac OS X francesco.nove@gmail.com - Run Code
  • 10.
    iCloud – Comeimplementarlo in un App Francesco Novelli - Non necessita di framework - Certificati necessari - iCloud Storage - iCloud Key-Value Data Storage francesco.nove@gmail.com - Run Code
  • 11.
    iCloud – Comeimplementarlo in un App Francesco Novelli Certificati: Entitlement attivo nell’app francesco.nove@gmail.com - Run Code
  • 12.
    iCloud – Comeimplementarlo in un App Francesco Novelli Certificati: AppID in iOS Dev Portal francesco.nove@gmail.com - Run Code
  • 13.
    iCloud – Comeimplementarlo in un App Francesco Novelli Certificati: Provisioning Profile dedicato francesco.nove@gmail.com - Run Code
  • 14.
    iCloud – Comeimplementarlo in un App Francesco Novelli iCloud Data Storage: Archiviazione file Salvataggio Database Salvataggio CoreData Condivisione file tra devices francesco.nove@gmail.com - Run Code
  • 15.
    iCloud – Comeimplementarlo in un App Francesco Novelli iCloud Data Storage: // Controllare che iCloud sia attivo id currentToken = [[NSFileManager defaultManager] ubiquityIdentityToken]; if (!currentToken) { // Alert user } francesco.nove@gmail.com - Run Code
  • 16.
    iCloud – Comeimplementarlo in un App Francesco Novelli self.query = [[NSMetadataQuery alloc] init]; [self.query setSearchScopes: [NSArray arrayWithObject: NSMetadataQueryUbiquitousDocumentsScope]]; NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K like 'Note_*'", NSMetadataItemFSNameKey]; [self.query setPredicate:pred]; francesco.nove@gmail.com - Run Code
  • 17.
    iCloud – Comeimplementarlo in un App Francesco Novelli for (NSMetadataItem *item in [query results]) { NSURL *url = [item valueForAttribute:NSMetadataItemURLKey]; Note *nota = [[Note alloc] initWithFileURL:url]; [nota openWithCompletionHandler:^(BOOL success) { if (success) { [self.notes addObject:nota]; } }]; } francesco.nove@gmail.com - Run Code
  • 18.
    iCloud – Comeimplementarlo in un App Francesco Novelli // CREARE UN FILE NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"] URLByAppendingPathComponent:fileName]; Note *nota = [[Note alloc] initWithFileURL:ubiquitousPackage]; [nota saveToURL:[nota fileURL] forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { if (success) { [self.notes addObject:nota]; [self.tableView reloadData]; } }]; ]; francesco.nove@gmail.com - Run Code
  • 19.
    iCloud – Comeimplementarlo in un App Francesco Novelli DA RICORDARE - NSFileManager per le operazioni di I/O - NSMetadataQuery per la ricerca dei file - I file vengono scaricati solo in caso di necessità - Caricare solo le differenze! francesco.nove@gmail.com - Run Code
  • 20.
    iCloud – Comeimplementarlo in un App Francesco Novelli iCloud Key-Value Storage Salvataggio impostazioni Salvataggio stato dell’applicazione Salvataggio piccoli dati francesco.nove@gmail.com - Run Code
  • 21.
    iCloud – Comeimplementarlo in un App Francesco Novelli Classi ammesse: • NSData • NSString • NSNumber • NSDate • NSArray • NSDictionary francesco.nove@gmail.com - Run Code
  • 22.
    iCloud – Comeimplementarlo in un App Francesco Novelli Scrivere un dato [[NSUbiquitousKeyValueStore defaultStore] setObject:@"testo" forKey:@"key"]; francesco.nove@gmail.com - Run Code
  • 23.
    iCloud – Comeimplementarlo in un App Francesco Novelli Sincronizzare i dati [[NSUbiquitousKeyValueStore defaultStore] synchronize]; francesco.nove@gmail.com - Run Code
  • 24.
    iCloud – Comeimplementarlo in un App Francesco Novelli Leggere i dati NSLog(@"%@",[[NSUbiquitousKeyValueSto re defaultStore] objectForKey:@"key"]); francesco.nove@gmail.com - Run Code
  • 25.
    iCloud – Comeimplementarlo in un App Francesco Novelli NSUbiquitousKeyValueStore == NSUserDefaults francesco.nove@gmail.com - Run Code
  • 26.
    iCloud – Comeimplementarlo in un App Francesco Novelli PRO Profondamente integrato con l’OS Poco codice e nessuna dipendenza Compatibilità da iOS 5 Compatibilità perfetta con OS X francesco.nove@gmail.com - Run Code
  • 27.
    iCloud – Comeimplementarlo in un App Francesco Novelli CONTRO Disponibile SOLO con device Apple Sandbox impedisce spazio condiviso L’utente non può accedere direttamente ai file francesco.nove@gmail.com - Run Code
  • 28.
    Dropbox Francesco Novelli - Caratteristicheprincipali - Come implementarlo in un App - Pro - Contro francesco.nove@gmail.com - Run Code
  • 29.
    Dropbox– Caratteristiche principali FrancescoNovelli - 100 milioni di utenti - Gratis fino a 16 Gb di spazio - LAN Sync - Condivisione cartelle tra utenti francesco.nove@gmail.com - Run Code
  • 30.
    Dropbox– Come implementarloin un App Francesco Novelli Registrazione nell’App Console: https://www.dropbox.com/developers/apps - APP Type: API - APP Name Univoco - Access: App Folder francesco.nove@gmail.com - Run Code
  • 31.
    Dropbox– Come implementarloin un App Francesco Novelli francesco.nove@gmail.com - Run Code
  • 32.
    Dropbox– Come implementarloin un App Francesco Novelli francesco.nove@gmail.com - Run Code App key App secret
  • 33.
    Dropbox– Come implementarloin un App Francesco Novelli Download Dropbox iOS SDK https://www.dropbox.com/developers/sync/ tutorial/ios Dropbox.framework in Xcode francesco.nove@gmail.com - Run Code
  • 34.
    Dropbox– Come implementarloin un App Francesco Novelli Altri framework necessari: • CFNetwork.framework • Security.framework • SystemConfiguration.framework • QuartzCore.framework francesco.nove@gmail.com - Run Code
  • 35.
    Dropbox– Come implementarloin un App Francesco Novelli #import <Dropbox/Dropbox.h> - (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)opts { ... // The account manager stores all the account info. Create this when your app launches DBAccountManager* accountMgr = [[DBAccountManager alloc] initWithAppKey:@"APP_KEY" secret:@"APP_SECRET"]; [DBAccountManager setSharedManager:accountMgr]; DBAccount *account = accountMgr.linkedAccount; if (account) { DBFilesystem *filesystem = [[DBFilesystem alloc] initWithAccount:account]; [DBFilesystem setSharedFilesystem:filesystem]; } ... } francesco.nove@gmail.com - Run Code
  • 36.
    Dropbox– Come implementarloin un App Francesco Novelli Info.plist <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>db-APP_KEY</string> </array> </dict> </array> francesco.nove@gmail.com - Run Code
  • 37.
    Dropbox– Come implementarloin un App Francesco Novelli - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url sourceApplication:(NSString *)source annotation:(id)annotation { DBAccount *account = [[DBAccountManager sharedManager] handleOpenURL:url]; if (account) { DBFilesystem *filesystem = [[DBFilesystem alloc] initWithAccount:account]; [DBFilesystem setSharedFilesystem:filesystem]; NSLog(@"App linked successfully!"); return YES; } ... } francesco.nove@gmail.com - Run Code
  • 38.
    Dropbox– Come implementarloin un App Francesco Novelli // ELENCARE FILE NSArray *contents = [[DBFilesystem sharedFilesystem] listFolder:[DBPath root] error:nil]; for (DBFileInfo *info in contents) { NSLog(@"%@", info.path); } francesco.nove@gmail.com - Run Code
  • 39.
    Dropbox– Come implementarloin un App Francesco Novelli // SCRIVERE UN FILE DBPath *newPath = [[DBPath root] childPath:@"hello.txt"]; DBFile *file = [[DBFilesystem sharedFilesystem] createFile:newPath error:nil]; [file writeString:@"Hello World!" error:nil]; // LEGGERE UN FILE DBPath *newPath = [[DBPath root] childPath:@"hello.txt"]; DBFile *file = [[DBFilesystem sharedFilesystem] createFile:newPath error:nil]; NSString *fileContent [file readString:@"Hello World!" error:nil]; francesco.nove@gmail.com - Run Code
  • 40.
    Dropbox– Come implementarloin un App Francesco Novelli // CONTROLLARE LE MODIFICHE DBPath *path = [[DBPath root] childPath:@"change-me.txt"]; self.file = [[DBFilesystem sharedFilesystem] createFile:path error:nil]; // Next, register for changes on that file [self.file addObserver:self block:^() { // This block will be called every time your file changes // if newerStatus is not nil, it means a newer version is available DBFileStatus *newerStatus = file.newerStatus; if (newerStatus) { if (!newerStatus.cached) { NSLog(@"newerStatus.cached == NO; this means the file downloading"); } else { // Update to the newly available version and print it out [file update:nil]; NSLog(@"The file is done downloading: %@", [file readString:nil]); } } }]; francesco.nove@gmail.com - Run Code
  • 41.
    Dropbox - PRO FrancescoNovelli PRO Disponibile su tutte le piattaforme File accessibili da qualsiasi app Possibilità di ampliare lo spazio gratuitamente francesco.nove@gmail.com - Run Code
  • 42.
    Dropbox - CONTRO FrancescoNovelli CONTRO Necessità di diverse dipendenze Codice più complesso di iCloud francesco.nove@gmail.com - Run Code
  • 43.
    Google Drive Francesco Novelli -Caratteristiche principali - Come implementarlo in un App - Pro - Contro francesco.nove@gmail.com - Run Code
  • 44.
    Google Drive Francesco Novelli -TUTTI hanno un account Google - Integrato benissimo con Android.. - …ed ha le API per iOS francesco.nove@gmail.com - Run Code
  • 45.
    Google Drive Francesco Novelli -Registrare l’app nel Google API Console: https://code.google.com/apis/console/ - Importare svariati framework - Importare i framework di Google Drive OPPURE francesco.nove@gmail.com - Run Code
  • 46.
    Google Drive Francesco Novelli Seguirealla lettera le istruzioni di questa pagina: https://developers.google.com/drive/quickst art-ios (non il video, l’app non compila!) francesco.nove@gmail.com - Run Code
  • 47.
    Google Drive Francesco Novelli GTLDriveFile*file = [GTLDriveFile object]; file.title = [dateFormat stringFromDate:[NSDate date]]; file.descriptionProperty = @”Desc"; file.mimeType = @"image/png"; NSData *data = …; // DATA TO UPLOAD GTLUploadParameters *uploadParameters = [GTLUploadParameters uploadParametersWithData:data MIMEType:file.mimeType]; GTLQueryDrive *query = [GTLQueryDrive queryForFilesInsertWithObject:file uploadParameters:uploadParameters]; francesco.nove@gmail.com - Run Code
  • 48.
    Google Drive Francesco Novelli [self.driveServiceexecuteQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLDriveFile *insertedFile, NSError *error) { if (error == nil) { NSLog(@"File ID: %@", insertedFile.identifier); } }]; francesco.nove@gmail.com - Run Code
  • 49.
    iCloud – Comeimplementarlo in un App Francesco Novelli PRO Tutti hanno un account Google Disponibile in tutte le piattaforme €/Gb più basso della concorrenza francesco.nove@gmail.com - Run Code
  • 50.
    iCloud – Comeimplementarlo in un App Francesco Novelli CONTRO TANTE dipendenze Codice complesso Live Sync non disponibile francesco.nove@gmail.com - Run Code
  • 51.
    Amazon S3 Francesco Novelli -Caratteristiche principali - Come implementarlo in un App - Pro - Contro francesco.nove@gmail.com - Run Code
  • 52.
    Amazon S3 Francesco Novelli -Spazio dello sviluppatore - L’utente non ha bisogno di un account - Servizio totalmente differente dagli altri - Supporto a CoreData francesco.nove@gmail.com - Run Code
  • 53.
    Amazon S3 Francesco Novelli -Scaricare l’SDK dal sito AWS: http://aws.amazon.com/sdkforios/ - Importare AWSiOSSDK.framework nel progetto francesco.nove@gmail.com - Run Code
  • 54.
    Amazon S3 Francesco Novelli AWSPersistence.framework CoreDatatramite S3, ma ancora in beta francesco.nove@gmail.com - Run Code
  • 55.
    Amazon S3 Francesco Novelli self.s3= [[[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY_ID withSecretKey:SECRET_KEY] autorelease]; self.s3.endpoint = [AmazonEndpoints s3Endpoint:US_WEST_2]; S3CreateBucketRequest *createBucketRequest = [[[S3CreateBucketRequest alloc] initWithName:[Constants pictureBucket] andRegion:[S3Region USWest2]] autorelease]; S3CreateBucketResponse *createBucketResponse = [self.s3 createBucket:createBucketRequest]; if(createBucketResponse.error != nil) { NSLog(@"Error: %@", createBucketResponse.error); } francesco.nove@gmail.com - Run Code
  • 56.
    Amazon S3 Francesco Novelli S3PutObjectRequest*por = [[[S3PutObjectRequest alloc] initWithKey:PICTURE_NAME inBucket:[Constants pictureBucket]] autorelease]; por.contentType = @"image/jpeg"; por.data = imageData; S3PutObjectResponse *putObjectResponse = [self.s3 putObject:por]; [self performSelectorOnMainThread:@selector(showCheckErrorMessage:) withObject:putObjectResponse.error waitUntilDone:NO]; francesco.nove@gmail.com - Run Code
  • 57.
    Amazon S3 Francesco Novelli S3ResponseHeaderOverrides*override = [[[S3ResponseHeaderOverrides alloc] init] autorelease]; override.contentType = @"image/jpeg"; // Request a pre-signed URL to picture that has been uplaoded. S3GetPreSignedURLRequest *gpsur = [[[S3GetPreSignedURLRequest alloc] init] autorelease]; gpsur.key = PICTURE_NAME; gpsur.bucket = [Constants pictureBucket]; gpsur.expires = [NSDate dateWithTimeIntervalSinceNow:(NSTimeInterval) 3600]; gpsur.responseHeaderOverrides = override; // Get the URL NSError *error; NSURL *url = [self.s3 getPreSignedURL:gpsur error:&error]; francesco.nove@gmail.com - Run Code
  • 58.
    Amazon S3 –PRO Francesco Novelli PRO Spazio praticamente illimitato Semplice implementazione File condivisi con tutti L’utente non ha bisogno di un account francesco.nove@gmail.com - Run Code
  • 59.
    Amazon S3 –CONTRO Francesco Novelli CONTRO Lo spazio non è personale Per grandi progetti da valutare il €/Gb Costi per il trasferimento dei file francesco.nove@gmail.com - Run Code
  • 60.
    In conclusione Francesco Novellifrancesco.nove@gmail.com - Run Code
  • 61.
    - iCloud perprogetti iOS-Only (o Mac) - Dropbox per applicazioni su più OS - Google Drive come alternativa a Dropbox - Amazon S3 per far caricare file all’utente In conclusione Francesco Novelli francesco.nove@gmail.com - Run Code
  • 62.