Alpeslog

Développeur iOS Grenoble

WordPress REST API for iOS

Je reprends à zéro mon exemple d’application iOS écrite en Swift et accédant à l’API REST WordPress.

l’API REST est maintenant intégrée à WordPress 4.7 et donc facilement accessible (cf doc. ici) . Elle est très différente de l’API version 1

Swift (version 3) à beaucoup évolué depuis la version 1.0 !

C’est un projet en cours de développement…

Il se présente sous la forme d’un framework et d’une application simple destinée à démontrer son utilisation.

Accessible sur GitHub:

https://github.com/pierrem/WP

 

 

NessContact

Depuis quelques mois je développe la version iOS de NessContact, le logiciel client de la plateforme Puzzle-System. Ce logiciel en liaison avec la plateforme CRM, est destiné à être utilisé sur des événements (exposition, présentation de produit, test de matériel). Il permet en particulier l’émargement des contacts (pré enregistrés ou non), la saisie de formulaires, la présentation de documents et leur transmission aux personnes intéressées, la présentation et la gestion de prêts de matériel pour tests, la prise de vue etc. Les fonctions de scan de badge visiteurs et de scan de code produit permettent des enregistrements rapides.

Toutes les informations sont synchronisées en permanence avec le serveur et entre les différents terminaux (iPhone, iPad), mais le logiciel peut continuer à fonctionner de manière déconnectée et re-synchroniser les données dès que le réseau est à nouveau disponible.

NessContact sur l’appStore

 

Compilation crrcsim sous OSX El Capitan

Entre deux projets iOS, je me suis décidé à tenter la compilation du simulateur de planeur radio commandé crrcsim.
C’est un excellent simulateur, qui permet d’installer des sites de vol à la fois beaux et réalistes, comme par exemple celui de Parquetout (Alpe de Valbonnais sur le site http://joel.lienard.free.fr/crrcsim/index.html)

J’ai pioché dans https://gist.github.com/johannesjh

et aussi:

http://www.rcsail.com/forum/viewtopic.php?p=23574&sid=d70747261a6e10cc0342c47efa05c743

Pré requis: XCode 7.2.1 est installé

1) Installer Command line tools : https://developer.apple.com/downloads
Command_Line_Tools_OS_X_10.11_for_Xcode_7.2.dmg

2) Install Macports : https://www.macports.org/install.php

The MacPorts installer copies MacPorts to the target directory /opt/local.
Il configure aussi le shell pour les chemins d’accès aux commandes installées

3) Terminal

sudo port -v selfupdate

Installation des librairies:

 sudo port install plib
 sudo port install jpeg
 sudo port install libsdl
 sudo port install cgal

Il faut aussi installer GCC !

 sudo port install gcc47

Je n’ai pas installé portaudio, je connecte ma radio (FrSky) directement en USB, mais on peut le faire:

sudo port install portaudio

 

4) récupérer les source crrcsim-0.9.12.tar.gz sur:
https://sourceforge.net/projects/crrcsim/files/crrcsim/

On peut aussi récupérer la version en cours de développement qui se compile dans les même conditions.

5) modifier les fichiers:

chardevicebase.cpp ligne 102 : commenter la section contenant htonll et ntohll qui sont déjà définis quelque part (?)

chardevicebase.h ligne 51, remplacer:

#include <string.h>

par:

#include <string>

ligne 117 : commenter la déclaration de htonll et ntohll

// uint64_t htonll( uint64_t a );
// uint64_t ntohll( uint64_t a );

6) se placer dans le directory des sources:

 cd crrcsim-0.9.12 (directory avec les sources)

7) configure:

 ./configure CPPFLAGS="-I/opt/local/include -DAPIENTRY=" LDFLAGS="-L/opt/local/lib -lintl -lgmp -framework OpenGL -headerpad_max_install_names"

8) make:

 make

Par contre le make install ne fonctionne pas tel quel. Pour ma part j’ai recopié les fichiers crrcsim et les directories models, objects, scenery, sounds et textures dans un nouveau directory.

9) lancer l’application depuis le terminal

./crrcsim

Ça devrait marcher !

En cas de problème un « make clean » m’avait débloqué.
J’utilise une radio FrSky connectée en USB (allumer la radio avant de brancher)

Des superbes sites de vol dans les Alpes:

http://joel.lienard.free.fr/crrcsim/index.html

Des modèles de F3F:

http://www.f3f-france.com/index.php?option=com_docman&Itemid=52

Problème pas résolu pour l’instant:
le débattements à la profondeur est trop faible, même après calibration. Au moins 2 fois moindre que sur la version Windows. Pour l’instant j’ai modifié les fichiers xml des modeles que j’utilise (par exemple de Generic_F3F.xml):
CL_min= »-0.5″ (à la place de 0.15)

Prochaine étape :

générer un bundle autonome (sans dépendance à des lib externes)

WordPress + appli iOS native en Swift, mise à jour…

Mai 2017 : Ce projet est maintenant daté. Swift est entre temps passé des version 1.0, 1.2, 2 à la version 3 actuelle. La stabilité ABI (compatibilité des binaires) a été reportée à la version 4, par contre il devrait maintenant y avoir compatibilité au niveau sources.

