[iOs] Quick Objective-C Tutorial

Consiglio un bel tutorial per chi volesse iniziare la programmazione su Objective-C:

This tutorial is the place to learn the Objective-C programming language. It’s designed to serve as both a concise quick-reference and a comprehensive introduction for newcomers to the language. A familiarity with basic programming concepts like variables, functions, and objects is recommended, but not strictly required.

Published  – Tested on Xcode 4.5 with Apple LLVM compiler 4.1ry's tutorial

Molto fighe sono le immagini esemplificative e la semplicità di scrittura. Grande Ry!

Creative Commons License
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/07/31/ios-quick-objective-c-tutorial/.

[iOs] Come importare la libreria Google Data Library in un progetto xCode – Esempio con YouTube Service

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 armv6armv7, 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)“):

GData Installazione in xCode - Step 2

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.frameworkSystemConfiguration.framework

 GData Installazione in xCode - Step 3 GData Installazione in xCode - Step 3GData Installazione in xCode - Step 3

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

GData Installazione xCode - Step 4

  •  Sotto la voce Header Search Paths, inserire il valore /usr/include/libxml2

GData Installazione xCode - Step 4

5. Rimozione delle API di GData non necessarie: se nel vostro progetto vi interessa utilizzare soltanto determinate funzionalità offerte dalla libreria GData (per esempio, CalendarYoutube), 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)

GData Installazione xCode - Step 5

 

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.

GData Installazione xCode - Step 6 GData Installazione xCode - Step 6

 

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:

 

[iOs] Distribuzione su Apple Store: errore “No architectures to compile for armv6”

Chi ha avuto esperienza di programmazione su XCode 3 e ha iniziato a sviluppare un progetto lì e poi ad importarlo su XCode 4, sicuramente è incappato nell’errore “No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv6 armv7)“.

Questo errore non avviene a tempo di compilazione, ma all’atto della distribuzione su Apple Store.

Ho letto che capita anche sviluppando direttamente su XCode 4 e si verifica quando si crea un progetto che di default viene testato su una architettura armv7, che per intenderci è il processore che gira dagli iPhone 3GS a salire.

L’iPhone 3G monta un processore armv6, quindi, affinchè si possa deployare sui modelli da 3G a 4S, occorre settare la predisposizione a questa architettura sul compilatore. A partire dal firmware 4.3 apple ha tolto il supporto ai dispositivi basati su armv6 (iPod Touch/IPhone 1G, 2G, 3G), per cui se vi occorre rendere compatibile e scaricabile la vostra app anche su di essi, vi occorre compilarla su firmware 4.2 al massimo e dichiarare esplicitamente la compatibilità con l’architettura armv6.

Per prima cosa, occorre andare sulle proprietà del vostro progetto e settare una architettura valida (voce Valid Architecture):

  1. Navigare sul tab Build Settings e trovare le voci sotto il gruppo Architectures
  2. Per le voci presenti sotto tale gruppo settare i seguenti valori: Architectures: Standard (armv6 armv7); Base SDK: Latest iOS (iOS 4.3), Build Active Architecture Only: No, Supported Platforms: iphonesimulator, iphoneos e Valid Architectures: armv6 armv7 i386;
  3. Se nella voce Valid Architectures vi sono già i valori armv6 armv7, cancellarle, restartare XCode e reinserirle. Se vi è il valore $(ARCHS_STANDARD_32_BIT), vi consiglio di cancellarlo e inserire le due voci armv6 e armv7;
  4. Sempre in Valid Architectures, il valore i386 non è obbligatorio, ma permette di definire correttamente l’architettura utilizzata dal Simulatore che gira su un MacIntel.

Vi consiglio di fare anche il seguente passo, perchè mi è capitato che dopo essere riuscito ad uploadare la mia app su Apple Store, nonostante non mi abbia più dato l’errore “No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv6 armv7)“, mi segnalava l’app compatibile anche per iPhone 3G, ma quando la si provava a scaricare ed installare, non succedeva nulla (ovvero nè la scaricava nè la installava sul device).

5. Nel vostro progetto vi è sicuramente un file che si chiama yourProjectName-Info.plist, che contiene tutte le info di configurazione della vostra app. Occorre che cancellate tutte i valori presenti sotto la voce Required device capabilities (se c’è).

enter image description here

Vi allego gli screenshot dei passi descritti e i due post che mi sono serviti per risolvere questo bel problema di compatibilità sui dispositivi con armv6: