Vincent Tourraine
Blog

Tous les billets dev

Raccourcis Siri « output » en action

J’ai récemment mis à jour Air Grenoble pour que son Extension Siri émette un « output ». Mais à quoi ça sert ? Voici un exemple : un utilisateur peut ajouter une notification personnalisée à une application qui n’en propose pas. Plus concrètement, je souhaite recevoir une notification tous les matins quand la qualité de l’air pour la journée s’annonce mauvaise.
#dev #iOS

Nouvelle application : bibliothèque de Grenoble

C’est plus fort que moi. Quand j’utilise fréquemment un service qui ne propose pas d’application mobile… je finis par créer moi-même l’application manquante. L’envie est encore plus forte quand le site web en question est mal adapté pour un écran mobile.
#iOS #app #dev

Swift Package Manager

Le formidable succès de CocoaPods ne pouvait aboutir qu’à une seule chose : la création par Apple d’un outil similaire, plus limité, mais mieux intégré au reste de l’écosystème. C’est donc Swift Package Manager (SPM). Le projet existe depuis 2015, mais la communauté des développeurs iOS semble y porter un plus grand intérêt cette année avec son intégration à Xcode 11.
#dev #Swift

Games Keeper 3

Je n’ai jamais vraiment été satisfait de l’interface de Games Keeper. Depuis sa première version, elle ressemble davantage à un prototype qu’à une application aboutie. En l’adaptant pour iOS 13, j’ai développé une nouvelle interface qui me paraît plus plaisante, tout en restant cohérente avec le fonctionnement de l’application. Je ne dirais pas que je suis pleinement satisfait du résultat, mais il s’agit d’une amélioration significative. Voici donc Games Keeper 3.
#iOS #app #dev

Air Grenoble pour iOS 13

Air Grenoble souffle sa deuxième bougie avec la sortie d’une version 2.3 accompagnant iOS 13. Voici le tour des nouveautés.
#iOS #app #dev

Nettoyer la barre de statut du Simulateur avec Xcode 11

Les captures d’écran sont incontournables sur l’App Store. Elles sont obligatoires pour publier une application, mais surtout elles sont importantes pour communiquer avec un futur utilisateur potentiel, et le convaincre d’installer l’application.
#dev #iOS

Prendre en charge le mode sombre pour un site web

Si vous consultez un site web avec le mode sombre d’iOS 13 ou de macOS Mojave activé, vous serez probablement gêné de découvrir un texte noir sur un fond de page éblouissant, tranchant avec le reste de vos applications. Par défaut, un contenu web ne s’adapte pas au mode sombre.
#dev #web

iOS 13 : s’adapter au mode sombre

Le mode sombre ne laisse pas indifférent. Mais que vous soyez enthousiasmé ou consterné, Apple annonce « Dark Mode » comme la nouveauté principale d’iOS 13. Si vous développez une application iPhone ou iPad, ça signifie qu’il vous faudra supporter cette fonctionnalité aussi tôt que possible.
#dev #iOS

iOS 13 : conserver la couleur d’une barre de navigation avec un grand titre

iOS 13 change beaucoup de petites choses pour les barres de navigation. Le plus frappant, peut-être, est qu’une barre avec un grand titre fusionne complètement avec le fond de la vue principale. La « barre » disparaît, pour ne laisser que le titre et les éventuels boutons de chaque côté.
#dev #iOS

Notes WWDC 2019 : Creating Independent Watch Apps

Mes notes pour la session 208 de la WWDC 2019 : Creating Independent Watch Apps.
#dev #iOS #watchOS

Notes WWDC 2019 : Modernizing Your UI for iOS 13

Mes notes pour la session 224 de la WWDC 2019 : Modernizing Your UI for iOS 13.
#dev #iOS

Notes WWDC 2019 : Targeting Content with Multiple Windows

Mes notes pour la session 259 de la WWDC 2019 : Targeting Content with Multiple Windows.
#dev #iOS

