API or not API, that is the question…

API _ Application programming interface

Sous ce titre un peu… provocateur (la chaleur de ce mois d’août y est peut-être pour quelque chose 🙂 ), j’ai décidé de vous partager différentes ressources en ce qui concerne les APIs que j’utilise ou suis susceptible d’utiliser pour mes développement d’applications mobiles.

 

Cet article est bien sûr destiné à être mis à jour régulièrement, donc n’hésitez pas à (re)venir y jeter un oeil de temps en temps !

Achats :

SwiftyStoreKit : pour les achats in apps : https://github.com/bizz84/SwiftyStoreKit

 

Interface :

ActiveLabel : remplacement de UILabel qui supporte les hashtags, les mentions, les urls : https://github.com/optonaut/ActiveLabel.swift

IQKeyboardManager : pour le problème de recouvrement des textes par le clavier : https://github.com/hackiftekhar/IQKeyboardManager

MarqueeLabel : remplacement de UILabel, ajoute un scroll automatique lorsque le texte dépasse le label : https://github.com/cbpowell/MarqueeLabel

NotificationBanner : des bannières de notification : https://github.com/Daltron/NotificationBanner

PKHUD : pour l’affichage de logo de chargement, sons… https://github.com/pkluz/PKHUD

PureLayout : extension pour UIView, NSView, NSArray et NSLayoutConstrain : https://github.com/PureLayout/PureLayout

RMessage : de jolis messages d’alerte / d’informations : https://github.com/donileo/RMessage

SCAlertView : de jolies popup d’alerte : https://github.com/vikmeup/SCLAlertView-Swift

SideMenu : un simple SideMenu en Swift : https://github.com/jonkykong/SideMenu

SlideMenuController : pour un menu « Hamburger » : https://github.com/dekatotoro/SlideMenuControllerSwift

Snapkit : pour l’autolayout : http://snapkit.io/

 

Debug :

https://api.randomuser.me/ : API pour test : génère des données d’utilisateurs (JSON…)

Crashlytics : analyse de crash : https://try.crashlytics.com/

https://jsonplaceholder.typicode.com/https://github.com/typicode/jsonplaceholder : REST API gratuite pour tests, supporte les requêtes standartd GET, POST…

 

Divers :

https://api.gouv.fr/apis : les api du gouvernement Français : niveaux d’eau…

https://api.nasa.gov/ : la Nasa…

Bolts-Swift : framework de bas niveau développé par Facebook : https://github.com/BoltsFramework/Bolts-Swift

https://cloudconvert.com/ : pour convertir un fichier d’un format vers un autre

LevelDB : système de stockage key-value par Google permettant un meilleur tri : https://github.com/google/leveldb

https://market.mashape.com/ : tout un tas d’api’s, gratuites ou non

https://www.programmableweb.com/category/all/apis?data_format=21173 : beaucoup d’api’s également

http://restcountries.eu/ : permet d’avoir des infos sur les pays : capitale, monnaie, population

 

Films :

http://www.themoviedb.org/ : api concernant les films

 

Images :

DMSwipeCards : pour créer un effet « incliné » sur des « cartes » (images), par exemple lorsque l’on veut effacer une image : https://github.com/D-32/DMSwipeCards

HexColors : extension pour UIColor et NSColor qui permet de créer des couleurs depuis leur code hexadecimal : https://github.com/mRs-/HexColors

IGRPhotoTweaks : pour autoriser l’utilisateur à recouper, faire tourner… des photos : https://github.com/IGRSoft/IGRPhotoTweaks

https://imagga.com/ : reconnaissance d’images

Nuke : pour la mise en cache d’images : https://github.com/kean/Nuke

 

Maps :

Cluster : pour faciliter les annotations sur les maps : https://github.com/efremidze/Cluster

 

Météo :

https://darksky.net/dev : api météo

https://openweathermap.org/api : api météo

https://openweathermap.org/api : API pour une appli météo

Réseau :

Alamofire, Moya et swiftyJSON : parsing d’url et gestion du json (REST) :

https://github.com/Alamofire/Alamofire

https://github.com/SwiftyJSON/SwiftyJSON

https://github.com/Moya/Moya

GoogleToolboxForMac : différents projets Google : https://github.com/google/google-toolbox-for-mac

Gtm-session-fetcher : GoogleToolboxForMac – pour les opérations http : https://github.com/google/gtm-session-fetcher

NanoPb : système de protocol buffer : https://github.com/nanopb/nanopb

Protobuf : Google, envoi de données : https://github.com/google/protobuf

