{"id":7583,"date":"2011-09-09T18:11:14","date_gmt":"2011-09-09T16:11:14","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=7583"},"modified":"2012-03-25T17:21:07","modified_gmt":"2012-03-25T15:21:07","slug":"t100-integrare-dropbox-nelle-applicazioni-iphone-ed-ipad","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t100-integrare-dropbox-nelle-applicazioni-iphone-ed-ipad\/","title":{"rendered":"T#100 &#8211; Integrare Dropbox nelle applicazioni iPhone ed iPad"},"content":{"rendered":"<p><a href=\"http:\/\/db.tt\/1a7PKPZ\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/dropbox_logo.jpg\" alt=\"dropbox-logo\" title=\"dropbox-logo\" width=\"290\" height=\"75\" class=\"alignleft size-full wp-image-7585\" \/><\/a> Ed eccoci giunti al nostro 100\u00b0 tutorial sulla programmazione iPhone e iPad, per noi un bel traguardo e per festeggiare vi proponiamo una guida per l&#8217;implementazione di una funzionalit\u00e0 molto interessante per le nostre applicazioni iOS: l&#8217;integrazione di Dropbox. Come tutti voi saprete, i servizi di cloud prendono sempre pi\u00f9 piede nelle nostre case, nei nostri uffici e ovviamente nei nostri device e non si pu\u00f2 negare quanto sia utile condividere file fra tutti i nostri dispositivi: non importa dove ci troviamo o cosa abbiamo a disposizione, i nostri dati saranno sempre con noi! Anche Apple entrer\u00e0 presto in questo mercato con il suo servizio iCloud (e gi\u00e0 c&#8217;era con il suo mobile me e iDisk) ma dato che ancora non possiamo parlare del servizio in arrivo essendo tutta la documentazione ufficiale e il codice sotto NDA, parleremo del suo &#8220;concorrente&#8221; gi\u00e0 utilizzato in larga scala e in tutto il mondo: Dropbox.<!--more--><\/p>\n<p>DropBox \u00e8 un servizio di cloud storage che fornisce 2GB di spazio gratuito (previa registrazione) pi\u00f9 ulteriori 250MB per ogni utente da noi inviato ad usare il servizio, che decider\u00e0 di utilizzare il Dropbox come noi (fino ad un limite massimo di 8GB). Niente male come versione free, ma se avessimo bisogno di pi\u00f9 spazio, sappiate che esistono diverse offerte in abbonamento a prezzi bassissimi per ogni esigenza:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-00.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-00.jpg\" alt=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-00\" title=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-00\" width=\"450\" height=\"339\" class=\"aligncenter size-full wp-image-7587\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-00.jpg 450w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-00-300x226.jpg 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Dopo questa piccola premessa possiamo partire con il nostro tutorial dedicato all&#8217;integrazione di DropBox nella nostra applicazione iOS.<\/p>\n<h4>Creiamo l&#8217;applicazione nel sito di DropBox<\/h4>\n<p>Il primo passo \u00e8 quello di creare un applicazione nel sito di DropBox. Per fare questo dovremo necessariamente avere un account, se non ne avete uno potrete crearlo seguendo <a href=\"http:\/\/db.tt\/1a7PKPZ\" target=\"_blank\">questo indirizzo<\/a>.<br \/>\nFatto questo entriamo nella <a href=\"https:\/\/www.dropbox.com\/developers\" target=\"_blank\">sezione developer<\/a> e ci ritroveremo davanti una schermata simile alla seguente:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-01.jpg\" alt=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-01\" title=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-01\" width=\"450\" height=\"353\" class=\"aligncenter size-full wp-image-7588\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-01.jpg 450w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-01-300x235.jpg 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Come vedete sulla sinistra troviamo un men\u00f9, clicchiamo su &#8220;My apps&#8221;, quindi su &#8220;Create an App&#8221;:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-02.jpg\" alt=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-02\" title=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-02\" width=\"450\" height=\"259\" class=\"aligncenter size-full wp-image-7589\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-02.jpg 450w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-02-300x172.jpg 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Nella finestra che si apre inseriamo il nome della nostra app e una descrizione, clicchiamo quindi su create.<\/p>\n<p>Ci verranno mostrati i dettagli e le chiavi dell&#8217;applicazione appena creata:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-03.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-03.jpg\" alt=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-03\" title=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-03\" width=\"450\" height=\"454\" class=\"aligncenter size-full wp-image-7590\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-03.jpg 450w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-03-150x150.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-03-297x300.jpg 297w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Quello che ci servir\u00e0 e che dovremo usare nel nostro coedice sono le due chiavi: quella segreta e quella dell&#8217;app.<\/p>\n<h4>Download SDK<\/h4>\n<p>A questo punto dovremo scaricare l&#8217;SDK per poi integrarlo nella nostra app. Scarichiamolo quindi da <a href=\"https:\/\/www.dropbox.com\/static\/developers\/dropbox-iphone-sdk-0.2.tar.gz\" target=\"_blank\">questo indirizzo<\/a> e una volta ottenuto scompattiamolo e apriamo la cartella appena ottenuta.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-04.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-04.jpg\" alt=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-04\" title=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-04\" width=\"450\" height=\"130\" class=\"aligncenter size-full wp-image-7591\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-04.jpg 450w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-04-300x86.jpg 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>All&#8217;interno troviamo una cartella con degli esempi e la pi\u00f9 importante, quella contenente l&#8217;SDK vero e proprio.<\/p>\n<h4>Integriamo DropBox nella nostra applicazione<\/h4>\n<p>Se avete fatto tutto quello spiegato qui sopra, siete pronti per passare alla parte pi\u00f9 divertente ed importante del tutorial: l\u2019integrazione di DropBox nella nostra app. DropBox fornisce diverse funzionalit\u00e0 in REST che ci permettono di ottenere molte informazioni sull\u2019utente, sul contenuto della cartella DropBox e naturalmente la possibilit\u00e0 si uploadare e scaricare i nostri file.<br \/>\nNoi, in questo tutorial, vedremo nello specifico l&#8217;ultima funzionalit\u00e0, ovvero scopriremo come usare dropBox per fare il backup dei nostri file.<\/p>\n<p>Per semplicit\u00e0 partiremo da un nuovo progetto e mostreremo come fare un semplice upload e download di un file.<\/p>\n<p>Apriamo Xcode e creiamo un nuovo progetto di tipo &#8220;viewBased&#8221;, quindi diamogli un nome a piacere e proseguiamo. Fatto questo io ho trascinato all&#8217;interno del progetto un&#8217;immagine a caso, che useremo per fare upload e download.<\/p>\n<p>Iniziamo a configurare il nostro &#8220;viewController&#8221; via codice creando 3 pulsanti e un&#8217;imageView. I tre pulsanti serviranno rispettivamente per fare l&#8217;upload dell&#8217;immagine, scaricarla e resettarla, mentre nell&#8217;imageView visualizzeremo la nostra immagine.<\/p>\n<p>Questa parte di codice \u00e8 davvero molto semplice, ricordatevi di impostare il tag dell&#8217;imageView in modo tale da essere in grado poi di recuperarla (se non sapete come usare i tag o volete rinfrescarvi la memoria date una lettura a questo <a href=\"http:\/\/www.devapp.it\/wordpress\/t099-scopriamo-la-property-tag-e-impariamo-ad-usarla-durante-lo-sviluppo-di-applicazioni-ios.html\" target=\"_blank\">nostro tutorial<\/a>).<\/p>\n<p>Ecco il codice:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)viewDidLoad\r\n{\r\n    [super viewDidLoad];\r\n    \r\n    self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];\r\n    \r\n    UIButton * btnUpload = [UIButton buttonWithType:UIButtonTypeRoundedRect];\r\n    btnUpload.frame = CGRectMake(30, 20, 110, 40);\r\n    [btnUpload addTarget:self action:@selector(uploadImg) forControlEvents:UIControlEventTouchDown];\r\n    [btnUpload setTitle:@\"upload Img\" forState:UIControlStateNormal];\r\n    [self.view addSubview:btnUpload];\r\n      \r\n    UIButton * btnDown = [UIButton buttonWithType:UIButtonTypeRoundedRect];\r\n    btnDown.frame = CGRectMake(30, 80, 110, 40);\r\n    [btnDown addTarget:self action:@selector(downloadImg) forControlEvents:UIControlEventTouchDown];\r\n    [btnDown setTitle:@\"download Img\" forState:UIControlStateNormal];\r\n    [self.view addSubview:btnDown];\r\n    \r\n    UIButton * btnReset = [UIButton buttonWithType:UIButtonTypeRoundedRect];\r\n    btnReset.frame = CGRectMake(170, 20, 110, 40);\r\n    [btnReset addTarget:self action:@selector(resetImg) forControlEvents:UIControlEventTouchDown];\r\n    [btnReset setTitle:@\"reset Img\" forState:UIControlStateNormal];\r\n    [self.view addSubview:btnReset];\r\n    \r\n    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 130, 300, 320)];\r\n    imgView.image = [UIImage imageNamed:@\"imgUpload.png\"];\r\n    imgView.tag = 10;\r\n    [self.view addSubview:imgView];\r\n    [imgView release];\r\n}\r\n\r\n-(void)resetImg\r\n{\r\n    UIImageView * imgTemp = (UIImageView*)[self.view viewWithTag:10];\r\n    imgTemp.image = nil;\r\n}\r\n<\/pre>\n<p>Ora procediamo con l\u2019integrazione dell&#8217;SDK. Prendiamo la cartella che abbiamo scaricato prima, apriamola e trasciniamo la cartella &#8220;Dropbox SDK&#8221; dentro il nostro progetto, ricordando di spuntare la voce &#8220;copy items into destination group\u2019s folder&#8221;, quindi aggiungiamo il framework security al progetto.<\/p>\n<p>Passiamo ora all&#8217;app delegate, dove dovremo scrivere del codice che ci permetter\u00e0 di iniziare la sessione con dropBox. Finch\u00e8 non faremo operazioni di alcun tipo non verr\u00e0 chiesto all&#8217;utente di loggarsi con il suo account dropbox.<\/p>\n<p>Importiamo l&#8217;sdk:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import \"DropboxSDK.h\"\r\n<\/pre>\n<p>Modifichiamo quindi il nostro delegate in modo tale che appena l&#8217;applicazione viene aperta inizi la sessione con Dropbox.<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\r\n{\r\n    \/\/ Override point for customization after application launch.\r\n    DBSession* dbSession = \r\n\t[[[DBSession alloc]\r\n\t  initWithConsumerKey:@\"sy94bo68a0uruk7\"\r\n\t  consumerSecret:@\"ijzhbkm2ixzq8ys\"]\r\n\t autorelease];\r\n    [DBSession setSharedSession:dbSession]; \r\n    \r\n    self.window.rootViewController = self.viewController;\r\n    [self.window makeKeyAndVisible];\r\n    return YES;\r\n}\r\n<\/pre>\n<p>Vi ricordo che in &#8220;ConsumerKey&#8221; e &#8220;consumerSecret&#8221; dovrete mettere le vostre rispettive chiavi che avete ottenuto e vedere nella pagina di dettaglio della vostra app sul sito developer di Dropbox.<\/p>\n<h4>Upload di un file<\/h4>\n<p>Vediamo ora come fare l\u2019upload della nostra immagine. Apriamo il file di intestazione (.h) del nostro viewController, importiamo quindi l&#8217;sdk, settiamo i due delegati e dichiariamo i 3 metodi che useremo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import \"DropboxSDK.h\"\r\n\r\n@interface devAPPT100ViewController : UIViewController <DBLoginControllerDelegate, DBRestClientDelegate>\r\n{\r\n    \r\n}\r\n\r\n-(void)uploadImg;\r\n-(void)downloadImg;\r\n-(void)resetImg;\r\n@end\r\n<\/pre>\n<p>Fatto questo passiamo al file di implementazione (.m) e iniziamo a scrivere il metodo per l&#8217;upload. Prima di tutto controlliamo che la sessione sia aperta, in tal caso facciamo l&#8217;upload del file, in caso contrario richiamiamo il controller che ha il compito di far fare il login all&#8217;utente.<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n-(void)uploadImg\r\n{\r\n    if([[DBSession sharedSession] isLinked])\r\n    {\r\n        NSLog(@\"linkato\");\r\n        \r\n    }\r\n    else\r\n    {\r\n        DBLoginController* controller = [[DBLoginController new] autorelease];\r\n        [controller presentFromController:self];\r\n        controller.delegate = self;\r\n    }\r\n}\r\n- (void)loginControllerDidLogin:(DBLoginController*)controller{\r\n\tNSLog(@\"login effettuato\");\r\n}\r\n\r\n- (void)loginControllerDidCancel:(DBLoginController*)controller\r\n{\r\n\tNSLog(@\"login cancellato\");\r\n}\r\n<\/pre>\n<p>Nel controller per far fare l&#8217;upload abbiamo impostato i delegati, in questo modo sapremo se l\u2019utente ha fatto o meno il login. Occupiamoci ora di come realizzare il backup della nostra immagine, iniziamo dichiarando nel viewController.h un oggetto DBRestClient, questo oggetto ci servir\u00e0 per comunicare con la cartella remota, uploadare file e scaricarli (oltre a molte altre funzionalit\u00e0 che non vedremo in questo tutorial)<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n@interface devAPPT100ViewController : UIViewController<DBLoginControllerDelegate, DBRestClientDelegate>\r\n{\r\n    DBRestClient* restClientUP;\r\n}\r\n<\/pre>\n<p>Nel file .m allochiamo l&#8217;oggetto restClientUP e facciamo l&#8217;upload del file. Torniamo al metodo uploadImg e modifichiamo il codice nel punto in cui sappiamo che il nostro utente \u00e8 loggato aggiungendo le istruzioni per l\u2019upload vero e proprio del file:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\nNSString *textFileNameN = @\"immagine.png\";\r\nNSString *dropBoxFolderN = @\"\/devAPPt100\";\r\n\r\n-(void)uploadImg\r\n{\r\n    if([[DBSession sharedSession] isLinked])\r\n    {\r\n        NSLog(@\"linkato\");\r\n        \r\n        if (!restClientUP) \r\n        {\r\n            restClientUP = \r\n            [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];\r\n            restClientUP.delegate = self;\r\n            [restClientUP createFolder:dropBoxFolderN];\r\n        }\r\n        \r\n        [restClientUP uploadFile:textFileNameN \r\n                          toPath:dropBoxFolderN\r\n                        fromPath:[[NSBundle mainBundle] pathForResource:@\"imgUpload\" ofType:@\"png\"]];\r\n    }\r\n    else\r\n    {\r\n        DBLoginController* controller = [[DBLoginController new] autorelease];\r\n        [controller presentFromController:self];\r\n        controller.delegate = self;\r\n    }\r\n}\r\n<\/pre>\n<p>Niente di complesso, abbiamo aggiunto l&#8217;oggetto restClientUP, lo abbiamo allocato e inizializzato con la sessione, abbiamo settato il delegato e gli abbiamo detto di creare la cartella devAPPt100. Fatto questo le istruzioni seguenti servono a fare l&#8217;effettivo upload del file immagine.png nel path devAPPt100 usando il file imgUpload.png.<\/p>\n<p>Grazie al delegate possiamo sapere se il file \u00e8 stato caricato o meno:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)restClient:(DBRestClient*)client uploadProgress:(CGFloat)progress forFile:(NSString*)destPath from:(NSString*)srcPath\r\n{\r\n\tNSLog(@\"load file: %f\\n\", progress);\r\n}\r\n\r\n- (void)restClient:(DBRestClient*)client uploadedFile:(NSString*)destPath from:(NSString*)srcPath\r\n{\r\n\tNSLog(@\"file uppato\\n\");\r\n\t\r\n}\r\n- (void)restClient:(DBRestClient*)client uploadFileFailedWithError:(NSError*)error\r\n{\r\n\tNSLog(@\"errore file uppato\\n\");\r\n\t\r\n}\r\n<\/pre>\n<p>In questo modo potremmo prevenire e gestire eventuali blocchi o errori durante l&#8217;upload. Se volete potete rifinire aggiungendo una progressBar per visualizzare lo stato di upload\/download.<\/p>\n<h4>Download di un file<\/h4>\n<p>Vediamo ora come effettuare il download di un file, il codice \u00e8 molto simile:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n-(void)downloadImg\r\n{\r\n    if([[DBSession sharedSession] isLinked])\r\n    {\r\n        NSLog(@\"linkato\");\r\n        \r\n        if (!restClientUP) \r\n        {\r\n            restClientUP = \r\n            [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];\r\n            restClientUP.delegate = self;\r\n        }\r\n        \r\n        NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);\r\n        NSString *documentsDir = [documentPaths objectAtIndex:0];\r\n        NSString *path = [documentsDir stringByAppendingPathComponent:@\"imgUpload.png\"];\r\n        \r\n        [restClientUP loadFile:@\"\/devAPPt100\/imgUpload.png\" intoPath:path];\r\n    }\r\n    else\r\n    {\r\n        DBLoginController* controller = [[DBLoginController new] autorelease];\r\n        [controller presentFromController:self];\r\n        controller.delegate = self;\r\n    }\r\n}\r\n\r\n- (void)restClient:(DBRestClient*)client loadedFile:(NSString*)destPath contentType:(NSString*)contentType\r\n{\r\n    NSLog(@\"dest path: %@, contetType: %@\",destPath, contentType);\r\n    \r\n    UIImageView * imgTemp = (UIImageView*)[self.view viewWithTag:10];\r\n    imgTemp.image = nil;\r\n    imgTemp.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:destPath]];\r\n}\r\n\r\n-(void)restClient:(DBRestClient *)client loadFileFailedWithError:(NSError *)error\r\n{\r\n    NSLog(@\"error: %@\", error);\r\n}\r\n<\/pre>\n<p>Prima di tutto verifichiamo l&#8217;oggetto restClientUP, se non \u00e8 allocato lo allochiamo e inizializziamo con la sessione che viene creata nell&#8217;appDelegate, quindi andiamo a creare il percorso dove salvare il file che dobbiamo scaricare. Ricordo che i file creati, modificati, scaricati a runtime li potremo posizionare solo nella cartella Documents, in quanto la cartella del progetto \u00e8 una sandbox.<br \/>\nChiamiamo quindi il metodo loadFile, questo metodo ha il compito di prendere un file da una cartella su DropBox e scaricarlo in un percorso locale.<br \/>\nA scaricamento avvenuto viene richiamato il metodo loadedFile, questo metodo ci ritorna il percorso del file sulla cartella dropBox e il percorso sulla quale \u00e8 salvato il file nel nostro device, che useremo per mostrarla nell&#8217;imageView, a cui possiamo accedere tramite la property tag settata ad inizio tutorial, ad inizio tutorial, prima per\u00f2 togliamo l&#8217;immagine precedente in modo da visualizzare quella appena scaricata.<\/p>\n<p>Il nostro tutorial termina qui, certamente non \u00e8 da considerare come applicazione completa, ma un riferimento che ci spiega come caricare e scaricare da dropBox un file. Analogamente potrete sperimentare tutte le altre funzionalit\u00e0 offerte ai developer da questo ottimo servizio.<\/p>\n<p>Questo il risultato finale:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-05.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-05.jpg\" alt=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-05\" title=\"t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-05\" width=\"321\" height=\"481\" class=\"aligncenter size-full wp-image-7586\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-05.jpg 321w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-05-200x300.jpg 200w\" sizes=\"auto, (max-width: 321px) 100vw, 321px\" \/><\/a><br \/>\n<\/center><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp.zip\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/download_icon.png\" alt=\"\" width=\"33\" height=\"40\" align=\"middle\" \/><\/a> Se avete problemi con il progetto presentato, <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/t100-integrare-dropbox-applicazioni-iphone-ipad-devapp.zip\" target=\"_blank\">questo \u00e8 il link per scaricare il nostro esempio.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ed eccoci giunti al nostro 100\u00b0 tutorial sulla programmazione iPhone e iPad, per noi un bel traguardo&#8230;<\/p>\n","protected":false},"author":136,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[270,899,900,902,901,782,242],"class_list":["post-7583","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-andrea-cappellotto","tag-dropbox-ios","tag-dropbox-xcode","tag-integrare-dropbox-applicazioni-ipad","tag-integrare-dropbox-applicazioni-iphone","tag-tutorial-programmazione-iphone-e-ipad","tag-tutorial-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/7583","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/136"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=7583"}],"version-history":[{"count":12,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/7583\/revisions"}],"predecessor-version":[{"id":8711,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/7583\/revisions\/8711"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=7583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=7583"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=7583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}