[AppMobile] iParcheggiatori

iparcheggiatoriApplicazione Mobile: iParcheggiatori

Pagina Store: Apple Store

Sito web: http://www.iparcheggiatori.it

Descrizione: App per la segnalazione dei “parcheggiatori abusivi”. L’idea è quella di sfruttare la tecnologia per “stanare” questi estorsori in piena regola. Nasce così iParcheggiatori, un’applicazione gratuita che permette di inviare segnalazioni “Anonime” da qualsiasi punto d’Italia in cui ci si trovi.
Il sistema, attraverso la geolocalizzazione, permette di indicare il punto esatto della città in cui sono presenti i parcheggiatori abusivi. E’ possibile, in aggiunta, indicare se il pagamento è “a piacere” (ossia una somma da contrattare con il “lavoratore” di turno) e se qualcuno abbia subito minacce o danni alla propria vettura.

Requisiti: Richiede l’iOS 5.1.1 o successive. Compatibile con iPhone, iPad e iPod touch. Questa app è ottimizzata per iPhone 5.

Categoria: Utility

Tecnologie: XCode 5; iPhone 3GS/4/4S/5/5S; MacOx 10.9 (Maverick) – Linguaggio: Objective-C; Framework e Librerie: MapKit; Integrazione con servizi REST-JSON.

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/2014/02/22/appmobile-iparcheggiatori/.

[iOs] Idee e codici per menù ed altri componenti grafiche con effetti e transizioni su Code4App

Condivido qui un sito interessante, Code4App, dove vengono proposti menù ad effetto con transizioni:

In realtà, sul sito di Code4App troverete anche tante altre idee per la vostra app, come tab bar, animazioni, calendar, tabelle, ecc. ecc. Ovviamente troverete anche i codici sorgenti da scaricare e provare in xCode.

Ecco le categorie attualmente disponibili:

CodeApp - Category

Devo dire che è davvero una bella idea quella di raccogliere su un sito tutti i progettini utili ed interessanti condivisi da utenti di GitHub, BitBucket ed altri. Spesso, infatti, è difficile cercare quello che serve sui social network per programmatori, perché non mettono a disposizione una “vetrina” immediata che consente di individuare il componente desiderato.

Ecco i menù che ho trovato interessanti su Code4App e che ho usato per una mia app:

ios_menu popupscroll_menu ios

[iOs] Aggiornamento ad xCode 5: novità e how-to ai problemi post-upgrade

xCode 5Dopo gli upgrade di xCode, si hanno gli ormai inevitabili problemi di compatibilità o di change configuration di progetti scritti con una versione precedente. Sono passato al nuovo xCode 5 da quando è stato rilasciato per gli sviluppatori iOs, imbattendomi in alcune problematiche, e ho pensato di scrivere una sorta di “how-to” per la loro risoluzione, riportandolo in fondo a questo articolo.

Novità di xCode 5. Vediamo prima quali sono le novità introdotte in xCode 5:

  • Configurazione automatica: i progetti vengono automaticamente configurati per supportare i servizi Apple come iCloud, Passbook Game Center. Inserendo il proprio Apple ID, è possibile gestire anche il proprio team, i certificati e gli entitlements, il tutto direttamente da IDE (cosa che prima si effettuava connettendosi al Provisioning Portal). In base ai servizi richiesti, xCode importa anche i framework necessari e crea gli appropriati provisioning profiles, “firmando” l’app ogni volta che viene “buildata”.
  • Test Navigator: il test-driven development diventa più semplice, utilizzando il nuovo Test Navigator, editor in cui creare, modificare e lanciare gli unit tests. Si possono lanciare singoli test o gruppi di test, grazie ad Assistant Editor.
  • Bots per il Continuous Integration: xCode si integra (integrerà) con l’OS X Server del Sistema Operativo OS X Mavericks, permettendo la creazione di “bots” che “buildano” continuamente l’app ed eseguono i test e lo static analyzer per scovare potenziali bug. I bots possono essere lanciati su qualsiasi Mac presente in rete, monitorando l’integration work su macchina locale.
  • Auto Layout: l’auto-layouting permette di “aggiustare” automaticamente la dimensione delle view grafiche, il loro orientamento e la localizzazione (internazionalizzazione), direttamente da Interface Builder. Introdotti a tale scopo il free-form canvas e i constraints (in realtà già presenti nelle versioni precedenti di xCode).
  • Asset Management: grazie agli Asset Catalogs (salvati su file compressi con estensione .xcassets) si possono gestire le immagini inserite nelle app. Le diverse versioni della stessa immagine (per le differenti risoluzioni dei device) vengono collezionate tutte in un singolo file. L’Asset Catalog sceglie quale immagine renderizzare in base al device su cui si testa e permette anche di scalarla dinamicamente.
  • Debug deeper analysis: con il nuovo strumento di debug è possibile misurare anche il consumo dei dati, la memoria CPU occupata, l’energia in uso, e altri valori prestazionali (deeper analysis), allertando lo sviluppatore in caso di overhead.
  • Visual Debugger: il debugger utilizzato è l’LLDB engine (nelle precedenti versioni c’era anche GDB, adesso completamente rimosso). Resa più leggibile e chiara la visualizzazione dei messaggi di debug ed inseriti “data tips” più esplicativi. Finalmente, si può “ispezionare” con un singolo click la variabile/oggetto e stampare le sue proprietà direttamente sulla debug console.
  • Source Control: migliorato il sistema di versioning che visualizza anche i branch attivi di progetto e permette agevolmente di switchare, creare e mergiare i branch stessi. E’ possibile gestire in un singolo punto tutte le repository (Accounts preferences) e l’OS X Server su OS X Mavericks permette (permetterà) di “hostare” anche repository GIT per il team di sviluppo.

 