J’envisage de le reprendre au propre à partir de zéro un de ces jours…

Le 16 mai 2016: petite mise à jour du code pour corriger un bug signalé sur iPhone !

Le source de la nouvelle version de mon application utilisant l’API WordPress est accessible sur GitHub:

https://github.com/pierrem/WordPress-API-Demo

Elle peut servir de tutoriel pour une approche du développement iOS en Swift:

  • une application universelle iPhone, iPad (un storyboard avec un split view controller facilite bien les choses !)
  • une communication http / json asynchrone avec un serveur.

Depuis la version de début 2015, j’ai migré vers Swift 2,  supprimé le superflu, amélioré quelques détails et corrigé quelques bugs. On peut finalement faire quelque chose de sympa avec peu de lignes de code…

WP-API

L’article original

 

Pioupiou

Entre deux interventions pour des clients, je développe une application pour les anémomètres connectés Pioupiou développés par la société  Bac Plus Zéro.

Les données sont publiques, et l’API est décrite ici : http://developers.pioupiou.fr

Encore quelques heures de travail avant de publier sur l’AppStore…
Le code de tracé (Core Graphics) est dérivé de la version JavaScript. Les 2 moteurs graphiques sont très proches.

 

pioupiou301

 

Les AOC et AOP

Dans le prolongement de mon petit projet de test MapKit et Swift, je continue en pointillé sur un projet un peu plus ambitieux (en tous cas au niveau volume de données). Le but était pour moi d’aller jusqu’à la publication d’une petite application en Swift pour me familiariser avec ce langage et valider la chaine complète. Mon intention était de publier le source comme tutoriel, mais le volume de la base de donnée utilisée pose problème !

À partir des données (open data) publiées d’une part par l’IGN et d’autre part par l’institut national de l’origine et de la qualité (INAO), j’ai créé une application permettant de visualiser les aires géographique des AOC/AOP.

Ce coup-ci j’utilise une base de donnée SQLite plutôt que du GeoJSON, principalement pour des raison de vitesse de chargement. Je n’ai pas encore de solution pour charger les contours de 36.000 communes à partir d’un fichier JSON en Swift dans un temps raisonnable. Le tracé des tuiles de la carte se faisant avec une thread par tuile (Map Kit), il est délicat d’accéder à la base de donnée au moment du tracé (concurrence). Les données sont donc chargées en mémoire lors du démarrage.

Une autre difficultés a été de comprendre le format WKB (Well Known Binary) tellement bien connu que la documentation est difficile à trouver !

Les données open data:

IGN: http://professionnels.ign.fr/geofla

INAO: https://www.data.gouv.fr/fr/datasets/aires-geographiques-des-aoc-aop/

 

L’application est disponible sur l’App Store.

 

AOC

MapKit, Swift et données IGN

Un projet destiné à voir comment utiliser des données publiques (IGN) sur une carte, avec le MapKit et Swift. Un des but étant de se familiariser avec Swift sur un exemple simple, mais pas complètement trivial.

Les données utilisées proviennent d’un fichiers fourni par l’IGN en « licence ouverte »:
http://professionnels.ign.fr/geofla

Les données de la base « geofla » sont au format Shapefile (avec en particulier une base de donnée dBase). Plutôt que d’essayer de l’utiliser directement, on va dans un premier temps convertir les données vers un format plus accessible sur iOS.

Pour cela j’ai utilisé ogr2ogr un outil du package gdal:

http://gdal.gloobe.org/ogr/ogr2ogr.html

Installation avec brew (http://brew.sh/) :
brew install gdal

Générer un json des départements:

L’option crs:84 permet d’obtenir des coordonnées type GPS (longitude, latitude):

ogr2ogr -f GeoJSON -t_srs crs:84 departements.geojson DEPARTEMENT.shp

Le fichier fait 8.4 MBytes

 

Le projet est accessible sur GitHub: https://github.com/pierrem/MapDemo

 

WordPress + appli iOS native en Swift

L’idée était de développer un exemple de site Web avec un CMS (WordPress, Joomla ou Drupal) et une application native iOS (iPhone, iPad) permettant d’accéder aux informations du site avec une interface native.
Il faut pouvoir créer des web services avec une interface type HTTP/JSON permettant à l’application native d’accéder aux informations de la base de données du CMS.

J’ai finalement choisi WordPress, facile à mettre en oeuvre, et qui propose une API REST / JSON.

Coté iOS il est facile de récupérer par exemple la liste des articles pour une catégorie.

Le parsing du JSON un peu lourdingue avec Swift 1, est devenu plus élégant avec Swift 1.2 et la construction du if let avec des optionals multiples. Voir le blog Swift de Apple:

  • More powerful optional unwrapping with if let — The if let construct can now unwrap multiple optionals at once, as well as include intervening boolean conditions. This lets you express conditional control flow without unnecessary nesting.

Le projet est accessible sur GitHub:

https://github.com/pierrem/WordPress-API-Demo