Développement iPhone, webdesign et SEO à Montréal

Il n'y a pas de problèmes, que des solutions.

Alquerque – El Quirkat pour iPhone et iPad

without comments

Disponible gratuitement sur l’AppStore ! >>

Connaissez-vous l’ancêtre du Jeu de Dames : El Quirkat ?

Son histoire peut être retracée jusqu’au Xème siècle. Originaire du Moyen Orient ce jeu est arrivé en Europe lors des Invasions Barbares. Le nom se transforme en Alquerque durant l’occupation de l’Espagne par les Arabes. Il va ensuite traverser l’Atlantique avec les conquistadors et continuer d’évoluer à partir du Nouveau-Mexique. (Plus d’infos sur Alquerque sur Wikipedia !)

C’est un vieux projet que j’ai repris a zero récemment. Ma première version comprenait seulement la planche de jeu, les pions et les règles. Il n’y avait pas d’intelligence artificielle, donc pas moyen de jouer contre le iPhone.

Bien que cela soit clairement affiché dans la description du jeu sur l’AppStore, les commentaires négatifs des utilisateurs prouvent que ces descriptions ne sont souvent lues qu’après l’achat ou pendant le téléchargement du jeu !

Refonte totale

Donc reprise à zéro du projet avec les idées suivantes en tête :
- Une I.A.
- format iPhone / iPad
- Un nouveau modèle de monétisation
- Utilisation du Game Center  pour du multi-joueurs en ligne

Intelligence Artificielle… assez forte, merci !

Après quelques recherches sur le net j’ai trouvé un algorithme d’I.A. pour ce jeu, que j’ai adapté pour iOS et l’utilisation future du jeu en ligne. L’adaptation vers Obj-C a été assez simple finalement, mais demanderait encore un peu de travail pour fignoler les effets de déplacement des pièces.

Question argent

La première version d’Alquerque était en vente à 1$ sur l’AppStore. Bilan : 74 exemplaires vendus : 50$. C’est pas lourd !!!

On change donc d’approche pour cette nouvelle version. Pour offrir du multi-joueurs en ligne… il faut des joueurs, l’app de base est donc gratuite.


Mais elle comporte un bandeau de pub et des options payantes :
- une option pour enlever justement ce bandeau ce pub qui devrait assez vite devenir agaçant
- et l’option pour jouer en ligne, via le Game Center, qui sera introduite lorsque le nombre de joueurs sera suffisant.

Premiers résultats de l’opération : L’app approuvée hier a déjà été téléchargée 60 fois dans la nuit depuis qu’elle est gratuite, c’est un début! Et une personne a même déjà acheté l’option pour supprimer la pub, cool.

Pour l’instant la pub n’est distribuée que par iAd, mais le taux d’impression est assez ridicule, voir quasi-inexistant. Donc la prochain mise à jour intégrera aussi AdWhirl, pour diffuser des annonces provenant d’autres régies lorsque iAd ne servira rien (ce qui est plutôt la norme…)

Le but est donc bien de se servir de la pub comme élément perturbateur que les utilisateurs pourront supprimer en payant, plutôt que d’espérer gagner le moindre $ avec les impressions…

Multi-joueurs en ligne = Game Center Turn Based  API

Enfin, ce projet me permet de découvrir et mettre en application les outils multi-joueurs qu’iOS proposent aux développeurs. Et il y a de quoi se réjouir ! Grâce à cet excellent tutoriel sur le Game Center l’intégration a été assez simple et rapide. Il faut dire que le jeu s’y prête bien : les deux joueurs jouent à tout de role et les conditions de victoire sont très claires. De ce coté là, même si Alquerque ne rapporte que très peu d’argent, le gain en savoir-faire est très appréciable. En fait j’ai même déjà commencer à décliner ces nouvelles compétences sur un autre jeu d’un tout autre style !

Pourquoi pas de multi-joueurs en ligne dès le lancement ?

Je préfère attendre que l’app se diffuse suffisamment avant d’offrir cette option payante. Je pense qu’un utilisateur achetant cette option et ne trouvant pas assez rapidement de partenaires pour jouer en ligne, sera forcément déçu : on aime pas ça !

Et cela me permettra aussi de refaire une nouvelle petite promo à la mise en ligne de la nouvelle option.

Disponible gratuitement sur l’AppStore ! >>

 

 

Written by yannbouschet

décembre 10th, 2011 at 11:50

Ma première navette spatiale / My First Orbiter

