Ces dernières semaines, des développeurs ont eu un problème bizarre : des applications ont été rejetées par la validation de l'App Store (iOS ou macOS). La raison peut sembler un peu étonnante : une modification dans le code source de Python a ajouté une fonction qui semble problématique pour la validation d'Apple.
Le problème de cette version 3.12, qui peut être intégrée directement dans les applications, est qu'elle contient une fonction pour gérer les URL de type itms-services://
. Pour résumer, ce type d'adresse permet d'installer une application depuis l'App Store et Apple interdit explicitement ce type d'action dans une application distribuée sur un de ses App Store.
Le problème, dans le cas présent, est double. Premièrement, intégrer une bibliothèque qui va prendre en charge les adresses de ce type n'implique pas que l'application va le faire. Deuxièmement, et c'est ce qui est reproché à Apple, la validation automatique — en cause ici — est trop stricte. Russell Keith-Magee, un des développeurs de CPython (une implémentation courante du langage) explique bien le souci : la validation d'Apple n'est pas documentée, tout en étant extrêmement stricte.
La solution choisie n'est par ailleurs qu'un pis-aller : un paramètre à ajouter au moment de la configuration (--with-app-store-patch
) pour supprimer la fonction incriminée. Elle est activée par défaut sous iOS et est optionnelle avec les autres systèmes, mais est recommandée sous macOS si vous comptez distribuer une application sur le Mac App Store.
Ce bug (qui n'en est pas vraiment un) montre encore une fois que si la sécurité d'Apple est globalement bonne — ce qui n'empêche pas par ailleurs la distribution d'applications malicieuses dans les faits —, elle est surtout opaque et peu compatible avec l'open source dans la pratique, dans le sens où les développeurs n'ont pas nécessairement le temps ou l'envie d'essayer de comprendre les limitations arbitraires d'Apple. Et comme Joe Brockmeier l'indique, ce n'est probablement pas la dernière fois que le problème se pose.