Archive for the ‘iphone’ Category

Anker : carica batterie a 5 porte USB

Tuesday, January 21st, 2014

Vi capita mai  di dover ricaricare  vari dispositivi USB (tablet e telefoni vari)  e non avere abbastanza prese elettriche disponibili ?

Girando su Amazon ho trovato questo carica batterie. Ordinato e arrivato in un giorno lavorativo.

20140121-144936.jpg

Le dimensioni sono contenute (9,1×6,6×2,5cm), all’interno della confezione è presente un cavo sufficientemente lungo per collegare il dispositivo alla rete elettrica. Il charger è capace di erogare 5A totali di corrente suddiviso su diverse porte.

20140121-144945.jpg

Ogni porta ha una diversa etichetta e un diverso amperaggio (2.1, 1.3, 2.1, 1, 1) con porte dedicate all’ipad (ma anche nexus 7) e 2 porte per smartphone (iphone e android). Avendo il limite di 5A si potranno caricare 2 tablet e un telefono insieme, oppure 5 telefoni.

Ho fatto una prova notturna: ho caricato contemporaneamente con successo un iphone, un galaxy ace, un nexus 7 e un ipad di prima generazione.

L’unico appunto al dispositivo: un groviglio di cavi in uscita.

Prima app per android pubblicata

Friday, November 30th, 2012

Normalmente nella mia vita lavorativa quando si discute di applicazioni mobili multipiattaforma, in un modo o nel altro parlo sempre della mia esperienza con PhoneGap (ora Cordova); la mia prima app sull’appStore di Apple (A.I.S.Mo Info)  è stata appunto  sviluppata con questo framework ed era più che altro un esperimento, quasi un Proof Of Concept.

L’app in se stessa è molto semplice,: un insieme di pagine HTML che sfruttano poco le caratteristiche di PhoneGap e con qualche hack per le mappe. La User Interface è molto iOS-like grazie all’utilizzo del framework CSS UIUIKit.

Ci sono stati esperimenti di porting “automatico” usando il servizio PhoneGap build (ora Adobe PhoneGap Build).

Cogliendo l’occasione di un corso di sviluppo Android, ho effettuato il porting dell’applicazione.

Tempo totale: meno di una giornata compreso il tempo di pubblicazione sul PlayStore.

La fase vera di porting e test è stata molto veloce, ho dovuto testare la visualizzazione su diversi dispositivi a mia disposizione,  creare le icone (ho usate le stesse dell’iphone ridimensionate da eclipse) e gli screen shot per il play store.

In due ore e mezzo, mi sono registrato come sviluppatore, ho cercato di capire cosa fosse necessario per pubblicare l’app (testi e screenshot). La creazione del pacchetto di rilascio è molto più semplice, non c’e’ da impazzire con provisioning profiles, certificati e loro relativa importazione (e conflitti);ho quindi firmato il pacchetto creando il Keystore e atteso che l’app fosse disponibile su GooglePlay.

Sicuramente la pubblicazione su PlayStore è molto più “easy” che non su appStore, i tempi di attesa sono molto diversi in quanto il market di android è molto più “libero” e con meno controlli rispetto ad Apple, ma se si volesse pubblicare la propria app anche su altri market Android i tempi di pubblicazione non sarebbero molto diversi da quelli a cui è abituato uno sviluppatore iOS.

 

 

Phonegap Cordova: richiamare l’app mappe nativa in IOS6

Sunday, October 21st, 2012

In un precendente post spiegavo un work-around per richiamare l’app Mappe di google nativa su iOS da una applicazione sviluppata con phonegap: lanciando opportunamente un URL che puntasse al server maps.google.com, si apriva l’app mappe integrata. Il lancio “dell’opportuno URL” consiste in una semplice riga di codice:

[[UIApplication sharedApplication] openURL:url];

Nell’ultima versione del sistema degli iDevice l’applicazione l’app di google è stata sostituita e il comportamento degli URL è cambiato di conseguenza. In IOS6 un url a maps.google.com aprirà il sito di google in Safari. Sarà quindi necessario intercettare tutte le chiamate di apertura URL della webView e sostituire l’url corretto per la versione di  IOS. Gli URL alle mappe nella mia applicazione puntano a maps.apple.com. Il metodo è shouldStartLoadWithRequest che si trova in MainViewController.m (la posizione è cambiata rispetto a phonegap  1.0)

[sourcecode language=”objc”]
– (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType) navigationType {
NSLog(@"link:%@",[[request URL] absoluteString]);
if ([[[request URL] absoluteString] rangeOfString:@"http://maps.apple.com"].location != NSNotFound) {
// Open in native Maps App
if ([[UIDevice currentDevice].systemVersion floatValue] NSLog(@"MAPPE GOOGLE");
NSURL *url=[NSURL URLWithString:[[[request URL] absoluteString] stringByReplacingOccurrencesOfString:@"http://maps.apple.com" withString:@"http://maps.google.com" ]];
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"MAPPE APPLE");
[[UIApplication sharedApplication] openURL:[request URL]];
}
return NO;
}
else
return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
[/sourcecode]

[iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=1449319548″ width=”121px” height=”240px” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″][/iframe] [iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B008EK6HVY” width=”121px” height=”240px” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″][/iframe] [iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=1430239034″ width=”121px” height=”240px” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″][/iframe]

Creare un template in Xcode 4

Wednesday, March 21st, 2012

In questo post vedremo come creare un semplice template Xcode per generare una classe Singleton.
Putroppo non c’e’ un documento ufficiale Apple che spieghi la sintassi di un template, ma si puo’ imparare molto guardando i template forniti con Xcode.

In Xcode 4.3 i template si trovano in

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates

mentre sul vecchio Xcode si trovano in

/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates.

Gli “User Templates” si trovano invece in

~/Library/Developer/Xcode/Templates/File Templates

noi creeremo i nostri file in questa directory.

Ogni template è costituito da un insieme di files racchiusi tutti nella stessa directory creata con estensione .xctemplate.

Creare quindi la cartella con “sudo mkdir mySingleton.xctemplate”; tutti i file verrano creati in questa cartella.

Tipicamente sono necessari 4 file per un template:

  • TemplateInfo.plist    TemplateInfo.plist definisce il nuovo template
  • TemplateIcon.icns    Icona  128px X 128px mostrata in xCode
  • ___FILEBASENAME___.h    Header del file da creare
  • ___FILEBASENAME___.m    Implementazione del file da creare

Il template viene definito nel file TemplateInfo.plist; che permette di specificare i file di output,  eventuali input dell’utente
e le variabili da usare durante la creazione dei file.

Ecco come puo’ essere definito il file .plist tipico

[sourcecode language=”xml”]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AllowedTypes</key>
<array>
<string>public.objective-c-source</string>
<string>public.objective-c-plus-plus-source</string>
</array>
<key>DefaultCompletionName</key>
<string>Singleton</string>
<key>Description</key>
<string>Crea una classe singleton</string>
<key>Kind</key>
<string>Xcode.IDEKit.TextSubstitutionFileTemplateKind</string>
<key>MainTemplateFile</key>
<string>___FILEBASENAME___.m</string>
<key>Options</key>
<array>
<dict>
<key>Description</key>
<string>Nome della classe da creare</string>
<key>Identifier</key>
<string>productName</string>
<key>Name</key>
<string>Nome Classe</string>
<key>NotPersisted</key>
<true/>
<key>Required</key>
<true/>
<key>Type</key>
<string>text</string>
</dict>
</array>
<key>Platforms</key>
<array>
<string>com.apple.platform.iphoneos</string>
</array>
<key>SortOrder</key>
<string>1</string>
<key>Summary</key>
<string>Una classe singleton.</string>
</dict>
</plist>
[/sourcecode]

Nella parte <Options> viene definita l’interfaccia utente e le variabili  da richiedere in fase di creazione del nuovo file.

Mentre il file ___FILEBASENAME___.h del header è:

[sourcecode language=”objc”]
/
// ___FILENAME___
// ___PROJECTNAME___
//
// Creato da ___FULLUSERNAME___ il ___DATE___.
// Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved.
//

@interface ___FILEBASENAMEASIDENTIFIER___ : NSObject {
// qui puoi definire le variabili locali
}

+ (___FILEBASENAMEASIDENTIFIER___ *)shared___FILEBASENAMEASIDENTIFIER___;

// qui puoi definire metodi e proprietà

@end
[/sourcecode]

L’implementazione è invece cosi’ definita:

[sourcecode language=”objc”]
//
// ___FILENAME___
// ___PROJECTNAME___
//
// Creato da ___FULLUSERNAME___ il ___DATE___.
// Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved.
//

#import "___FILEBASENAME___.h"

@implementation ___FILEBASENAMEASIDENTIFIER___

static ___FILEBASENAMEASIDENTIFIER___ *sharedInstance = nil;

+ (___FILEBASENAMEASIDENTIFIER___ *)shared___FILEBASENAMEASIDENTIFIER___ {
if (sharedInstance == nil) {
sharedInstance = [[super allocWithZone:NULL] init];
}
return sharedInstance;
}

+ (id)allocWithZone:(NSZone *)zone {
return [[self shared___FILEBASENAMEASIDENTIFIER___] retain];
}

– (id)copyWithZone:(NSZone *)zone {
return self;
}

– (id)retain {
return self;
}

– (NSUInteger)retainCount {
return NSUIntegerMax; //denotes an object that cannot be released
}

– (oneway void)release {
//do nothing
}

– (id)autorelease {
return self;
}

@end
[/sourcecode]

Nei file qui presentati vengono utilizzati una serie di tag.  Eccone una preve descrizione

  • ___FILENAME___ il nome del file con estensioni
  • ___FILEBASENAMEASIDENTIFIER___ Il nome senza estensione in C-style
  • ___PROJECTNAME___ Il nome del progetto
  • ___PROJECTNAMEASIDENTIFIER___ Il nome del progetto in C-Style
  • ___USERNAME___ Username breve
  • ___FULLUSERNAME___ Nome utente completo
  • ___ORGANIZATIONNAME___ Nome dell’organizzazione definita in Xcode
  • ___DATE___ Data odierna
  • ___TIME___ Ora corrente
  • ___YEAR___ Anno in formato AAAA

A breve caricherò anche lo zip.

Foga da aggiornamento ?

Thursday, March 8th, 2012

Come saprete ieri sera è stato presentato il nuovo iPad con retina display e tutta una serie di novità ad esso collegate (IOS 5.1, garageband, ibooks,iPhoto). Finito il keynote è finito, è iniziata la “gara ” per aggiornare il propri(o) dispositiv(o).

Scarica, installa, riavvia, forka etc….

Stamattina mentre camminavo lungo la s.s. padana (causa blocco metropolitana), ho cercato di riassumere e calcolare quanti update avessi fatto durante la serata per tutto il mio parco macchine Apple (iPhone 4g, iPad, iMac tenendo conto solo degli update di software Apple)

Dispositivi mobili (tutti gli aggiornamenti direttamente dal dispositivo)
– IOS 5.1 OTA iPhone 177Mb
– IOS 5.1 OTa iPad   183Mb
– Garageband per IOS  800Mb x2
– iBooks 42Mb x 2

Totale update IOS: 2044Mb

Mac
– update iTunes 81Mb
– iBooksAuthor 184Mb
– xCode 4.3.1 897Mb
– Simulatori IOS5.0 e 4.3 per xcode  e moduli per il debugging vecchi iOS (2243Mb) 
– update garageband 49Mb
– update iPhoto  256Mb

Totale OSX:3710Mb

In pratica per aggiornare tutto ho scaricato piu’ di 5,7Gb di dati dalla rete.

Bisogna precisare che non tutti hanno GarageBand per IOS o sviluppano con xCode, per cui un utente normale scaricherebbe solo 220 Mb per dispositivo e 500/600Mb per Mac. Fatto sta che il traffico dati su internet cresce vertiginosamente dopo un keynote.

Voi quanti Gb di aggiornamenti avete scaricato ieri ?

Unity 3D per iOS e Android gratis

Wednesday, March 7th, 2012

Unity3D è un ottimo strumento di sviluppo e motore per sviluppare applicazioni (leggi giochi) 3D in maniera “abbastanza” semplice, anche senza utilizzare il linguaggio di scripting  (MonoDevelop) si riesce a fare qualcosa di carino.

La versione Mac/PC era già gratuita da tempo, mentre il plugin per rilasciare l’applicazione per IOS era a pagamento.

Fino al 8 aprile la versione base di Unity 3.5 inclusi i pacchetti per sviluppare applicazioni per IOS e Android sono gratuiti, rimane a pagamento il plugin per lo sviluppo in team e anche la versione Pro.

Il download è di circa 980Mb mentre l’installazione richiede 2,76 Gb.


[iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=1430234229″ width=”121px” height=”240px;” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″] [iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=1849690545″ width=”121px” height=”240px;” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″]
 

Learning iOS game programming

Thursday, January 12th, 2012

Il libro è un ottima introduzione allo sviluppo di giochi per iPhone ma la conoscenza della  programmazione in Objective-C per iOS rimane comunque un prerequisito necessario per affrontare la lettura di questo libro.

Il libro si sviluppa iniziando dal game design fino al assemblaggio finale del progetto passando per la gestione del game loop, la gestione degli sprite e delle animazioni, tile mapping, particle emitters, la gestione audio e dell’interazione umana.

Il risultato finale del libro è il gioco completo Sir Lamorak’s Quest scaricabile da appStore.

Riferimenti :

Learning iOS Game Programming: A Hands-On Guide to Building Your First iPhone Game

Per una guida introduttiva allo sviluppo iOS (in inglese)
Wiley Beginning iOS 4 Application Development

[iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B003ZUYIYQ” width=”121px” height=”240px” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″] [iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=0470918020″ width=”121px” height=”240px” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″]

iTelevoto gratis per Settembre

Tuesday, September 13th, 2011

Per festeggiare il mio compleanno, iTelevoto sarà gratuito per tutto il mese di Settembre.

Su applemobile potete leggere una bella recensione

 

Qui potete scaricarlo

AISMo Info è ora Universal

Thursday, May 19th, 2011

E’ stata pubblicata la versione 1.3.1 dell’applicazione dell’Associazione Italiana Sindrome di Moebius; ora è una applicazione universal.

 

Smiles for Moebius disponibile per il download

Wednesday, April 20th, 2011

Smiles for Moebius è appena stata approvata ed è disponibile su AppStore a questo indirizzo.
E’ un gioco gratuito, molto semplice in cui bisogna far sorridere le faccine che cadono dall’alto.