Il presente articolo costituisce un “upgrade” di quello già scritto su questo blog qualche tempo fa: “[iOS] Un video player nelle nostre app con il MediaPlayer framework e Google Data Library“. A quella data, la Google Data Library (o semplicemente “GData“) in Objective-C era disponibile ed importabile nei nostri progetti xCode come libreria compressa in estensione “.a”.
La GData compressa non dava nessun problema sui progetti compatibili con architettura armv6 e armv7, ma su armv7s non è più possibile compilarla (restituisce spesso errori del tipo “Symbols not found” su alcune sue classi).
E’ necessario, dunque, installare la libreria GData importando direttamente i suoi sorgenti e compilandoli per tutte le architetture supportate (da armv6 ad armv7s).
Ecco gli step da eseguire:
1. Download della libreria GData con SVN: basta clonare il codice sorgente della libreria dalla repo SVN di Google (http://code.google.com/p/gdata-objectivec-client/):
svn checkout http://gdata-objectivec-client.googlecode.com/svn/trunk/ gdata-objectivec-client-read-only
dove gdata-objectivec-client-read-only è la cartella in cui volete clonare la lib.
2. Trascinare il progetto GData.xcodeproj nel progetto xCode: occorre trascinare il progetto GData.xcodeproj, presente nella cartella Sources della libreria GData scaricata al punto 1, direttamente nel vostro progetto (senza checkare l’opzione “Copy items into destination group’s folder (if needed)“):
3. Importazione delle librerie e delle dipendenze nel progetto xCode: spostatevi nella scheda Build Phases del target di progetto ed importate le seguenti librerie:
- in Target Dependencies, aggiungete la libreria GDataTouchStaticLib
- in Link Binary With Libraries, aggiungete la libreria libGDataTouchStaticLib.a
- sempre in Link Binary With Libraries, aggiungete i framework: Security.framework e SystemConfiguration.framework
4. Configurazione dei parametri e dell’header path: spostatevi nella scheda Build Settings del target di progetto e configurare i seguenti parametri e path:
- sotto la voce “Other Linker Flags“, inserire i seguenti parametri:
- -ObjC
- -lxml2
- -all_load
- Sotto la voce Header Search Paths, inserire il valore /usr/include/libxml2
5. Rimozione delle API di GData non necessarie: se nel vostro progetto vi interessa utilizzare soltanto determinate funzionalità offerte dalla libreria GData (per esempio, Calendar o Youtube), occorre effettuare anche la seguente configurazione:
- cliccate sulla root del progetto GData importato in xCode e selezionate il target GDataTouchStaticLib. In “Build Setting“, sotto la voce “Other C Flags” (sia per Release che per Debug), inserite i seguenti parametri:
- -DGDATA_REQUIRE_SERVICE_INCLUDES=1
- -DGDATA_INCLUDE_CALENDAR_SERVICE=1 (se vi interessa utilizzare Google Calendar)
- -DGDATA_INCLUDE_YOUTUBE_SERVICE=1 (se volete interfacciarvi con Youtube)
- -DGDATA_INCLUDE_CONTACTS_SERVICE=1 (per utilizzare le Contact API)
- …
6. Compilazione e importazione degli header di GData nel progetto: dopo aver eseguito i precedenti step, compilate il vostro progetto e, se non vi sono errori, andate nell’Organizer di xCode, nella scheda Projects. Qui vi trovate un link per accedere alla cartella Derived Data con il codice compilato del vostro progetto. Nella directory Build/Products/Debug-iphonesimulator/Product troverete la cartella Header in cui sono presenti le interfacce di GData. Dovete trascinare tutta la cartella Header nel vostro progetto.
NOTA. Se all’atto del rilascio (distribuzione su Apple Store o “ad hoc”), vi ritrovate un file .xarchive, invece, di un .app/.ipa, eseguite i seguenti step:
- Eliminate tutti i target di GData (click destro sul progetto GData.xcodeproj)
- Settate la voce SKYP INSTALL a YES in “Build Settings” del target di GData.
7. Utilizzo della libreria GData: se i passi precedenti vengono eseguiti correttamente e senza errori, potete utilizzare le API di Google Data Library.
Come prova, importate la seguente riga in una vostra classe. Se non vi sono errori di compilazione, la configurazione di GData è stata eseguita correttamente.
#import "GData.h"
Vi allego un progettino di esempio in cui mi interfaccio con Youtube per scaricare la lista di video da un canale. La libreria GData qui è stata inserita in una cartella Submodules e potete importarla trascinandola da lì. NOTA. Occorre ripetere la procedura riportata sopra per far riconoscere al progetto la GData lib, altrimenti vi ritrovete un errore in compilazione: “ld: library not found for -lGDataTouchStaticLib“.
https://github.com/fficetola/GDataLibTest
——————
Riferimenti utili:

This work by Francesco Ficetola is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at www.francescoficetola.it.
Permissions beyond the scope of this license may be available at http://www.francescoficetola.it/2013/05/18/ios-come-importare-la-libreria-google-data-library-in-un-progetto-xcode/.