Problemi post-upgrade ad xCode 5. Riporto di seguito le anomalie riscontrate (e corrette) dopo l’aggiornamento ad xCode 5, su progetti scritti su versioni precedenti.

Nota. Questo articolo sarà costantemente aggiornato, man mano che mi si presenteranno anomalie su “vecchi” progetti nel nuovo ambiente di xCode 5.

  • Impossibile debuggare, visualizzazione del messaggio “Attaching appname” con schermata nera sul vostro Simulatore iOs. Se non riuscite più a debuggare le vostre app, vi viene mostrato continuamente il messaggio “Attaching <appname>” e lo screen del Simulatore vi rimane nero, senza dar minimo segno di visualizzazione della vostra app, nelle precedenti versioni di xCode bastava switchare dal debugger LLDB a GDB (Scheda Product>>Edit Scheme). Adesso, avendo eliminato il debugger GDB, tale procedura non funziona più e vi conviene seguire il seguente “how-to”: http://stackoverflow.com/questions/15174282/why-does-the-lldb-debugger-constantly-fail-to-attach. Occorre cioè assicurarsi che sul vostro file di hosts (presente al patch /private/etc/hosts del vostro Mac) si faccia lookup” di localhost su 127.0.0.1. Nel mio file di hosts, invece, vi erano mappati altri valori (colpa di Adobe Professional!).

(continua…)

 

[iOs] Librerie per la scansione di codici a barre ed il riconoscimento OCR

Come acquisire un codice a barre in un’app iOs? Ce lo dice Marco Giraudo, giovane sviluppatore iOs e PHP, che mi ha mandato questo ottimo articolo, in cui si è trovato a valutare delle librerie per la scansione di codici a barre (BarCode Reader), ma anche per il riconoscimento OCR.

iPhone_barcode_scanner

Eccovi l’esperienza di Marco, a cui va il mio ringraziamento:

“Mi sono fatto questa domanda nelle ultime settimane per motivi di lavoro e vi voglio riportare 2 esempi che sono riuscito a trovare e testare. In particolare, mi serviva riconoscere un codice a barre e cosi ho utilizzato due librerie: ZBarSDK e Tesseract .

1° Esempio: ZBarSDK

ZBarSDKhttp://zbar.sourceforge.net/iphone/sdkdoc/

C’è stato subito un problema da superare, dopo l’installazione sul mio progetto xCode:

Warning: Only the iPhone 3GS and iPhone 4 are supported, as they have a camera with auto-focus. The ZBar library does not support the iPhone 3G and is unlikely to ever support it.

Su iPhone 5 con iOs 6 e successivi mi dava problemi, ma ho trovato la soluzione su http://stackoverflow.com:

http://stackoverflow.com/questions/12506671/zbar-sdk-is-not-working-in-ios6

Oltre a settare come “Valid Architecture” il processore armv7s nelle impostazioni del vostro progetto xCode, potete provare a scaricare ed installare la versione beta compatibile con iOs 6 (ZBarSDK-1.3.1.dmg):

http://sourceforge.net/projects/zbar/files/iPhoneSDK/beta/

