Vincent Tourraine
Blog

Tous les billets dev

MiXiT 2024

La nouvelle édition de MiXiT aura lieu les 25 et 26 avril. Et, comme chaque année, c’est l’occasion de mettre à jour mon application iOS/iPadOS/macOS.
#dev #iOS #macOS

AcknowList : affichage des licences avec l’API GitHub

Ma bibliothèque AcknowList est partie d’un modèle simple : afficher le contenu des licences CocoaPods. Plus tard, j’ai ajouté le support de Swift Package Manager. Petit problème : SPM ne gère pas explicitement les licences, juste l’URL où se trouve le code. AcknowList 3.1.0 améliore cette situation grâce à l’API GitHub.
#dev #iOS #UIKit #SwiftUI

Améliorer une application Catalyst avec une toolbar

Qu’est-ce qui différencie une application pour le Mac d’une application iOS ? Il n’existe pas de réponse simple, mais je crois que la toolbar est un élément important.
#dev #macOS

Copier le contenu d’une UITableView

Sur un site web, on peut sélectionner et copier n’importe quel texte. Sur une application, c’est plus limité. Pourtant, ça me semble important de laisser un maximum de contenu copiable.
#dev #iOS

Développer pour visionOS ?

La plus grosse surprise était peut-être son nom. Apple Vision Pro avec visionOS. Bravo l’équipe marketing. « Reality Pro » avait quelque chose d’irréel et « xrOS » ressemblait à un accident de clavier.
#dev #visionOS

Nano Notes avec titres formatés

Nano Notes est une application très simple. Un écran avec la liste des notes et un écran pour modifier une note. Côté code, ça donne une UITableView et une UITextView.
#dev #iOS

Partager/copier une URL avec Catalyst

Quand on partage une URL avec UIActivityViewController, iOS propose de la copier dans le presse-papiers. Rien de plus normal. Mais si on compile ce même code pour macOS avec Catalyst, cette option n’est pas proposée.
#dev #iOS #macOS

MiXiT 2023 avec SwiftUI

J’avais complètement oublié MiXiT. Ça fait pourtant huit ans que je maintiens mon application, mais cette fois, j’avais oublié.
#dev #iOS #macOS

Mise à jour PlayGuide pour le printemps

Ce week-end marque le début des vacances de printemps. L’occasion idéale pour mettre à jour PlayGuide, notre annuaire des aires de jeux pour enfants.
#dev #iOS #macOS

Bibliothèque de Grenoble : au revoir l’API

Développer une application basée sur une API qu’on ne contrôle pas est une source d’inquiétude permanente. C’est le cas avec mon application pour la Bibliothèque Municipale de Grenoble.
#iOS #dev

Mise à jour du site internet Studio AMANgA

La page d’accueil pour StudioAMANgA.com n’avait pas bougé depuis plusieurs années. Je viens de la mettre à jour, avec des nouveautés visuelles mais aussi un gros changement technique.
#dev #web

Application PlayGuide

Depuis plusieurs années, j’avais envie de créer une application pour trouver les aires de jeu autour de chez moi. L’application PlayGuide est maintenant disponible sur l’App Store.
#dev #iOS

Tentative de projet avec SwiftUI

On peut difficilement ignorer SwiftUI. Au début, il y avait du potentiel et de l’enthousiasme. Ainsi que des limitations et des bugs. Normal ! Les premiers retours étaient prometteurs. Certains développeurs adorent expérimenter avec les technologies balbutiantes. En général, je préfère attendre.
#dev #iOS #SwiftUI

AcknowList pour Swift Package Manager

AcknowList existe parce que CocoaPods propose une liste des licences pour un projet : le fichier « acknowledgments.plist ». Que faire pour Swift Package Manager ? On peut toujours intégrer des licences manuellement, mais sans fichier de référence, l’intégration n’est pas vraiment satisfaisante. Quand soudain je découvre le fichier « Package.resolved ».
#dev #iOS

Notes WWDC 2022 : Complications and widgets

Mes notes pour les sessions « Complications and widgets: Reloaded » et « Go further with Complications in WidgetKit » de la WWDC 2022.
#dev #iOS #watchOS

Notes WWDC 2022 : Desktop-class iPad apps

Mes notes pour les sessions « Build a desktop-class iPad app » et « Adopt desktop-class editing interactions » de la WWDC 2022.
#dev #iOS

