NOMAD : Outil en ligne de commande pour iOS

Aujourd'hui je voudrais vous présenter une suite d'outils en ligne de commande nommé NOMAD qui, selon moi, est une pure merveille pour tous les développeurs iOS. Je m'explique.

Qui n'en a jamais eu marre de devoir générer des IPAs pour une distribution in-House toutes les semaine via l'Organizer de Xcode ?

Personnellement moi, après 6 mois à le faire manuellement, j'ai décidé de mettre en place une usine de build pour iOS dans mon entreprise.

Cependant, quand l'usine est down, comment fait-on ? ... bah on pleure !

J'ai donc chercher un peu sur le net et je suis tombé sur une suite dédiée aux développeurs iOS qui en ont marre des outils graphiques et qui souhaite se faciliter la vie sur des actions longues et rébarbative :

...

Lire la suite de l'article

Xcode 5 : Les modules LLVM

Les modules permettent de simplifier l'écriture d'imports des bibliothèques dans nos applications.

Souvenez-vous, quand vous souhaitiez utiliser un framework dans une classe, vous deviez l'importer :

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>

Ce temps est révolu !

Dorénavant, Xcode 5 simplifie l'écriture (en s'inspirant pas mal du monde Java/.Net) :

@import UIKit;

Et c'est tout !

...

Lire la suite de l'article

Un module NodeJS pour le micrphone

Je fais suite à mon précédent article pour partager avec vous un module NodeJS que je viens de créer.

node-microphone

Son nom est assez évocateur, il s'agit d'un module qui permet de capturer le son provenant d'un microphone.

Ce module s'utilise uniquement sous Linux car il necessite ALSA. Le flux extrait est au format WAV. Je vais essayer de l'améliorer avec le temps pour proposer plus d'options et pourquoi pas un convertissage automatique vers d'autres formats.


Le lien GitHub : https://github.com/vincentsaluzzo/node-microphone

...

Lire la suite de l'article

Capturer le flux audio d’un microphone USB sous Linux

Ca faisait un petit moment que je n'avais pas publié un article, mais qu'à cela ne tienne, en voila un !

Juste une petite astuce pour capturer le flux audio provenant d'un micro USB sous Linux. (celui d'une webcam par exemple)

Il suffit d'utiliser la commande arecord. Pour avoir cette commande, il est necessaire d'avoir les outils ALSA installés :

sudo apt-get install alsa-utils

Une fois installé, vous devriez avoir la commande arecord installée dans votre OS :

arecord --version

(Pour ma part arecord: version 1.0.25 by Jaroslav Kysela <perex@perex.cz>)

...

Lire la suite de l'article

Une macro pour nos chaines de caractères !