Notes WWDC 2019 : Architecting Your App for Multiple Windows

Mes notes pour la session 258 de la WWDC 2019 : Architecting Your App for Multiple Windows.
#dev #iOS

Notes WWDC 2019 : Introducing Multiple Windows on iPad

Mes notes pour la session 212 de la WWDC 2019 : Introducing Multiple Windows on iPad.
#dev #iOS

Notes WWDC 2019 : Great Developer Habits

Mes notes pour la session 239 de la WWDC 2019 : Great Developer Habits.
#dev #iOS #macOS

Notes WWDC 2019 : Introducing PencilKit

Mes notes pour la session 221 de la WWDC 2019 : Introducing PencilKit.
#dev #iOS

Notes WWDC 2019 : Supporting Dark Mode in Your Web Content

Mes notes pour la session 511 de la WWDC 2019 : Supporting Dark Mode in Your Web Content.
#dev #macOS #iOS #web

Notes WWDC 2019 : Implementing Dark Mode on iOS

Mes notes pour la session 214 de la WWDC 2019 : Implementing Dark Mode on iOS.
#dev #iOS

Notes WWDC 2019 : Introducing SF Symbols

Mes notes pour la session 206 de la WWDC 2019 : Introducing SF Symbols.
#dev #iOS #macOS

Notes WWDC 2019 : What’s New in iOS and macOS Design

Mes notes pour la session 801 de la WWDC 2019 : What’s New in iOS and macOS Design.
#dev #iOS #macOS

Un mode nuit pour Air Grenoble

De nombreuses applications iOS proposent un mode sombre. macOS propose un mode sombre, et une API pour les applications qui veulent l’adopter. Tout porte à croire qu’iOS 13, quand il sera présenté le mois prochain, proposera un mode sombre. Le mode sombre est à la mode.
#iOS #app #dev

iOS : adapter une police de caractères

Je vous propose un petit jeu. Pendant plusieures années, l’écran principal de mon application Games Keeper affichait un bug. Saurez-vous le trouver sur cette image ?
#dev #iOS

Nano Notes, un peu de lecture sur Apple Watch

Parfois, je veux lire sur mon Apple Watch. Oui, l’écran a la taille d’un timbre. Apple a sûrement une bonne raison pour ne pas proposer son application Notes sur watchOS. Mais, parfois, je veux lire sur mon Apple Watch. J’ai donc décidé de développer une application pour remplir ce rôle. Elle s’appelle Nano Notes, et vous pouvez la télécharger gratuitement sur l’App Store.
#iOS #app #dev

Remplacer les Bool par des enum

J’ai découvert cette astuce avec un billet de Paul Hudson, sur une idée partagée en 2016 par Maciej Konieczny. Plutôt que d’utiliser des booléens, il est souvent préférable de déclarer des énumérations à deux valeurs.
#dev #Swift #Objective-C

MiXiT 5, édition 2019

La conférence lyonnaise MiXiT vient d’annoncer son programme pour l’édition 2019, ce qui me permet de mettre à jour mon application iOS. Voici donc la version 5 (cinquième année, déjà), prête pour la conférence qui aura lieu les 23 et 24 mai.
#mixit #iOS #app #dev

WatchKit : menus contextuels introuvables

Pour proposer davantage de fonctionnalités sur un écran si petit, WatchKit permet d’afficher des menus contextuels (« context menus » en VO). À n’importe quel moment, l’utilisateur peut appuyer fort sur l’Apple Watch pour faire apparaître des actions associées à l’écran actif.
#dev #watchOS

Memorii, le retour

Memorii est une application de mémorisation de vocabulaire pour l’étude d’une langue étrangère. Elle fonctionne sur le principe des cartes mémoire : on y entre des listes de mots, et l’application fait défiler cette liste de différentes façons pour faire travailler la mémoire.
#iOS #app #dev

Bug d’itération de dictionnaire

