samedi 20 novembre 2010

Ajouter les fichiers Retina Display au svn (fichiers @2x)

Si vous développez une application iPhone compatible avec l'affichage haute résolution Rétina Display (pour iPhone4) vous avez surement des fichiers de ressource nommés en @2x.png
Si vous utilisez svn pour le suivi de votre projet vous aurez surement un problème en essayant d'ajouter ces fichiers au svn :
r0ro-mac: svn add Icon@2x.png
svn: warning: 'Icon' not found
Le problème vient du fait que le caractère @ a une signification particulière pour svn (cf: Utilisation de piquets de révisions svn)
Pour contourner le problème il faut ajouter un @ après le nom du fichier :
r0ro-mac: svn add Icon@2x.png@
A  (bin)  Icon@2x.png
Si vous voulez ajouter tous les fichiers @2x du répertoire courant vous pouvez le faire avec la commande :
ls *2x* | xargs -n1 -J {} echo {} @ | sed "s/ //" | xargs svn add

dimanche 24 octobre 2010

Créer un certificat .PEM à partir d'un certificat Apple .CER

Dans un post précédant, je donne la marche à suivre pour récupérer un certificat de notifications pour application iPhone. Une fois ce certificat .cer récupéré il n'est pas exploitable directement par la plupart des logiciels. Par exemple en php, il faut créer un fichier .pem pour pouvoir se connecter avec le certificat sur le serveur de notifications apple.

La première étape consiste à exporter le certificat apple .cer depuis l'application "Trousseau d'accès".
Dans l'application sélectionnez l'onglet "Certificats", puis sélectionnez les deux lignes qui correspondent au certificat de notification que vous venez de créer :

Export de certificat .cer Apple
Vous obtenez alors un fichier .p12
Pour convertir ce fichier .p12 en .pem il vous faudra lancer les commandes suivantes dans Terminal :

openssl pkcs12 -clcerts -nokeys -out cert.pem -in certificat.p12
openssl pkcs12 -nocerts -out key_crypt.pem -in certificat.p12
openssl rsa -in key_crypt.pem -out key.pem
cat cert.pem key.pem > final.pem
Vous aurez alors un fichier .pem utilisable par exemple dans php de la façon suivante :
<?php
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', self::$notificationCertificate);
$connect = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
if (!$connect) die("Impossible de se connecter : $errorString");
fwrite($connect, $contenu_notification);
fclose(self::$notifConnect);
?>

Comment créer un certificat pour envoyer des notifications iPhone / iPad

Pour pouvoir envoyer des notifications à une application iPhone / iPad, il est nécessaire de générer un certificat qui va permettre de se connecter de manière sécurisée sur le serveur de notifications d'Apple (cf documentation officielle).

La première étape est de créer sur le mac une demande de certificat à une autorité de certification. Pour cela il faut lancer l'application "Trousseau d'Accès" sur votre mac. Ensuite dans le menu il faut choisir "Assistant de certification" et "Demander un certificat à une autorité de certificat" :

Demande de certificat Apple
 Ensuite il faut suivre la procédure en indiquant l'email du compte apple, ainsi qu'un nom pour le certificat, et choisir "Enregistrer sur le disque"

Créer une demande de certificat Apple

Ensuite il faut vous connecter sur iOS Provisionning Portal pour activer la notification pour votre application. Dans la liste des applications, choisissez votre application et cliquez sur configurer :

Liste applications iOS Provisionning Portal

Choisissez alors "Configure" :
Configuration de la notification d'une application iPhone

On va alors vous demander de fournir la demande de certificat que vous venez de créer :
Note: si vous avez un problème avec l'upload de votre fichier .signingRequest essayez avec Safari (mon fichier se faisait jeter avec Chrome, et ça passait sans problème avec Safari).

Sélection d'une demande de création de certificat Apple
Vous obtenez alors un fichier .cer qui est votre certification de connexion au serveur de notification Apple.




Problèmes courants :

Au niveau de l'application si vous obtenez l'erreur :
"aucune autorisation « aps-environment » valide détectée pour l’application"

lors que vous essayer de récupérer un token de notification, essayez de télécharger un nouveau fichier de "provisionning  profile" et désinstaller l'ancien de l'iPhone.