ObjectMapper : conversion JSON : https://github.com/Hearst-DD/ObjectMapper

Reachability : ré-écriture de Apple Reachabilyty pour connaître l’état du réseau Attention : possibilité de rejet par Apple : voir le site : https://github.com/ashleymills/Reachability.swift

 

Sons :

JSQSystemSoundPlayer : pour ajouter des sons : https://github.com/jessesquires/JSQSystemSoundPlayer

 

 

 

 

Programmation Swift : le mot-clé guard

GuardOrIf

Je ne sais pas pour vous, mais il m’a fallu un moment pour comprendre à quel moment il était préférable d’utiliser le mot clé « guard » à la place du couple « if / else » en programmation Swift.

En fait, c’est comme tout, lorsque l’on à compris… c’est hyper simple ! Mais avant 😦

Donc, la différence entre « if » et « guard » est un peu subtile, mais la voici : « guard » doit être utilisé lorsque une donnée doit être présente pour la bonne exécution de la fonction.

Bon, dit comme cela, c’est encore un peu flou, alors voici un petit exemple :

guard.png

Ici, il est nécessaire que les champs « name », « address » et « phone » soient remplis pour pouvoir exécuter la fonction « sendToServer ». Sinon, on affiche un message et on sort de la fonction (return). On aurait bien sûr pu faire la même chose avec des « if/else », mais avouez que cela aurait certainement eu un impact négatif sur la taille et la lisibilité du code !

En fait, on s’aperçoit vite qu’une grande partie des « if / else » peuvent êtres avantageusement remplacés par des « guard » ! Cela nécessite un peu d’entrainement au début (il faut réfléchir « à l’envers »), mais cela améliore nettement la lisibilité du code !

Donc, maintenant, plus de prétexte pour planter (dans vos codes…) des forêts d’Ifs !

 

 

Alamofire POST Tutoriel

Voici la suite de mon précédent tutoriel concernant Alamofire. Cette fois, on attaque la partie « POST ».

Pour cet exemple, j’ai créé une petite application de to-do, dont le source est sur FramaGit : https://framagit.org/VinceBar/MyToDoList

Autant il est relativement simple de trouver des API’s gratuites pour faire du GET, autant trouver des API’s ouvertes pour du POST est compliqué. D’ailleurs, si vous avez des infos là dessus, n’hésitez pas à me les mettre en commentaire ! J’ai cependant trouvé ce site : https://jsonplaceholder.typicode.com/ , avec plus d’infos ici : https://github.com/typicode/jsonplaceholder

Il en découle ceci : les ressources ne sont pas réellement mises à jour sur le serveur, mais celui-ci « fait comme si ». L’application d’exemple n’est donc pas pleinement fonctionnelle (vous ne pourrez pas réellement ajouter ou effacer de to-do), mais le serveur simulera l’action. Tout l’intérêt de l’application se trouve dans les méthodes utilisées pour gérer les différentes actions d’Alamofire.

Allez, entrons dans le vif du sujet !

Lire la suite

Ma découverte de Sketch

Artboard

En tant que développeur mon travail consiste à résoudre de la manière la plus élégante possible un problème donné, et de faciliter au maximum la vie aux futurs utilisateurs de mon programme…

D’ailleurs, les développeurs facilitent tellement la vie des utilisateurs que nous devrions être remboursés par la sécu 😉 … enfin, je m’égare…

En développement d’application iOS, quand on a la chance de travailler avec un designer et un cahier des charges précis, tout va bien. Il reste « juste » à coder proprement.

Mais parfois, le client n’a ni designer, ni idée précise du rendu final de l’appli…

Pourtant, il faut bien l’admettre, vous pourrez écrire le plus beau code du monde, si l’interface de l’application est pourrie, et bien cela donnera une application pourrie !

Sans designer, les itérations avec le client concernant l’interface peuvent alors être une source non négligeable de pertes de temps et de frictions…

deleteDesign

Mais j’ai découvert Sketch : https://www.sketchapp.com/

Ce logiciel et ses nombreuses extensions permettent de travailler sur le design de l’appli, de simuler la navigation entre les écrans (y compris sur device physique), de créer de jolies icones et boutons, et surtout d’exporter tout cela pour les intégrer dans Xcode.

ex :

logo_icon

Bon, le seul problème, c’est qu’il nécessite quand même un certain apprentissage…

Je suis en train de me former dessus, et promis, je vous fait un (ou plusieurs) tutos dès que je maitriserai la bête !

Un grand merci à https://la-cascade.io/ pour ses supers tutoriels !