Una  volta installato il .DMG, l’unica cosa da fare è leggere il file README riportato e seguire le istruzioni per inserire la libreria nel proprio progetto:

    • trascinare la cartella ZBarSDK nel proprio progetto
    • inserire nel proprio progetto i Frameworks: AVFoundation (weak), CoreMedia (weak), CoreVideo (weak), QuartzCore, libiconv.dylib

Per usare ZBar, basta importare nel vostro controller la libreria:

#import “ZBarSDK.h”

Nello stesso .dmg troverete una cartella con molti esempi da cui prendere spunto. L’ho anche provata con iPhone5 con su installato ios7 beta4 e funziona benissimo.

2° Esempio: Tesseract-OCR (Google)

Secondo esempio che vi riporto è tesseract-ocr, un OCR Engine che vi permette di riconoscere i testi riportati in un’immagine. Ecco il sito ufficiale su Google Code:

http://code.google.com/p/tesseract-ocr/

Per far funzionare l’OCR Engine in iOs, esiste un Wrapper: Tesseract for iOs (https://github.com/ldiqual/tesseract-ios)

Eccovi le istruzioni di installazione:

http://lois.di-qual.net/blog/install-and-use-tesseract-on-ios-with-tesseract-ios/

Spero che questi due esempi possano esservi utili. Alla prossima!”

[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 “ad hoc” di una app senza sincronizzazione con iTunes, direttamente da device

TestFlightApp LogoVi scrivo qui la procedura che sto seguendo per permettere ad un altro utente di installare la vostra app, senza ogni volta mandargli l’IPA (e relativo certificato di “Ad Hoc Distribution Provisioning”), e senza fargliela sincronizzare con iTunes.

La procedura permette di:

  • inviare una notifica all’utente di rilascio di una nuova versione beta, con relativa descrizione delle funzionalità o correzioni che avete fatto
  • far installare l’app direttamente da device, senza farglielo attaccare via usb al pc e sincronizzare l’IPA e certificato con iTunes
  • ricevere feedback e visualizzare quale è l’effettiva release installata dall’utente sul proprio device, grazie ad una interfaccia web di monitoraggio e di attività

Il servizio si chiama TestFlight ed è disponibile a questo indirizzo: https://testflightapp.com

Appunto, la procedura descritta è quella dell’ installazione “al volo” delle versioni beta delle app (ad hoc distribution over the air) e l’ho trovata molto molto comoda. Basta registrare un account, assolutamente free, e inserire poi le seguenti informazioni da una dashboard:

  • team di progetto: indirizzi email e relativi UUID dei device dei membri del vostro team (siano essi clienti o colleghi di lavoro)
  • certificati di Provisioning: per poter installare una IPA su un device, come sapete, occorre un certificato di ” Provisioning Ad Hoc Distribution”, come descritto anche in un precedente articolo di questo blog: [iOs] Archiviazione e distribuzione di un “ad hoc build” o IPA file con XCode 4

Il certificato di distribuzione “ad hoc” si aggiorna sempre sull’account di Apple Developer, ma lo si inserisce direttamente in TestFlight. Ogni volta, dunque, non dovete inviarlo di nuovo agli utenti, ma verrà aggiornato in automatico da TestFlight stesso quando viene installata la release dell’app inviata.

Per ciascuna release, TestFlight vi permette di inviare una notifica solo ad alcuni utenti a cui dare il permesso di installarla, dandovi informazioni su quando, se e da chi è stata installata.

Nulla di più semplice :)

TestFlightApp

[iOS] La libreria Three20: navigazione “persistente” e galleria fotografica nelle vostre app

Three20 è una libreria open-source scritta in Objective-C e molto utilizzata e diffusa tra le maggiori app in Apple Store, come Facebook, Posterous, Pulse, Meetup.com e SCVNGR (vedi il seguente link con l’elenco delle app più famose che lo hanno utilizzato: http://three20.info/gallery).

La libreria mette a disposizione un ricco set di view controller come il Launcher, il popolare Photo Browser per la creazione di una gallery, e varie tables concepite per i contenuti Internet.

Altra funzionalità potentissima è quella che permette di accedere alle view delle vostra app tramite delle URL, come se la navigazione avvenisse su un sito web. Tale possibilità è davvero eccezionale, perché senza tale framework siamo costretti a programmare la navigazione con una gestione a stack delle view (grazie al navigation controller), dove il “salto” tra una vista e l’altra può avvenire solo tramite operazioni di push e pop delle stesse. Three20 introduce, quindi, il concetto di “persistenza“: permette di ricordare lo stato dell’app, ovvero ogni pagina (vista) viene “raggiunta” grazie ad una specifica URL. Quando un utente naviga attraverso le viste, Three20 memorizza una history di navigazione e la scrive su disco. Quando l’app viene ricaricata di nuovo, queste URLs vengono rieseguite istantaneamente così che la navigazione inizia dall’ultima vista visualizzata.

La libreria è modulare, ossia è possibile scegliere quali elementi includere nelle nostre app. Ciò fa di Three20 l’unico framework in Objective-C che incoraggia l’utilizzo di quelle che la comunità chiama “extensions“. Il Launcher è un’altra implementazione open-source disponibile in Three20 che emula l’app launcher standard dei dispositivi iOs (ossia il “desktop” con tutte le app installate, detto springboard). Il Launcher permette, dunque, di riordinare e cancellare gli elementi, personalizzare il numero di colonne e righe e di gestire pagine multiple.

Ecco il link al sito ufficiale con la demo delle funzionalità disponibili in Three20http://three20.info

Per una introduzione vi consiglio di leggere il post sul blog di Ray Wenderlich:

http://www.raywenderlich.com/656/introduction-to-three20

Per l’installazione del framework nelle vostre app vi invito a vedere il seguente video:

http://www.youtube.com/watch?v=-0-E-Z0fihg

Il progetto si trova su GitHub e prendi il nome di Facebook-Thre20, perché Facebook lo utilizzò per implementare la sua prima app mobile e lo ha fixato/customizzato nella versione attualmente (1.0.6) più stabile: https://github.com/facebook/three20/

L’installazione di Three20 nelle vostre app è molto semplice. Prima occorre scaricare la libreria a questo link: http://three20.info/roadmap/1.0.6.2 (o da riga di comando con GIT o decomprimendo il .tar). Vi consiglio di mettere la cartella decompressa di Three20 (rinominandola in three20) nella parent directory che contiene il progetto della vostra app. Basta poi digitare da terminale il seguente comando python per procedere all’installazione e configurazione automatica della libreria nella vostra app:

python three20/src/scripts/ttmodule.py -p path/to/myProject.xcodeproj Three20

Vi ritrovate comunque tutti i passi, anche quelli della procedura manuale di installazione, al seguente link: http://three20.info/article/2010-10-06-Adding-Three20-To-Your-Project Dopo l’installazione, nel progetto della vostra app, vi ritroverete (nella cartella Frameworks o Dependencies) i seguenti sottoprogetti (o moduli):

  • Three20Core
  • Three20Network
  • Three20Style
  • Three20UICommon
  • Three20UINavigator
  • Three20UI
  • Three20

Quando compilerete il vost ro progetto, XCode compilerà prima i precedenti sottoprogetti, rendendo disponibili i compilati alla vostra app.

Per realizzare una galleria di foto in una app iPhone/iPad, io ho seguito l’articolo sul blog di Ray Wenderlichhttp://www.raywenderlich.com/1430/how-to-use-the-three20-photo-viewer

Grazie al precedente articolo, ho potuto realizzare le gallery di foto delle mie app iVagabro e LuBannApp.

 

[iOs] In-App Purchases: come far acquistare dalle nostre app

Volete inserire nelle apps per iOs la possibilità di far acquistare ai vostri utenti contenuti extra di qualsiasi genere (siano essi video, brani audio, ebook, …), ovviamente tutti non protetti da copyright o di cui voi siate proprietari?

Siete obbligatori a utilizzare e rispettare il programma In-App Purchase (IAP) della Apple, di cui vi linko la guida ufficiale: In-App Purchase Programming Guide.

Attenzione. Nelle guidelines di Apple, di cui ho scritto anche un post a questo link, si legge:

11.2 Le apps che utilizzano un sistema differente dalle In App Purchase API (IAP) per acquistare contenuti, funzionalità o servizi nell’app, non vengono accettate

Non potete, dunque, inserire altre modalità di pagamento per i contenuti delle vostre app, di nessun tipo (siano esse PayPal o sistemi esterni di pagamento), se questi contenuti vengono utilizzati direttamente nella vostra app (per esempio, brani audio scaricati, e-book da leggere attraverso l’app stessa, ecc.). Inoltre, questo stesso punto di applica a contenuti “virtuali”, come crediti, bonus, punti, ricariche, …

Quando si può acquistare tramite sistemi differenti per il pagamento (come PayPal) direttamente nelle nostre app ?

Ce lo dice il punto 11.3 delle linee guida:

11.3 Apps using IAP to purchase physical goods or goods and services used outside of the application will be rejected

Non possiamo usare In-App Purchases di Apple quando si tratta di far acquistare beni reali (physical goods) o beni e servizi che vengono usati esternamente all’app. Faccio un esempio: un catalogo di prodotti che vengono venduti da un negozio (sia esso fisico o online), oppure se volete far acquistare un servizio (spedizione di un prodotto comprato ad un cliente, …). Qui dovete utilizzare un sistema esterno per i pagamenti, come PayPal o bonifico.

 

Continuando, nelle linee guida sta anche scritto:

11.14 Le apps possono leggere o riprodurre contenuti (specificamente riviste, giornali, libri, audio, musica e video) ottenuti attraverso sottoscrizione o acquisto al di fuori dall’app, purché l’acquisto stesso non avvenga con un bottone o fornendo un link esterno nell’app per acquistare il contenuto approvato. Apple non chiede porzioni di “revenue“  (introiti) per gli acquisti approvati, acquistati o ottenuti con metodi esterni all’app

 

Apple obbliga gli sviluppatori ad iscriversi al programma IAP per ricavare il 30% degli introiti sulle vendite dei vostri contenuti fruibili attraverso l’app. La cosa assurda è che si vedono, comunque, apps sullo store che permettono anche altre modalità di pagamento (vedi Ebay e Amazon) per l’acquisto di prodotti di qualsiasi genere (siano essi reali o virtuali). Sarà che esistono degli accordi “sotto banco” tra Apple e queste grandi società? Oppure esistono degli “escamotage” per aggirare questo grosso vincolo di Apple? (sembrerebbe che Amazon abbia adottato un sistema di “workaround“, che onestamente non mi convince … Amazon ByPasses the iOs Commission Requirement).

Vi dirò che in un’app avevo inserito come modalità di pagamento PayPal, utilizzando le istruzioni presenti negli articoli scritti su questo blog su OsCommerce e PayPal Express. La Apple mi ha bocciato l’app per non aver rispettato il punto 11.2 suddetto, in quanto la mia app fa acquistare contenuti audio che poi vengono riprodotti nel player interno dell’app stessa.

A quel punto ho iniziato a studiare ed implementare il sistema di pagamento In-App Purchases di Apple, di cui vi allego un pò di articoli utili, alcuni dei quali mi sono serviti per risolvere non pochi problemi che mi hanno portato via un bel pò di settimane di lavoro.

RIFERIMENTI UTILI:

Di seguito vi riporto i passi da seguire per inserire gli In-App Purchases nelle vostre app.

Continua la lettura

[iOs] Introduzione a SQLite e integrazione in un XCode Project

SQLITE è un Relational DBMS embedded, ovvero è disponibile sotto forma di libreria che viene inclusa in una applicazione. Non vi è alcun database che gira in background e tutte le operazioni che devono essere effettuate su tale database vengono lanciate dall’applicazione sotto forma di chiamate a funzioni contenute nella libreria SQLite.
SQLite è scritto in linguaggio C e occorre utilizzare SQLite in un progetto XCode direttamente con chiamate a funzioni in C per accedere alle strutture dati.

C’è da dire che come DBMS non è eccezionalmente performante. Già il fatto che materializza le strutture dati su un singolo file memorizzato localmente all’applicazione, fa capire che può essere impiegato in contesti in cui non occorre avere il massimo delle performance (accessi in concorrenza, grosse quantità di dati, join tra più tabelle, …). Eppure nei contesti mobile, dove comunque le strutture dati non sono molto complesse, SQLite risulta una soluzione molto versatile e comoda.

Per informazioni dettagliate su SQLite riferirsi al sito ufficiale: www.sqlite.org. Di seguito, viene fatta una panoramica veloce sugli aspetti introduttivi e sull’integrazione di questo RDBMS in un progetto XCode.

Structured Query Language (SQL)
Si accede ai dati di un database in SQLite usando il linguaggio ad alto livello conosciuto come Structured Query Language (SQL), conforme allo standard SQL-92.

Se vi interessa creare un database SQLite potete consultare le due sezioni spiegate nel resto di questo wiki: Utilizzare SQLite su MacOS X (in cui si descrive la creazione di un database e la sua gestione da Terminale) oppure Creazione di un database SQLite con SQLite Manager (add-ons di Filefox)

Continua la lettura

[iOs] Archiviazione e distribuzione di un “ad hoc build” o IPA file con XCode 4

Se volessimo distribuire la nostra app senza rilasciarla su Apple Store, magari per farla testare ad altri utenti, occorre seguire i seguenti passi.
Teoricamente, occorrerebbe creare un pacchetto “ad-hoc” (ad hoc build) firmandolo con un “ad hoc distribution provisioning profile” (certificato per la distribuzione creato su iOs Dev Center). Cioè dovremmo condividere oltre che il file .app anche un file .mobileprovision (con il certificato).
L’utente dovrà importare il file .mobileprovision nella barra sinistra di iTunes, insieme al file .app.
Il modo migliore è distribuire un file IPA contrassegnato con un “ad hoc distribution profile“, così che l’utente dovrà fare soltanto un doppio click sull’IPA file e installarlo in iTunes.

Operazione preliminare – Build & Archive
Per creare un file IPA, occorre usare direttamente XCode e rilasciare un Archivio (scheda Product e poi Archive). Verrà creato un archivio nell’Organizer, dove si dovrà scegliere il provisioning profile per firmarlo.
E’ buona norma utilizzare un “ad hoc distribution provisioning profile“, oppure è possibile usare un distribution profile con un nome generico (o con wildcard).

IMPORTANTE. Occorre generare un certificato “Ad Hoc Distribution” sulla propria pagina personale di DEV APPLE, associando il certificato ai dispositivi su cui poi si dovrà installare l’app (per la distribuzione al cliente, per esempio, prima della pubblicazione definitiva su Apple Store). Il dispositivo su cui installare l’app si associa inserendo nella pagina di DEV APPLE il codice UDID di 40 cifre alfanumeriche (vi riporto alla fine del presente articolo un riferimento che spiega come recuperarlo). Dopo averlo inserito, occorre generare un certificato di distribuzione “Ad Hoc” associandolo al dispositivo (sempre in DEV APPLE), scaricarlo e importarlo in Organizer di XCode (basta fare il doppio click sul file .mobileprovisioning). Una volta importato, occorre associare il certificato alla configurazione di XCode, come spiegato di seguito).

Creazione di una nuova configurazione in Project Settings
Si crea una configurazione (la possiamo chiamare Ad Hoc Distribution). Cliccare sul nome del progetto (pannello a sinistra) e nel pannello Groups & Files selezionare prima il progetto e poi il target.

Si duplica la voce Release e si crea una nuova configurazione a cui dare un nome (Ad Hoc Distribution, per esempio).

Setup del target
Nella scheda del Target, assicurarsi che sotto il tab Build Settings, selezionando ALL e COMBINED, in corrispondenza della voce Code Signing vi sia il corretto certificato per la distribuzione (nel nostro caso, “Ad Hoc Distribution”).

Skip install
Se nel progetto ci sono librerie statiche (tipo Cocos2d oppure Three20), occorre eseguire uno step extra che assicuri che esse vengano incluse nell’app binaria correttamente. Basta selezionare le singole librerie e nel pannello a destra, per ognuna di esse, occorre trovare la voce Skip Install (in Build Settings, gruppo Deployment – utilizzate la funzione di ricerca per velocizzare) e inserire il valore YES per la configurazione creata al passo precedente (“Ad Hoc Distribution“, nel nostro caso) .

NOTA. Lo step “Skip Install” è necessario solo se il progetto contiene le static libraries e deve essere eseguito SOLO per le static library e NON per il Target o il progetto della propria app.

Configurazione per l’Archive Scheme
Nel menù Product, vi è la voce Edit Scheme. Selezionare Archive dal pannello sinistro e poi settare Build Configuration con la propria configurazione (“Ad Hoc Distribution“, nel nostro caso), salvando.

Creazione dell’archivio
E’ possibile ora creare l’Archivio. Nel top menu, sotto la voce Product vi è l’opzione Archive. Quando l’operazione è terminata correttamente, sotto l’Organizer vi è il tab Archives con il nostro pacchetto.

Creazione del file IPA
Selezionato l’archivio appena creato, si può creare il file IPA, cliccando su Share e poi confermando il provisioning profile utilizzato. Andando avanti, scegliendo in corrispondenza di Contents la voce “iOS App Store Package .ipa“, si crea l’IPA file con un nome e lo si salva.

Adesso siamo pronti per distribuire il pacchetto IPA. L’utente che lo riceverà, dovrà semplicemente fare un doppio click e sincronizzare il proprio device con iTunes, per trovarsi l’app così installata.

Riferimenti: