Attivare e disattivare l’indicatore dell’attività di rete

Chiamatelo indicatore dell’attività di rete, spinning cursor, activity indicator, indicatore di stato o cosicchio, fatto sta che è importante (e richiesto da Apple) che, quando si fa uso della rete, si visualizzi quello sulla barra di stato (la sottile striscia in alto sui dispositivi iOS, dove c’è l’orologio è l’indicatore della carica della batteria). E, appena cessa l’attività di rete, lo si dovrà far sparire.

Per ottenere questo risultato bisogna prelevare il singleton dell’applicazione e settarne la proprietà booleana networkActivityIndicatorVisible a YES o NO. Ecco il codice:

1
2
3
4
5
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
 
//inserire qui codice che fa uso di risorse in rete
 
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

//inserire qui codice che fa uso di risorse in rete

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

Installare il certificato per le Push Notification [AGGIORNATO]

Solo una annotazione riguardante l’utile articolo di devAPP sulle Notifiche Push. Quando si parla di installare il certificato ci si riferisce, una volta terminata la procedura via Terminale, al semplice caricamento sul un server del file apns-dev.pem (o come avete deciso di chiamarlo). Potete scegliere la cartella che volete, è sufficiente che, usando lo script php descritto nell’articolo stesso, il certificato sia nella stessa posizione dello script. Unico dettaglio da tenere in considerazione è che il server deve supportare il protocollo di crittografia SSL (quindi, ad esempio, Aruba non è compatibile ma Blooweb sì).

Lo script php funziona benissimo, ovviamente va creato un ciclo che vada a pescare i vari token da un archivio (un db, ad esempio) ed esegua lo script una volta per ogni token.

[AGGIORNAMENTO]

Due tutorial (in inglese) illustrano molto in profondità ciò che viene accennato nell’articolo di devAPP. In particolare:

  1. Boxed Ice Blog spiega il significato di tutti i comandi da Terminale e per PHP
  2. mobiForge illustra tutto il procedimento tramite screenshot e spiega come cambiare il suono di avviso quando arriva una notifica push.

Failed to register with error: Error Domain=NSCocoaErrorDomain Code=3000

Stavo cercando di ricavare il token di un iPhone, per fare delle prove con le Notifiche Push, quando la Console mi ha restituito il seguente errore:

Error Domain=NSCocoaErrorDomain Code=3000 “nessuna stringa di autorizzazione ‘aps-environment’ valida trovata per l’applicazione (eccetera…)

Ho scoperto qui che questo errore si risolve creando un nuovo profilo di provisiong, dal momento che, per abilitare le Notifiche Push, ho dovuto modificare la configurazione dell’AppID relativa all’applicazione che sto sviluppando.

Ricreando quindi un nuovo Provisioning Profile e, per maggiore sicurezza, disinstallando l’app dall’iPhone di sviluppo e facendo Xcode>Product>Clean, l’errore è svanito e al suo posto è comparso un bel token pronto per l’uso.

Per completezza, il codice da inserire nel metodo application:didFinishLaunchingWithOptions: dell’AppDelegate, al fine di registrare l’app per le Push Notification, è

1
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge];
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge];

Mentre i due metodi da inserire sempre nell’AppDelegate per usare (o visualizzare) il token e per gestire eventuali errori sono:

1
2
3
4
5
6
7
8
9
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    NSLog(@"APN device token: %@", deviceToken);
 
}
 
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
 
    NSLog(@"Error in registration. Error: %@", error);
}
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    NSLog(@"APN device token: %@", deviceToken);

}

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{

    NSLog(@"Error in registration. Error: %@", error);
}

Hello, World!

Da poco ho aperto una partita IVA per iniziare la mia attività di sviluppatore di app per iPhone e iPad. Questo blog vuole essere un punto di raccolta di tutte le informazioni utili e interessanti che trovo mentre lavoro alle mie app. Un luogo in cui altri sviluppatori come me possano trovare spunti stimolanti e soluzioni ai problemi che incontreranno. E magari iniziare a collaborare con me a nuovi progetti.

Ma il blog di un programmatore non può non iniziare con un tributo al famoso ”hello, world” di Brian Kernighan e Dennis Ritchie, esempio iniziale del libro “Il Linguaggio C”. Il linguaggio principe per sviluppare per iOS è l’Objective-C, ovvero un elegante cappello Smalltalk per la programmazione ad oggetti messo sulla testa del linguaggio C. Quindi il mio “hello, world” è come quello originario:

1
2
3
main() {
    printf("hello, world\n");
}
main() {
    printf("hello, world\n");
}

Se invece immaginiamo una ipotetica app per iPhone in cui una UILabel, al centro della UIView principale, esponga un testo, allora potremmo scrivere:

1
theLabel.text = @"Hello, World!";
theLabel.text = @"Hello, World!";