Terminons cette semaine avec une autre macro (oui... j'aime les macros !)

Je souhaitais absolument remplacer l'écriture d'une chaine de caractères par quelques chose de plus court. Vous me direz, préfixer notre chaine par @" et suffixer par ", c'est pas bien long...

Oui mais qu'en est il des chaines de caractères à formatage :

[NSString stringWithFormat:@"Ma chaine blabla bla %d", 42];

C'est long... Allez hop, une petite macro pour économiser notre énergie manuelle :

#define fStr(...) [NSString stringWithFormat:__VA_ARGS__]

Voyons le résultat :

...

Lire la suite de l'article

Ecouter un fichier audio en Objective-C

Après avoir expliqué comment téléchager un fichier en Objective-C, je vais vous dévoiler comment lire un fichier audio.

Pour cela, vous aurez besoin d'importer un framework d'Apple dans votre projet: AVFoundation.framework.

Il vous faut ensuite l'URL d'un fichier local ou d'un fichier sur le web, dans notre cas nous allons utiliser une FAKE url : http://myfakeurlformyarticle.com/myfakemp3.mp3

Le framework AVFoundation propose un ensemble de classe permettant l'interaction avec des fichiers audiovisuels. La classe qui va être utilisé ici sera AVAudioPlayer.

Voici comment lire un fichier MP3 avec cette classe :

...

Lire la suite de l'article

Télécharger un fichier dans une application

Chaque application sous iOS est sandboxé. Chacune d'elle voit le système de fichier comme si elle était la seule application de votre iDevice.

Apple autorise le téléchargement de fichier (encore heureux...) depuis une application. Cependant, au vue de l'explication précédente, ce fichier ne sera accessible que depuis l'application qui aura téléchargé ce fichier.

A vous de savoir quoi faire de votre fichier dans votre application. Bref, voyons comment faire...

Il existe plusieurs façon de faire cela. Asynchrone, synchrone, avec un framework, etc. La solution la plus simple, à mes yeux, et de faire un téléchargement synchrone...

"Aarrghhh, tu es fou ! Tu vas bloquer l'UI et ton UX ne sera pas bonne !"

...

Lire la suite de l'article

Exécuter un block Objective-C en tâche de fond

La classe NSObject fournit un ensemble de méthode permettant d'effectuer un appel de méthode (via les selector) en tâche de fond, dans le thread courant, dans le thread principal, etc.

Cependant, la classe NSObject ne possède aucune méthode pour executer du code contenu dans un block Objective-C, ni en tâche de fond, ni dans le thread principal.

Peu importe, avec les catégories Objective-C, nous allons corriger ce problème.

Commençons pas créer une catégorie sur la classe NSObject (nommez là comme vous le souhaitez !), puis ajoutez deux prototypes de méthode :

-(void) performBlockOnMainThread:(void(^)(void))block;
-(void) performBlockOnBackground:(void(^)(void))block;

(Oui... la syntaxe de déclaration d'un block est vraiment horrible !)

...

Lire la suite de l'article

Des macros pour simplifier les propriétés

Les propriétés en Objective-C sont très simple d'utilisation, mais comme partout en Objective-C, elles sont très (trop) verbeuses :
@property (nonatomic, strong) NSString* myString;
@property (nonatomic, strong) IBOutlet UILabel* myLabel;
Je me suis dit un jour
Pourquoi ne pas réduire mon code en factorisant les déclarations de propriété les plus courantes avec des macros...
Et devinez quoi ? ... Je l'ai fait ! Comme je suis gentil, je les partages :
#define IBOutletProperty @property (strong, nonatomic) IBOutlet
#define StrongProperty @property (strong, nonatomic)
#define AssignProperty @property (assign, nonatomic)
#define WeakProperty @property (nonatomic, weak)
#define DelegateProperty @property (nonatomic, weak) id delegate
Notez la ré-écriture des propriétés du début avec les macros :
StrongProperty NSString* myString;
IBOutletProperty UILabel* myLabel;
On a gagné, quoi... une vingtaine de caractères, mais n'oublions pas...
Developer are Lazy !
(c'est ma phrase du jour !)

Lire la suite de l'article

NUI – ou le CSS adapté à iOS

Avez-vous déjà imaginé styliser l'ensemble de vos vue d'une manière unique et de façon hiérarchisé ?

Vous me direz, cela ressemble vaguement au principe du CSS... Bah sachez qu'il existe des projets qui permettent d'avoir une fonctionnalité similaire au sein d'une application iOS.

A ma connaissance, il en existe deux:

Je ne m'attarderai pas sur le premier car ce n'est pas une solution Open Source. Bien que je ne sois pas specialement partisant du tout Open Source (sinon je serai pro-Android !), j'admets tout de même qu'en terme de composant, sur iOS, on a ce qu'il faut en Open Source...

Nui n'est certainement pas aussi évolué, ni aussi complet que Pixate, car il permet uniquement l'utilisation d'Objective-C et manque clairement de certaines fonctionnalités. Cependant, contrairement à Pixate, il est Open Source et par conséquent, son évolution peut être fulgurante très vite !

...

Lire la suite de l'article