without comments

Une nouvelle app qui va faire du bruit!

Destiné aux enfants, ce jeu transforme le iPad en cockpit de navette spatiale. Les boutons du tableau de bord clignotent et déclenchent une multitude de sons bizarres.

C’est une véritable invitation à de passionnants voyages imaginaires, au plus profond de l’espace.

Il n’y a pas de but à atteindre, de mission à remplir ou de scénario à suivre : juste un simple écran interactif pour stimuler et accompagner l’imagination de vos astronautes en herbe.

Ma première navette spatiale, pour iPad
est disponible sur l’AppStore pour .99 cents >>

 

 

Written by yannbouschet

novembre 1st, 2011 at 2:31

Stockage de données pour Unity3D : Array, ArrayLists, Hashtables…

without comments

En cherchant de quoi recréer un NSDictionary pour Unity3D, je suis tombé sur cet excellent article qui décrit les différentes solutions de stockage de données pour Unity, en JS et C#.

http://robotduck.wordpress.com/2009/11/04/88/

Article tréééés instructif.
Je pense que le reste du blog contient aussi bien d’autres trésors.

 

Written by yannbouschet

septembre 3rd, 2011 at 10:22

Cadre noir qui tourne (Unity3D – iPhone)

without comments

Un quicky tant que je suis dessus.

Vous avez peut être déjà remarqué que certaines app ont un drôle de cadre noir qui apparait parfois quand on change d’orientation. Le cadre effectue une rotation mais pas l’écran principal… bizarre… bizarre.

En fait il s’agit du clavier virtuel de l’iPhone qui se met automatiquement à la bonne orientation, même quand il est caché !

Pour corriger ça sur les jeux développés avec Unity3D voici ce qu’il faut insérer dans votre script  principal (javascript) au lancement de l’app :

function Start () {
iPhoneKeyboard.autorotateToPortrait = false;
iPhoneKeyboard.autorotateToPortraitUpsideDown = false;
iPhoneKeyboard.autorotateToLandscapeRight = false;
iPhoneKeyboard.autorotateToLandscapeLeft = false;
}

Plus de rotation de clavier, plus de cadre noir.

Written by yannbouschet

juin 4th, 2011 at 7:25

UINavigationController : viewWillAppear n’est pas appelé…

without comments

Grosse surprise ce soir : viewWillAppear n’est pas appelé lorsque qu’on met en place un UINavigationController dans son code, sans utiliser Interface Builder… Ben là, c’est n’importe quoi !
Heureusement il y a un remède pas trop compliqué, il suffit de pointer l’utilisation de UINavigationControllerDelegate sur le UIViewController à la base de la navigation.

Donc dans .h on a par exemple :

@interface RootViewController : UIViewController  {

UINavigationController *navigationController;

}

@property (nonatomic, retain) UINavigationController *navigationController;

Et dans  .m, on pointe le delegate sur soi-même et on rajoute les 2 fonctions de UINavigationControllerDelegate.

Ne pas oublier aussi d’ajouter la « view » de navigationController à la hiérarchie sinon… ben le système de nav ne sera jamais visible.

- (void)viewDidLoad {

navigationController = [[UINavigationController alloc] init];

[navigationController setDelegate:self];

SplashViewController *tempoVC = [[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil];

[navigationController pushViewController:tempoVC animated:NO];

[tempoVC release];

[self.view addSubview:navigationController.view];[super viewDidLoad];

}

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {

[viewController viewDidAppear:animated];

}

}

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

if ([viewController respondsToSelector:@selector(viewWillAppear:)]) {

[viewController viewWillAppear:animated];

}

}

Written by yannbouschet

mars 5th, 2011 at 11:38

SOAP sur iPhone : terrain glissant !

without comments

Sur un projet récent,  j’ai du me frotter à l’utilisation de SOAP pour communiquer avec une API, aussi efficace que mal documentée…

Tout d’abord, un grand merci aux créateurs de http://www.webutils.pl/

Ce site propose une panoplie d’outils en ligne de cryptage/décryptage/checksum, etc. Bref, tout ce qu’il faut pour s’y retrouver quand, par exemple, il faut transmettre dans un fichier XML une image codée en Base64 et signée par un CRC-32.

J’ai utilisé ces outils pour comparer mes envois avec un dump d’un envoi correct fourni par le service, jusqu’à ce que pour la même image (extraite du dump !) les codages et signatures soient les mêmes. Une adresse à retenir donc.