Notes WWDC 2022 : What’s new in UIKit

Mes notes pour la session « What’s new in UIKit » de la WWDC 2022.
#dev #iOS

Notes WWDC 2022 : What’s new in Swift

Mes notes pour la session « What’s new in Swift » de la WWDC 2022.
#dev #iOS #macOS

Passer de CocoaPods à Swift Package Manager

J’utilise CocoaPods depuis des années pour mes projets personnels et professionnels. Au fil des années, j’ai mis à jour mes bibliothèques open source pour les rendre compatible avec SPM. Et maintenant, je réalise que certaines de mes applications n’ont plus besoin de CocoaPods.
#dev #iOS

Historique des versions avec Trackup

Dans mon article du mois dernier, j’expliquais que Trackup était extensible, offrant des possibilités d’évolution intéressantes. Depuis, j’ai mis en pratique une de ces idées, avec un nouveau package Swift qui présente un historique de versions.
#dev #iOS

MiXiT 2022

MiXiT, la conférence « avec des crêpes et du cœur », revient les 24 et 25 mai à Lyon. Et comme pour chaque édition, je publie une mise à jour de mon application.
#dev #iOS #macOS

Comment gérer un projet, de la feuille de route aux notes de version, avec un seul fichier

Pour tous mes projets perso, j’utilise un système simple pour gérer les développements passés, présents et futurs. En d’autres termes : feuille de route, suivi de progression et notes de version. Tout ça, avec un seul fichier texte.
#dev

Interface SwiftUI pour AcknowList

La dernière mise à jour d’AcknowList ajoute une interface SwiftUI. Le principe reste le même : la bibliothèque est configurée avec une liste de licenses, et affiche le résultat. En plus des UIViewController (UIKit), il y a donc maintenant des View (SwiftUI).
#dev #iOS #SwiftUI

Ouvrir le client mail choisi par l’utilisateur

Une application iOS peut facilement invoquer Apple Mail. Pour les autres clients mail (Gmail, Outlook, etc), j’ai créé ThirdPartyMailer. Cette bibliothèque utilise les *custom URL schemes* pour invoquer des applications spécifiques, avec certaines options : destinataire du mail, sujet, contenu, CC/BCC. Pratique, mais le développeur doit choisir le client à utiliser, ou offrir ce choix à l’utilisateur dans l’application.
#dev #iOS

1List 3

Je viens de publier 1List version 3. Quoi de neuf ? L’application a une nouvelle interface, toute simple et toute blanche.
#dev #iOS #macOS

SF Symbols

Les dernières versions d’iOS ont apporté beaucoup de nouveautés pour les développeurs. Si je devais n’en retenir qu’une, ce serait SF Symbols. Plus qu’une API, c’est une partie intégrante de l’OS, ouverte aux applications tierces.
#iOS #dev

Quels changements pour iOS 15 ?

Chaque version d’iOS apporte son lot de nouveautés. Mais avant toute chose, il convient de tester l’impact du nouveau SDK sur les fonctionnalités existantes. En d’autres termes, comment éviter les régressions avec les mises à jour d’Xcode ?
#dev #iOS

Notes WWDC 2021 : Embrace Expected Failures in XCTest

Mes notes pour la session « Embrace Expected Failures in XCTest » de la WWDC 2021.
#dev #Xcode

Notes WWDC 2021 : Use the camera for keyboard input in your app

Mes notes pour la session « Use the camera for keyboard input in your app » de la WWDC 2021.
#dev #iOS

Notes WWDC 2021 : SF Symbols in UIKit and AppKit

Mes notes pour la session « SF Symbols in UIKit and AppKit » de la WWDC 2021.
#dev #iOS #macOS

Notes WWDC 2021 : Focus on iPad keyboard navigation

Mes notes pour la session « Focus on iPad keyboard navigation » de la WWDC 2021.
#dev #iOS

Notes WWDC 2021 : Your guide to keyboard layout

Mes notes pour la session « Your guide to keyboard layout » de la WWDC 2021.
#dev #iOS

Notes WWDC 2021 : Customize and resize sheets in UIKit

Mes notes pour la session « Customize and resize sheets in UIKit » de la WWDC 2021.
#dev #iOS

Notes WWDC 2021 : What’s new in Mac Catalyst