Je fais parfois des erreurs vraiment basiques. Par exemple, je viens de comprendre la cause d’un bug qui me contrariait depuis plusieurs semaines. Mon erreur : j’utilisais un dictionnaire à la place d’un tableau.
#dev #iOS #Swift

Passer des données avec Shortcuts

L’application Raccourcis fonctionne comme la plupart des systèmes de programmation « visuelle » : avec des blocs, prenant des valeurs en entrée, et produisant d’autres valeurs en sortie. Input/output classique. Avec iOS 12, l’application Raccourcis gère un nouveau type de bloc, les... Raccourcis Siri, c’est-à-dire des actions spécifiques, proposées par une application.
#iOS #app #dev

Siri Shortcuts

Les « Siri Shortcuts » sont une des principales nouveautés d’iOS 12. Une fonctionnalité très prometteuse, mais un peu difficile à résumer, et qui va au-delà de Siri l’assistant vocal. Plus généralement, il s’agit en fait de marquer certaines activités se déroulant au sein d’une application, pour ensuite laisser le système les exposer en dehors de l’application elle-même. Avec une commande Siri, donc, mais aussi sur l’écran d’accueil, l’écran de recherche, ou avec la nouvelle application « Raccourcis ».
#iOS #app #dev

Table view minimaliste avec Swift

Développer pour iOS en 2018, c’est encore et toujours une histoire de UITableView. Les protocoles de data source et de delegate n’ont pas vraiment changé depuis iPhone OS 2, mais on continue à débattre des mille et une façons de les implémenter. Swift, en particulier, apporte de nouvelles solutions.
#iOS #app #dev

Nuages animés avec UIKit

UIKit permet d’animer facilement n’importe quel élément affiché à l’écran. Il convient évidemment de faire preuve de retenue pour ne pas détruire son interface avec une avalanche d’animations, mais il faut aussi savoir s’amuser, et une petite dose d’animation suffit parfois à rendre une application unique et plus agréable à utiliser.
#iOS #app #dev

Nouvelle icône pour Air Grenoble 2

L’icône a un rôle essentiel de représentation. Difficile de la changer trop souvent sans déstabiliser inutilement ceux qui ont l’habitude de la voir sur leur écran d’accueil. Mais une « v2 » est toujours une bonne opportunité pour rafraîchir et améliorer l’icône.
#iOS #app #dev

Air Grenoble 2 : mise à jour pas-à-pas

« Air Grenoble » est une petite application iOS qui permet de consulter facilement l’indice de qualité de l’air. C’est un projet qui me plaît beaucoup, pour plusieurs raisons.
#iOS #app #dev

WWDC 2018 : test d’applications

Doucement mais sûrement, Apple améliore ses outils pour le « testing » des applications (tests unitaires, intégration continue, etc). Voici le compte-rendu de la session « WWDC 2018 - What’s New in Testing », avec tous les changements apportés cette année.
#dev #iOS #Xcode #unit test

Contact[s] + ThirdPartyMailer

Contact[s] est une application de gestion de carnet d’adresses, qui permet de configurer un client mail tiers. La dernière mise à jour apporte la prise en charge de Microsoft Outlook et Yahoo Mail. En coulisses, le changement est plus significatif : l’application utilise maintenant ThirdPartyMailer, un projet open source qui se concentre sur cette gestion des clients mail.
#iOS #app #dev

Remplacer NSLog()/print avec des breakpoints

C’est bien connu, on adore débugger un problème avec NSLog() ou print. On sait bien qu’il existe des outils plus adaptés pour suivre le déroulement d’un programme, mais on préfère souvent ce bon vieux loggeur, facile à mettre en place, facile à maîtriser.
#dev #Xcode

Tweets astuces

Depuis quelques temps, j’essaie de poster régulièrement sur Twitter des « astuces » pour mes applications iOS. Se faire remarquer sur l’App Store est un art difficile. Très difficile, surtout quand on est un petit développeur amateur. Twitter est un moyen de communication utile, qui a l’avantage d’être rapide à alimenter.
#dev #iOS #Twitter