SOAP 1.1 sur iPhone/iPad/iOS

Ca commence par une recherche sur le web (et c’est peut être ce qui vous amène ici, hein ?!)
Peu de ressources disponibles, des exemples souvent incomplets, alors voici ma petite contribution en français !

J’utilise ASIHTTPRequest pour tous mes envois, c’est complet, pratique, synchrone ou non = un gain de temps considérable !
Suffit juste de prendre le temps DE LIRE LA DOC !

La première chose à faire, si on veut une communication asynchrone sera de rendre l’objet capable de gérer les delegate de ASIHTTP. Attention, j’utilise ASIHTTPRequest et non pas ASIFormDataRequest, qui a aussi ses delegate.

@interface votre_object : NSObject <ASIHTTPRequestDelegate> {

Ensuite, ben on y va pour une requête SOAP simple, par exemple pour lancer une session, pas de paramètres à envoyer, juste une action. Notez que dans l’exemple suivant il vous faudrait remplacer le texte SOAP_ACTION par votre propre action. Notez aussi que cette balise est une ‘singlette’, elle n’a pas de balise fermante et doit avoir un / avant le > . Avec les \ »,  / et autre \n  ça peut vite devenir un poil confus et celui-là on le rate assez facilement. Je pense que les \n sont en option, mais très utiles quand on veut lire les logs plus facilement.

-(void)startSession {
NSString *soapMessage = @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
"<soap:Body>\n"
"<SOAP_ACTION xmlns=\"http://votreadresse.com/\" />\n"
"</soap:Body>\n"
"</soap:Envelope>";
NSString *soapMessageLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
NSLog(@"%@",soapMessage);
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:serverURL]];
[request addRequestHeader:@"Content-Type" value:@"text/xml; charset=utf-8" ];
[request addRequestHeader:@"Content-Length" value:soapMessageLength];
[request addRequestHeader:@"SOAPAction" value:@"http://votreadresse.com/SOAP_ACTION"];
[request setPostBody:(NSMutableData*)[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
[request setDidFinishSelector:@selector(startSessionDone:)];
[request setDelegate:self];
[request startAsynchronous];
}

Ce a quoi répondra la fonction startSessionDone au retour du serveur :

-(void)startSessionDone:(ASIHTTPRequest *)request {
NSLog(@"startSessionDone");
NSString *StartSessionResult = [request responseString];
//Et vous faites ce que vous voulez de la réponse ensuite...
}

Si maintenant on veut envoyer plus de paramètres, mettons une clé de session, ça va alors prendre cette forme ci-dessous. Notez comme SOAP_ACTION change, c’est maintenant une balise qui s’ouvre et se referme après les paramètres à envoyer.

-(void)queryWithParams {

NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
"<soap:Body>\n"
"<SOAP_ACTION xmlns=\"http://votreadresse.com/\">\n"
"<sessionKey>%@</sessionKey>\n"
"</SOAP_ACTION>\n"
"</soap:Body>\n"
"</soap:Envelope>\n", sessionKey];
NSString *soapMessageLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
NSLog(@"%@",soapMessage);
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:serverURL]];
[request addRequestHeader:@"Content-Type" value:@"text/xml; charset=utf-8" ];
[request addRequestHeader:@"Content-Length" value:soapMessageLength];
[request addRequestHeader:@"SOAPAction" value:@"http://votreadresse.com/SOAP_ACTION"];
[request setPostBody:(NSMutableData*)[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
[request setDidFinishSelector:@selector(queryWithParamsDone:)];
[request setDelegate:self];
[request startAsynchronous];
}

Et la fonction de retour :

-(void) queryWithParamsDone:(ASIHTTPRequest *)request {
NSLog(@ »queryWithParamsDone« );
NSString * queryWithParamsResult = [request responseString];
//Et vous faites ce que vous voulez de la réponse ensuite...
}
Voilà, en espérant que cela pourra en aider quelques-uns. Pour ma part j’y ai passé quand même quelques heures avant d’arriver à mes fins et c’est en croisant un article en espagnol sur la 10 ou 12 ème page de résultats  de Google que j’ai trouvé une trace de code qui a débloqué la situation, la morale : des fois il faut s’obstiner dans ses recherches !

Written by yannbouschet

février 28th, 2011 at 9:55

Lancement du nouveau site AVOCADO

without comments

Avocado traiteur Montréal, le site webVoilà un beau projet rondement mené !

AVOCADO, le traiteur montréalais connu pour ses productions d’évènements spectaculaires et ses mariages somptueux , a dignement fêté ses 10 ans en s’offrant une nouvelle image de marque…

Et un nouveau site web que j’ai eu le privilège de réaliser :-)