Mes notes pour la session « What’s new in Mac Catalyst » de la WWDC 2021.
#dev #macOS

Notes WWDC 2021 : What’s new in Foundation

Mes notes pour la session « What’s new in Foundation » de la WWDC 2021.
#dev #iOS #macOS

Notes WWDC 2021 : What’s new in Swift

Mes notes pour la session « What’s new in Swift » de la WWDC 2021.
#dev

Notes WWDC 2021 : Elevate your DocC documentation in Xcode

Mes notes pour la session « Elevate your DocC documentation in Xcode » de la WWDC 2021.
#dev #Xcode

Notes WWDC 2021 : Meet DocC documentation in Xcode

Mes notes pour la session « Meet DocC documentation in Xcode » de la WWDC 2021.
#dev #Xcode

Notes WWDC 2021 : Meet TestFlight on Mac

Mes notes pour la session « Meet TestFlight on Mac » de la WWDC 2021.
#dev #macOS

Notes WWDC 2021 : Meet the Location Button

Mes notes pour la session « Meet the Location Button » de la WWDC 2021.
#dev #iOS

Notes WWDC 2021 : What’s new in UIKit

Mes notes pour la session « What’s new in UIKit » de la WWDC 2021.
#dev #iOS

Notes WWDC 2021 : Meet the UIKit button system

Mes notes pour la session « Meet the UIKit button system » de la WWDC 2021.
#dev #iOS

Memorii 4

Voici Memorii 4, une nouvelle version de mon application d’apprentissage par cartes mémoire. Au programme des nouveautés : l’ajout de vocabulaire coréen, un widget pour les Favorites, et de nombreuses améliorations de l’interface.
#dev #iOS #macOS

Air Grenoble 3

Au début de l’année, l’indice de qualité de l’air pour Grenoble a évolué, avec une nouvelle échelle allant de 1 à 6. J’avais alors mis à jour mon application Air Grenoble pour refléter ce nouvel indice, mais sans en modifier le format. Air Grenoble 3 apporte une nouvelle interface, mieux adaptée à ce nouvel indice.
#dev #iOS #macOS

MiXiT 6 pour iOS et macOS

La conférence MiXiT est de retour les 18, 19 et 20 mai. Le moment est donc venu de mettre à jour mon application. Il y a même quelques nouveautés cette année, avec le partage des sessions, la possibilité d’ajouter une session à votre calendrier, mais aussi une version Mac.
#iOS #macOS #dev

AcknowList et la compatibilité avec Objective-C

Depuis 5 ans, je m’inflige de maintenir VTAck et AcknowList, deux bibliothèques qui implémentent exactement la même chose, en Objective-C et en Swift. Quand un bug est corrigé d’un côté, je le reprends pour l’autre. Quand une fonctionnalité est ajoutée d’un côté, rebelote. Un exercice qui était assez instructif au début, qui devient de plus en plus une corvée.
#dev #iOS

VTAck’ + AcknowList 2.0

J’ai commencé à travailler sur VTAcknowledgementsViewController pendant mes vacances de fin d’année 2013. Cette semaine, je viens de publier sa version 2.0.
#dev #iOS

API pour l’application Bibliothèque de Grenoble

Comment construire une application pour un service web qui ne dispose pas d’API publique ? Pour la Bibliothèque de Grenoble, je vous avais expliqué que j’utilisais une web view invisible, pilotée par des commandes JavaScript, extrayant les informations des pages HTML. La situation vient de changer avec la dernière mise à jour.
#iOS #dev

Au revoir Google Analytics

Je viens de mettre à jour mes principaux sites web pour retirer Google Analytics.
#dev #web

Renommer « master » en « main »

Cette semaine, j’ai renommé les branches principales de tous mes repos, remplaçant les « master » par des « main ».
#dev

ListFormatter

Les Formatters sont des classes bien utiles. Dernière amélioration remarquable : l’ajout de ListFormatter avec iOS 13.
#dev #iOS

App Clip pour Air Grenoble

« App Clip » était annoncé comme l’une des grandes nouveautés d’iOS 14. Depuis la keynote aux multiples sessions WWDC, en passant par sa mise en avant dans App Store Connect, Apple a tout fait pour encourager son utilisation.
#dev #iOS

Adapter une application iOS pour le Mac avec Catalyst