iOS : localisation plus cohérente

Localiser une application est une tâche difficile, qui implique de nombreux aspects au-delà de la simple traduction de texte. iOS inclut des outils qui peuvent faciliter cette localisation, et l’adapter aux réglages de l’utilisateur.
#dev #iOS

MiXiT 2018

MiXiT est une conférence très sympathique pour beaucoup de raisons, mais notamment parce qu’elle propose une API simple pour consulter le programme. Je trouve que c’est une excellente occasion pour construire une petite application.
#mixit #iOS #app #dev

Tester l’exécution d’un block en paramètre avec OCMock

J’utilise OCMock pour écrire des tests unitaires avec Objective-C depuis plusieurs années, mais je viens tout de juste de découvrir un nouveau cas d’utilisation, pas vraiment évident, mais bien pratique. Il s’agit de configurer un mock pour invoquer un block passé en paramètre.
#dev #Objective-C #unit test

Synchroniser les numéros de version des Extensions

Les App Extensions gagnent chaque année en importance. Depuis leur introduction avec iOS 8, elles fonctionnent essentiellement comme des applications indépendantes, avec notamment leur propre numéro de version.
#dev #Xcode

Notations App Store, nouvelle génération

L’importance des notations sur l’App Store a généralisé le concept du « Please rate this app ». Ces alertes encouragent, de façon plus ou moins insistante, l’utilisateur à laisser un avis sur l’App Store. Tout ça pour obtenir le plus de ★★★★★.
#dev #iOS

Tester plusieurs versions d’iOS avec buddybuild

Dès qu’une nouvelle version d’iOS arrive, on aimerait pouvoir abandonner les précédentes. D’une part, pour bénéficier des dernières APIs, mais aussi pour simplifier les conditions d’exécution du code. Or, avec un peu de pragmatisme, il convient généralement de supporter une ou deux versions antérieures afin de ne pas exclure une partie des utilisateurs potentiels.
#iOS #Xcode #dev

Table view avec sections dynamiques

« UITableView » est un élément fondamental de l’interface d’iOS depuis la toute première version du SDK. Elle s’organise en deux niveaux : des sections, et des lignes. Rien de compliqué lorsque le contenu est statique. Mais les choses peuvent vite se corser quand ces sections et ces lignes apparaissent dynamiquement.
#dev #Swift #UIKit

Commentaire en-tête

À la création d’un nouveau fichier, Xcode insère systématiquement un en-tête contenant des renseignements de base : nom du fichier et du projet, le créateur, la date de création, et le nom de l’organisation attachée au projet.
#dev

Code block evaluation

Pour garantir la bonne qualité d’un code source, on conseille souvent de garder les fonctions courtes. Au-delà d’une dizaine de lignes, mieux vaut re-découper. C’est généralement une bonne règle à suivre, mais qui peut entraîner un nouveau problème. En effet, cette contrainte favorise des fonctions plus concises, mais parfois trop fragmentées, ce qui nuit à la lisibilité du code dans son ensemble.
#Objective-C #dev

Mega Moji

Tous les ans c’est la même chose. Une nouvelle version d’iOS arrive, avec son SDK et ses API, et autant de nouvelles opportunités. Je voulais donc en profiter pour construire une nouvelle app, et essayer d’être présent dès le premier jour de disponibilité de l’OS.
#iOS #dev

Mix-IT 2016

La nouvelle édition de Mix-IT se déroulera la semaine prochaine, c’était donc le bon moment pour mettre à jour mon app iOS permettant d’en consulter le programme, initialement publiée l’année dernière.
#mixit #iOS #app #dev

À propos de watchOS 2

J’ai récemment eu l’occasion de mettre à jour une application pour watchOS 2. Un peu en retard, pour un OS disponible depuis septembre dernier. Mais ce passage n’est pas anodin, car le mode de fonctionnement des apps s’en trouve littéralement renversé.
#dev #watchOS #WatchKit

Découpage des méthodes et fonctions

Comment découper son code en méthodes/fonctions ? Quel est le bon moment pour choisir d’écrire une nouvelle méthode, plutôt que de simplement continuer avec celle déjà existante ? Ces questions sont terriblement basiques, mais je continue de me les poser continuellement.
#dev

Generics avec Objective-C

Après les « nullability annotations » d’Xcode 6.3, voici les « generics » d’Xcode 7. L’intention est la même : faire évoluer Objective-C pour faciliter son interopérabilité avec Swift. Avec, au passage, l’occasion d’améliorer la qualité du code Objective-C pour lui-même, en permettant à Xcode de détecter toute une nouvelle catégorie de bugs.
#Objective-C #Xcode #dev

Comment implémenter Peek et Pop pour 3D Touch

article thumbnail
Tous les ans c’est la même chose, Apple garde quelques API en surprise pour la sortie d’iOS au mois de septembre. Avec iOS 9 et les écrans 3D Touch des nouveaux iPhones, voici donc « Peek » et « Pop », qui remportent conjointement le prix de l’API au nom le plus ridicule à porter. Du côté du code, par contre, il est question de « view controller previewing » et de « commit » du preview, le tout restant associé à Force Touch.
#iOS #UIKit #dev

AcknowList

Cette semaine, j’ai publié une première version d’AcknowList, une bibliothèque en Swift pour afficher les licences CocoaPods à l’intérieur d’une application. Si ça vous rappelle quelque chose, c’est parce que j’avais initialement créé ce projet en Objective-C, il y a presque deux ans. Les temps changent, il faut s’adapter. Toutes les occasions de mettre Swift en pratique sont bonnes à prendre, et on peut bien sûr en tirer quelques leçons.
#Swift #CocoaPods #dev

Indexer le contenu d’une app avec Spotlight pour iOS 9

article thumbnail
Une nouvelle API à la fois simple d’utilisation et intéressante pour la plupart des apps : une combinaison comme on les aime. Avec iOS 9, on peut donc indexer le contenu d’une application, afin de rendre des données accessibles à tout moment depuis le champs de recherche système (a.k.a. « Spotlight »). Une opportunité plutôt rare dans un OS où chaque app est soigneusement sandboxée. Il faudra encore attendre pour une éventuelle API Siri, mais cette nouveauté constitue déjà une amélioration importante.
#iOS #dev

Nullability et initialisation

Mon dernier billet de blog présentait les « nullability annotations », en essayant d’expliquer comment elles contribuent à améliorer un code Objective-C. Avec un peu de recul, et après davantage de temps passé à les mettre en pratique, ces annotations me posent un problème. Un cas particulier, peut-être, mais absolument incontournable, puisqu’il s’agit de l’initialisation des objets.
#Objective-C #Xcode #dev

Nullability avec Objective-C

J’adore quand Xcode trouve des bugs dans mon code. C’est un peu comme si une IA passait mon travail en revue pour m’aider à l’améliorer. Le pair-programming du futur, sans doute.
#Objective-C #Xcode #dev

Comment inspecter une page web (ou une web view) avec iOS

Safari n’est pas exactement le navigateur favori des développeurs web. Il dispose cependant d’une fonctionnalité, un peu cachée et donc relativement méconnue, qui vaut vraiment le détour lorsqu’il s’agit de concevoir un site (ou une app) mobile. Je n’ai probablement pas à vous convaincre de l’intérêt du Web Inspector. Depuis Firebug jusqu’aux _DevTools_ de Chrome, la possibilité d’explorer le DOM avec une interface graphique est devenue incontournable. Mais comment faire pour un smartphone ou une tablette, quand le navigateur mobile ne dispose pas d’une telle fonctionnalité ? Dans le cas d’iOS, Safari s’en occupe très bien, encore faut-il savoir l’activer.
#iOS #web #dev

Impressions WWDC 2015