A la demande de Rachelle Houde, directrice des communications chez AVOCADO et sous la direction artistique de Catherine Gravel, épaulée de Catherine Girondeau-Gouin comme graphiste.Ce site/magazine rend grâce en textes et en images à l’expertise d’AVOCADO qui est à présent bien plus qu’un traiteur : une équipe de créateurs !

Je dois avouer que c’est le genre de projet dont je ne me lasse pas : de l’implication de la part du client, une énergie et un souci de l’autre aussi incroyable que permanent dans l’équipe… Bref c’est même plus un travail de monter un site dans ces conditions, c’est juste du bonheur.

Longue vie…
et rendez-vous au prochain Pop-up !

Written by yannbouschet

février 17th, 2011 at 1:17

Posted in Développement web

Nouvelle année, nouveau défi !

without comments

Tactio Soft, health mobile apps for iPhone an iPadA partir du 7 février j’intègre l’équipe de développement iPhone/iPad de l’entreprise montréalaise Tactio. Mon mandat sera principalement de continuer à faire évoluer leurs produits : app Jean Coutu, Target Weight, RxVigilance, Aim High!

Written by yannbouschet

janvier 29th, 2011 at 8:57

MouseMasher et l’effet « iPad de Noël »

without comments

L’iPad a été le grand cadeau de Noël de cette année, une preuve de cette explosion : les ventes de mon jeu iPad pour chat : MouseMasher !

Ventes MouseMasher iPad, Noël 2010

En général, depuis sa sortie, il en part 2 à 3 exemplaires par semaines, à 0.99$ ou 0.79€. Mais sur la période de Noël qui vient de passer, c’est environ 50 unités qui se sont vendues en quelques jours. Soit presque 1/5 de toutes les ventes de l’année pour cette app.

MouseMasher jeu iPad pour chats

MouseMasher est une app ultrabasique, développée en quelques heures grâce à GameSalad et qui ne présente vraiment aucun intérêt pour un joueur-humain. L’écran unique présente un bout de parquet sur lequel se déplacent au hasard des rongeurs couinants !

Le chat-joueur marque des points à chaque rongeur touché : très-très basique.

Reste à avoir un chat joueur et curieux, ce qui ne semble pas être le cas de tous… :-/

Written by yannbouschet

décembre 30th, 2010 at 11:22

AppStore Nord-Amérique Vs France, petite différence drôle

without comments

Bullshit Bingo AppStore France

Il y a quelques jours une personne m’a fait connaître le concept du Bullshit Bingo. Petit jeu fort sympathique qui trouverait certainement sa place sur iPhone !

Donc revenu à la maison, une petite vérification sur l’AppStore s’impose. Histoire de voir s’il existe déjà une version (c’est de plus en plus rare  d’avoir une idée vraiment neuve  sur iPhone…)

Je fais une recherche sur mon « vieux » G5 Quad, dont le iTunes est lié à un profil français donc sur l’AppStore français. Tristesse, le BullShit Bingo existe déjà et en plus il est gratuit… Bon tant pis pour l’idée originale, je vais télécharger le jeu pour voir comment il est fait.

Bullshit bingo AppStore Canada

Là, je dois changer d’ordi et passer sur mon MacBook Pro qui gère mon iPhone et qui est pour sa part lié à l’AppStore canadien.

Re-petite recherche et … suprise !!!
Je vous laisse constater sur la seconde capture d’écran.

Et oui, un coup de censure est passé sur l’AppStore, sans doute pour protéger les yeux chastes des petits enfants nord-américains.

Enfin, ça m’a fait bien rire sur le coup j’avoue.

Du reste, l’app gratuite est vraiment nulle et mérite d’être refaite correctement… à suivre donc.

Written by yannbouschet

décembre 5th, 2010 at 9:05

evista without prescriptionniaspan discount cardevista dosing generic viagra, buy ed pills online or compare cialis vs viagra.

baskets new balance pas cher

chaussures new balance pas cher

chaussures new balance femme

chaussures new balance homme

chaussures new balance belgique

chaussures new balance trail

chaussures new balance enfant

chaussures new balance pour marathon

new balance 574 pas cher

new balance 410 pas cher