On peut réellement porter une application iOS sur le Mac en cochant une case dans Xcode. C’est la promesse de Catalyst, qui implémente UIKit sur macOS, pour permettre de compiler un projet mobile en application Mac.
#dev #macOS

En première page du Mac App Store

Depuis un mois, mon application Comic Book Day est sur la page d’accueil du Mac App Store.
#dev #macOS

Air Grenoble avec widget iOS 14

La dernière mise à jour d’Air Grenoble apporte un widget iOS 14. Vous pouvez ainsi afficher la qualité de l’air sur votre écran d’accueil.
#dev #iOS

Comic Book Day pour Mac avec synchronisation iCloud

Je viens de publier Comic Book Day 2.0. Mise à jour majeure ! Au programme : une version Mac et la synchronisation iCloud.
#dev #iOS #macOS

Memorii pour Mac avec synchronisation iCloud

Memorii est maintenant disponible sur le Mac App Store, avec synchronisation iCloud des données entre iPhone, iPad et Mac.
#dev #macOS #iOS

Air Grenoble pour Mac

Air Grenoble est maintenant disponible sur le Mac App Store. Vous pouvez ainsi consulter la qualité de l’air depuis votre ordinateur.
#dev #macOS

Notes WWDC 2020 : iOS pickers, menus and actions

Mes notes pour les sessions dédiées aux « iOS pickers, menus and actions » de la WWDC 2020.
#dev #iOS

Notes WWDC 2020 : Swift packages - Resources and localization

Mes notes pour la sessions WWDC 2020 « Swift packages: Resources and localization ».
#dev #iOS

Notes WWDC 2020 : Tests

Mes notes pour les sessions dédiées aux tests de la WWDC 2020 : « Write tests to fail », « Triage test failures with XCTIssue » et « XCTSkip your tests ».
#dev #iOS

Accessibilité pour Air Grenoble

Je sais bien que l’accessibilité est un sujet important, mais pour être honnête, j’y pense plutôt a posteriori, quand je suis à court d’idées pour de nouvelles fonctionnalités. Heureusement qu’il existe des initiatives comme la Journée Mondiale de Sensibilisation à l’Accessibilité pour me secouer un peu.
#dev #iOS

Mode sombre au lancement pour une application compatible iOS 10

Un écran de lancement iOS doit passer par un storyboard avec uniquement des classes de base. Et si votre projet supporte encore iOS 10, un asset catalog ne peut pas inclure des couleurs personnalisées. Tout cela signifie a priori qu’il est impossible de supporter le mode sombre au lancement. Flash blanc aveuglant garanti à chaque fois.
#dev #iOS

Champ de recherche avec jetons iOS 13

La dernière mise à jour de Games Keeper ajoute la possibilité de chercher dans l’historique des parties. Vous pouvez chercher le nom d’un joueur ou le titre de la partie. Pour aller plus vite, la liste complète des joueurs et des titres est affichée en dessous du champ de recherche.
#dev #iOS

Explorer une application iPad au clavier

Les nouveautés du SDK iOS 13.4 ont ravivé mon intérêt pour la prise en charge du clavier.
#dev #iOS

Actualiser une complication Apple Watch à intervalles réguliers

Une bonne complication Apple Watch doit être actualisée aussi souvent que nécessaire pour garder l’information toujours fraîche, mais aussi rarement que possible pour économiser la batterie.
#dev #watchOS

SF Symbols et l’icône des Réglages

Les SF Symbols sont une collection d’icônes standardisées pour iOS 13, mise à disposition par Apple pour les applications tierces. J’apprécie énormément de pouvoir les inclure dans mes propres applications, me débarrassant au passage des alternatives plus ou moins satisfaisantes que j’utilisais jusqu’à présent. Il y a juste un problème.
#dev #iOS

Tester et déballer un optionnel avec XCTUnwrap

Xcode 11 facilite la manipulation des optionnels dans les tests unitaires en introduisant une nouvelle fonction : XCTUnwrap.
#dev #Swift

Notifications avec autorisation provisoire

Les notifications ont une importance particulière. iOS offre aux utilisateurs de nombreuses options pour les contrôler, mais tout repose sur la fameuse question : « Autorisez-vous cette application à vous envoyer des notifications ? »
#dev #iOS

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 : 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 : 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 : 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