On peut dire que la WWDC est vraiment devenue « worldwide » depuis qu’Apple diffuse les vidéos des sessions pendant le courant de la semaine, allant cette année jusqu’à proposer plusieurs retransmissions en direct. Bref, San Francisco ou pas, tout le monde peut bénéficier de cette avalanche d’informations. Nouvelles versions des OS, nouvelles API, il y a forcément beaucoup de choses à dire, je ne vais donc pas me priver d’y ajouter mon commentaire.
#WWDC #iOS #OS X #watchOS #dev

Rappels pour Apple Watch

Parmi les premières apps Apple Watch disponibles, on trouve de nombreux gestionnaires de rappels. Clear, Wunderlist, Things, tous ont répondu à l’appel de WatchKit. Tous ? Non ! Une application fait clairement défaut : Reminders, a.k.a. Rappels, l’application d’Apple. Vous pouvez demander à Siri de créer un nouveau rappel depuis votre montre, mais vous ne pouvez pas les consulter.
#Apple Watch #WatchKit #dev

WatchKit, version 1

article thumbnail
Comment développer des applications sans jamais avoir utilisé l’OS concerné, ni même la classe de produit en question ? C’est le casse-tête posé par Apple aux développeurs tiers depuis quelques mois avec WatchKit, le SDK de l’Apple Watch. Le grand jour est arrivé, la montre est enfin disponible (pour les pré-commandes les plus rapides), et l’App Store Apple Watch contient environ 3000 apps. Ce nombre est comparable aux apps iPad pour le lancement de la tablette, alors que l’iPhone n’avait de 500 apps pour l’ouverture de l’App Store en 2008. Dernier chiffre pour mettre tout ça en perspective, on trouve environ 1,4 million d’apps iPhone aujourd’hui.
#Apple Watch #WatchKit #dev

Application iOS pour Mix-IT

Mix-IT, c’est un peu la WWDC lyonnaise. L’année dernière, la conférence avait vendu tous les billets en 48 heures ; cette année il aura suffit de 3 heures.
#mixit #iOS #dev

Bilan de ma première application Swift

Je ne me suis pas franchement jeté sur Swift après l’annonce de la WWDC 2014, mais dotSwift est passé par là, et voici maintenant ma première application Swift disponible sur l’App Store (pour être précis, l’application principale est en Swift, l’extension du clavier est encore en Objective-C). À défaut d’être original, je pense que c’est le bon moment pour un premier bilan de ma courte expérience avec ce nouveau langage qui s’annonce, rappelons-le, comme l’avenir du développement pour les plateformes Apple.
#Swift #dev

Ma sélection des pods les plus utilisés

La première fois qu’on me l’a présenté, CocoaPods m’avait laissé sceptique. Gérer ses dépendances et configurer un workspace Xcode était déjà assez compliqué comme ça, pas besoin de rajouter un outil tiers par dessus tout le reste. Bien sûr, c’est pourtant exactement pour cela que CocoaPods est si intéressant, parce qu’aucun développeur Objective-C ne devrait avoir à configurer un workspace pour une quelconque dépendance, ou mettre à jour un code tiers en téléchargeant une archive zip sur GitHub pour ensuite déplacer manuellement un ensemble de fichiers.
#CocoaPods #dev

Introduction au développement OS X (pour développeurs iOS, et pour les autres)

Coincé entre la déferlante iOS et la montée en puissance des web apps, le développement OS X n’est pas franchement au centre des attentions. Il s’agit pourtant d’une plateforme toujours intéressante, pour plusieurs raisons.
#dev #Cocoa #OS X

Structurer un code Objective-C

La qualité d’un code source est avant tout une question de structure. Lorsque je relis un code (notamment le mien), mon premier reproche concerne très souvent le manque de structure. Il n’existe pas de solution universelle, mais les bonnes pratiques en la matière permettent vraiment de développer plus efficacement, seul ou à plusieurs sur un projet. Voici donc un résumé des points qui me paraissent les plus importants pour bien structurer un code Objective-C.
#code #dev #Objective-C #Cocoa