Vous souhaitez savoir ce que vous prépare Apple et Google à la rentrée et prévoir les impacts sur vos applications applications mobile. le rapport de prévention Niji 2023 sur iOS et Android est disponible.
2. Rapport de prévention iOS
2023
Sommaire
Nouveautés pour les éditeur
Nouveautés pour les développeurs
3. Introduction
iOS 17 sera probablement proposé en téléchargement pour le grand
public à partir de la mi-septembre 2023.
Une majorité des nouveautés concerne des produits ou services
proposés par Apple (nous vous invitons à consulter le lien ci-dessous
pour avoir le détail), mais nous allons nous focaliser ici sur les
nouveautés les plus pertinentes pour les éditeurs d'applications et
pour les développeurs.
https://www.apple.com/fr/ios/ios-17-preview/
5. iOS 17 - support
Liste des iPhones supportés
• iPhone 14
• iPhone 14 Plus
• iPhone 14 Pro
• iPhone 14 Pro Max
• iPhone 13
• iPhone 13 mini
• iPhone 13 Pro
• iPhone 13 Pro Max
• iPhone 12
• iPhone 12 mini
• iPhone 12 Pro
• iPhone 12 Pro Max
• iPhone 11
• iPhone 11 Pro
• iPhone 11 Pro Max
• iPhone XS
• iPhone XS Max
• iPhone XR
• iPhone SE (2e génération)
Les nouvelles version des outils fournies par Apple (qu'il faudra bien intégrer) ne permettront plus le
support des versions d'iOS inférieures à 12.
6. iOS 17 - nouveautés notables
Les widgets interactifs
Description
- Les widgets peuvent inclure des boutons pour offrir des fonctionnalités
sans lancer l'application.
Par exemple, un widget "Reminders" qui permettrai aux utilisateurs de
marquer une tâche comme terminée directement sans lancer
l'application
- Les "live activities" (introduites sur iOS 16) pourront également inclure
de l'interactivité
7. iOS 17 - nouveautés notables
Nouveautés pour les achats intégrés
Description
- La nouvelle version d'iOS propose des solutions pour afficher très
rapidement, sans intégration ou presque, des éléments d'UX/UI pour la
gestion des achats intégrés
- Elle propose également d'afficher une page qui va gérer
automatiquement l'affichage des différents achats intégrés proposés
par l'application
- Apple a revu l'intégration des achats intégrés dans ses différents
environnements (Xcode, Testflight, etc) pour faciliter le test et le
développement
8. Apple Vision Pro
https://www.apple.com/apple-vision-pro/
Apple a présenté son casque de réalité virtuelle / augmentée
Description
- La réalité augmentée pour le monde professionnel
o Espace de travail virtuel où les fenêtres peuvent être
organisées en trois dimensions
o Télétravail et conférences
- La réalité augmentée pour le divertissement
o Ecran de cinéma virtuel
o Expériences immersives
10. Xcode 15
Pour les développeurs
- Téléchargement plus léger : les environnements sont téléchargés seulement en
fonction des besoins au lancement
- Plus grande intégration avec l'API Apple : gestion des capabilities depuis Xcode, etc
- Ajout de la possibilité de créer des rapports sur l'usage de la confidentialité dans une
application
- Amélioration du code completion
- Le mode preview est disponible pour SwiftUI mais aussi pour UIKit, WidgetKit et
AppKit
- Amélioration de la gestion de la documentation (preview, utilisation de vidéos, etc)
XCode 15 ne permettra plus le support des versions d'iOS inférieures à 12
https://developer.apple.com/documentation/updates/xcode
11. SwiftUI - MapKit
Pour les développeurs
Nouveautés et enrichissement au niveau de l'API MapKit pour SwiftUI
• Styles
• Annotations and overlays
• Map controls
• Look around
https://developer.apple.com/documentation/mapkit/mapkit_for_swiftui
12. SwiftUI - SwiftData
Pour les développeurs
Nouvelle fonctionnalité introduite pour persister des données.
C'est à CoreData ce que SwiftUI est à UIKit.
• Models en déclaratif
• Directement compatible avec SwiftUI
• Les models sont automatiquement des observables
Ce n'est pas un wrapper de CoreData mais plutôt une évolution sur un moteur commun
https://developer.apple.com/documentation/swiftdata
13. SwiftUI - ContentUnavailableView
Pour les développeurs
Apple propose désormais une interface unifiée pour l'affichage
des pages qui n'aurait pas de contenu.
Cette interface est affichable avec juste une seule ligne de code et
propose une expérience unifiée.
https://developer.apple.com/documentation/swiftui/contentunavailableview
14. Pour les développeurs
La plateforme d'Apple Vision Pro pour concevoir et créer un tout nouvel
univers d'applications et de jeux.
L'expérience est articulée autour de trois briques :
- Windows : les différentes vues 2D (fenêtres)
- Volumes : les différentes vues 3D
- Spaces : l'environnement, partagé (autres apps) ou non
A l'instar de tvOS, watchOS, etc, un projet visionOS est codé via Xcode et
peut être intégré à un projet multi-cibles.
https://developer.apple.com/documentation/visionos
visionOS
15. Liste exhaustive de toutes les nouveautés
Pour les développeurs
Vous pourrez retrouver une liste exhaustive de toutes les nouveautés
en suivant le lien ci-dessous.
https://developer.apple.com/documentation/updates/wwdc2023
17. Introduction
À l’instar des anciennes versions d’Android, le développement
d’Android 14.0 est découpé en différentes phases :
- Phase de prise en main pour les développeurs ;
- MAJ beta ;
- MAJ stables.
Actuellement la version actuelle est en version beta.
La version finale devrait être prévue pour la rentrée.
19. Nouveautés
Automatisation des préférences linguistiques par application
(Android 13.0)
Description
- Génération automatique du fichier localeConfig de l’app à partir des
ressources du projet et référencement automatique dans le Manifest.
https://developer.android.com/about/versions/14/features#app-languages
- MAJ dynamiques du fichier localeConfig en fonction des valeurs
spécifiés par l’utilisateur avec les fonctions
setOverrideLocaleConfig() et getOverrideLocaleConfig du
LocaleManager.
- Récupération des préférences linguistiques par les IME (Input
Method Editors) en utilisant getApplicationLocales()
20. Nouveautés
Introduction d’une API liée à l’inflexion grammaticale
Description
- Le français comme de nombreuses langues permettent de genrer
une conversation comme suivant :
- Masculin : “Cher Monsieur vous êtes maintenant abonné à”
- Féminin : “Chère Madame vous êtes maintenant abonnée à”
- Neutre : ou encore “Abonnement à … réalisé”.
https://developer.android.com/about/versions/14/features/grammatical-inflection
- Pour stocker les valeurs, il faut utiliser des folders strings spécifiques
comme res/values-fr-feminine/strings.xml, à l’instar des choix de
langues.
- Pour obtenir/MAJ le genre actuel, il faut utiliser les
fonctions de l’API getApplicationGrammaticalGender() et
setRequestedApplicationGrammaticalGender().
21. Nouveautés
Introduction des préférences régionales
Description
- En tant qu’utilisateur, pour renseigner ces paramètres aller
dans System > Languages & Inputs > Regional preferences
- Pour récupérer ces valeurs dans l’application, il faut utiliser des
APIs et leurs méthodes telles que getTemperatureUnit() ou
getFirstDayOfWeek().
- Afin de spécifier différents paramètres tels que l’échelle de
température, le début de la semaine, …
https://developer.android.com/about/versions/14/features#regional-preferences
22. Nouveautés
Augmentation désormais non linéaire de la taille de police
jusqu’à 200%
Description
- Pour des questions d'accessibilité, les tailles de police sont
augmentables. Afin que les textes larges ne soient pas trop
larges sur l’écran, l’augmentation ne sera plus proportionnelle
mais respectera toujours la hiérarchie mise en place (cf
image).
https://developer.android.com/about/versions/14/features#accessibility
- Android recommande d’utiliser sp pour les éléments
textuels et dp pour les paddings.
- Pour les tests, besoin d’activer les options d’accessibilité
dans Accessibility > Display size and text > Font size.
23. Nouveautés
Personnalisation de la feuille de partage (Sharesheet)
Description
- Possibilité de personnaliser les actions de la Sharesheet en
créant son propre ChooserAction.Builder en lui définissant
une liste de ChooserActions.
https://developer.android.com/about/versions/14/features#sharesheet-improvements
- Amélioration des suggestions retournées par la Sharesheet
en utilisant plus de signaux de la part des applications. Pour
indiquer à Android un signal, il faut utiliser
pushDynamicShortcut()
24. Nouveautés
Introduction d’une flèche de retour en arrière, customisable
avec des animations.
Description
- Apparition d’une flèche de retour en arrière pour rendre
l’expérience utilisateur plus intuitive et agréable.
- Le background de la flèche s’adapte au fond d’écran
de l’utilisateur.
- Possibilité de customiser l’animation avec le callback
OnPressedCallback() et ses méthodes.
https://developer.android.com/about/versions/14/features/predictive-back
- Pour tester et s’assurer du bon fonctionnement, il est
possible d’utiliser overrideActivityTransition() qui va
s’effectuer à chaque retour en arrière de l’utilisateur.
25. Nouveautés
Introduction de nouveaux PackageInstaller afin d’améliorer
l’expérience utilisateur sur le Play Store.
Description
- Requête d’installation de package avant le début du téléchargement et
non plus une fois l’apk téléchargée.
https://developer.android.com/about/versions/14/features#app-stores
- Possibilité d’obtenir la responsabilité des prochaines MAJ, afin de
s’assurer que les mises à jour proviennent du Play Store. Cela se réalise
en utilisant setRequestUpdateOwnership().
- Introduction de l’API InstallConstraints permettant de s’assurer qu’une
app n’est pas active pour la mettre à jour et ainsi ne pas gêner
l’utilisateur.
- Meilleure gestion de l’installation des splits apk. En Android il est possible
de diviser l’APK en plusieurs fichiers. La méthode setDontKillApp() permet
de s’assurer que l’application n’est pas clôturée pendant l’installation des
derniers splits.
26. Nouveautés
Introduction d’une API de détection des screenshots
Description
- L’API permet aux apps d’utiliser des callbacks et notifie
l’utilisateur de la détection du screenshot.
https://developer.android.com/about/versions/14/features/screenshot-detection
- Seulement pour les screenshots générés à partir des boutons physiques.
- Pour l’implémenter, utiliser la permission DETECT_SCREEN_CAPTURE,
s’enregistrer avec registerScreenCaptureCallback()
et utiliser Activity.ScreenCaptureCallback pour récupérer la capture.
Ne pas oublier de se désinscrire à la fin de l’activité.
- Pour que le contenu d’une page ne soit pas screenable, il faut utiliser FLAG_SECURE
27. Nouveautés
Introduction d’APIs afin d’améliorer les Path (vecteurs
graphiques)
Description
- Introduction de l’API PathIterator, permettant d’obtenir des
informations sur les paths, ce qui n’était pas possible avant.
https://developer.android.com/about/versions/14/features/graphics
- Possibilité d’interpôler des paths s’ils ont la même structure
interne, ce qui permet de créer des formes plus complexes.
Pour savoir si un path est interpolable on peut utiliser
isInterpolatable().
28. Nouveautés
MAJ OpenJDK, afin d’aligner les features Android avec celles
de la dernière version d’Open JDK LTS
Description
- MAJ d’environ 300 classes java.base en Java 17.
https://developer.android.com/about/versions/14/features/core
- Introduction de text blocks, permettant de créer des strings
littéraux multi-lignes, pour cela il faut utiliser “”” au début et à
la fin d’un string puis utiliser en fin de lignes.
- Introduction d’un pattern matching pour instance of.
- Introduction des Sealed classes, permettant de définir les interfaces et
classes qui peuvent l’étendre. Voici un exemple :
sealed interface Celestial permits Planet, Star, Comet { ... }
- La méthode java.util.UUID.fromString() effectue une vérification plus sévère
de son paramètre, possibilité d’obtenir un IllegalArgumentException.
29. Nouveautés
Mise en place d’un Bot Android Studio
Description
- Création d’un bot Android Studio fonctionnant avec l’IA et
plus précisément Codey (PaLM2) et n’est disponible qu’en
anglais.
https://developer.android.com/studio/preview/studio-bot
- Disponible dans View > Tool Windows > Studio Bot, à partir
de la version Canary.
31. La permission SCHEDULED_EXACT_ALARM est désactivée
par défaut
Description
- Concerne les nouvelles apps ciblant Android 13.0 +
https://developer.android.com/about/versions/14/behavior-changes-all#schedule-exact-alarms
- Permission permettant d’envoyer une notification à un
moment précis.
Breaking changes
32. Mise en file d’attente des context registered broadcast lorsque
l’app est en cache
Description
- Les broadcasts sont des messages envoyés entre application
ou par le système afin de faire passer des informations, ils
sont de deux types, à savoir soit liés à l’application
(manifest), soit à l’activité (context).
https://developer.android.com/about/versions/14/behavior-changes-all#pending-broadcasts-queued
- Les multiples instances de certains broadcast devront être
fusionnées.
- Ne concerne pas les manifest declared broadcast
Breaking changes
33. Les apps ne peuvent tuer que leur propre processus
background
Description
- Pour faire cela utiliser : killBackgroundProcesses()
https://developer.android.com/about/versions/14/behavior-changes-all#kill-own-background-processes
- Plus possible de mettre fin à d’autres applications. Cela
consommait plus d’énergie au redémarrage.
Breaking changes
34. Breaking changes
Augmentation du seuil d’installation d’anciennes API
Description
- La raison à ceci est que bien souvent des applications
utilisent des targetSdk faibles afin de contourner des
mesures de sécurités présentes sur les versions supérieures,
comme par exemple les permissions de sécurité.
https://developer.android.com/about/versions/14/behavior-changes-all#minimum-target-api-level
- A partir d’Android 14.0, les applications possédant un
targetSdk inférieurs à 23 ne pourront plus être installées.
35. Introduction de la variable obligatoire OWNER_PACKAGE_NAME
pour les fichiers media
Description
https://developer.android.com/about/versions/14/behavior-changes-all#media-owner-package-names
- Cette variable doit être renseignée sauf si :
- l’app qui stocke ce média a un package name
toujours visible aux autres apps
- OU l’app qui recherche ce média effectue une
recherche QUERY_ALL_PACKAGES
Breaking changes
36. L’utilisateur peut sélectionner les photos/vidéos qu’il partage avec l’app
Description
https://developer.android.com/about/versions/14/behavior-changes-all#partial-photo-video-access
- L’utilisateur peut sélectionner certains médias qu’il choisit de
partager avec une application et il pourra ensuite re-
sélectionner d’autres médias ou mettre à jour son choix.
Breaking changes
37. Sécurisation des notifications d’intention plein écran
Description
- Depuis Android 11, il est possible d’envoyer des intents plein écran lorsque le
téléphone est verrouillé en plaçant la permission
USE_FULL_SCREEN_INTENT dans le Manifest.
Breaking changes
https://developer.android.com/about/versions/14/behavior-changes-all?hl=en#secure-fsi
- La permission est maintenant révoquée pour les applications qui ne permettent
pas de passer des appels ou d’utiliser un réveil.
- La permission est toujours valide pour les utilisateurs ayant installé
l’application avant de passer sur Android 14.
- Possibilité de savoir si l’application peut passer outre la permission avec la
fonction NotificationManager.canUseFullScreenIntent, si non c’est possible de
demander à l’utilisateur la permission avec l’intent
ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT
38. Les notifications non supprimables le sont désormais
Description
https://developer.android.com/about/versions/14/behavior-changes-all#non-dismissable-notifications
- Il n’est désormais plus possible d’utiliser
Notifcation.FLAG_ONGOING_EVENT afin d’afficher des
notifications non supprimables, sauf dans les cas suivants :
- le téléphone est verrouillé ;
- si l’utilisateur clique sur clear all, afin d’éviter les
suppressions accidentelles ;
- notifications créées avec MediaStyle ;
- les cas liés à la sécurité et à la vie privée ;
- Device policy controller (DPC) et leurs packages.
Breaking changes
39. Amélioration de la visualisation des informations sur la protection des données.
Description
- Désormais plus d’affichage des informations déclarées dans
la console Google Play, avant elles n’étaient présentes que
dans la section Data Safety.
Breaking changes
https://developer.android.com/about/versions/14/changes/data-safety?hl=en
- Précisions concernant l’utilisation de certaines permissions
dans le dialogue de permission systèmes, sur le but réel des
usages.
- Notification système si l’utilisateur accepte de partager sa
localisation à une application et que celle-ci la repartage
après à un site tiers. Possibilité d’accéder à la page liée dans
Settings > Privacy.
40. Les types de foreground services (Android 10) sont désormais
obligatoires
Description
https://developer.android.com/about/versions/14/changes/fgs-types-required
- L’utilisation de foreground service implique la définition d’un type de
foreground service, correspondant au cas d’utilisation. Un foreground
service va réaliser des opérations qui vont être visibles par
l’utilisateur (exemple téléchargement).
Breaking changes
- Nouveaux types de foreground services : health, remoteMessaging,
shortService, specialUse et systemExempted.
- Besoin de les déclarer dans le Manifeste, une vérification des types
sera exécutée par le système.
- Si nous ne sommes pas dans un de ces cas, il est conseillé de changer
de logique en utilisant plutôt un WorkManager ou un user-initiated
data transfer jobs.
41. Restrictions pour les intents implicites et pendings
Description
- Les intents implicites ne sont livrés qu’aux composants exportés,
pour contacter un composant non-exporté, il est nécessaire d’utiliser
des intents explicites.
Breaking changes
- En cas de création d’un pending intent mutable qui ne spécifie aucun
composant/package, une exception sera jetée.
- Cela a pour but d’empêcher les applications malveillantes d’intercepter
des intents dédiées au système et/ou d’autres apps.
https://developer.android.com/about/versions/14/behavior-changes-14#safer-intents
42. Les context-registered receivers vont devoir indiquer s’ils seront
exportés ou non
Description
- Besoin d’utiliser les tags suivants : RECEIVER_EXPORTED et
RECEIVER_NOT_EXPORTED
Breaking changes
- Cette mesure ne concerne pas les broadcast systèmes. Ceci a pour but
de sécuriser l’app car ces récepteurs introduits dans Android 13.0
pourraient potentiellement avoir des failles
https://developer.android.com/about/versions/14/behavior-changes-14#runtime-receivers-exported
43. Sécurisation du chargement de code dynamique
Description
Breaking changes
- Il est recommandé d’éviter le plus possible de recourir au chargement
de code dynamique.
- Par mesure de sécurité les apps qui permettent le chargement de code
dynamique vont devoir posséder des fichiers en lecture seule.
- En cas de chargement dynamique d’un fichier déjà existant, il est
recommandé de le supprimer puis de le recréer en lecture seule afin
d’être sûr qu’il ne soit pas corrompu.
https://developer.android.com/about/versions/14/behavior-changes-14#safer-dynamic-code-loading
44. Protection contre la traversée de répertoire ZIP (ou ZIPSlip)
Description
Breaking changes
- Dans les archives ZIP, chaque fichier empaqueté est stocké
sous un nom complet, ce qui permet d'utiliser des caractères
spéciaux tels que des barres obliques et des points. Ce qui
permet d’écraser des fichiers de manière arbitraire.
https://developer.android.com/about/versions/14/behavior-changes-14#zip-path-traversal
- Désormais une validation est mise en place afin de déclencher
une exception pour les chemins zips contenant ‘..’ ou ‘/’.
- Possibilité de contourner cette sécurité en utilisant
dalvik.system.ZipPathValidator.clearCallback()
45. Nouvelles restrictions pour les activités launchers depuis le background
Description
Breaking changes
- Complète la liste de restrictions déjà en place afin de protéger
l’utilisateur des APIs malicieuses qui lancent des applications.
- Quand une app reçoit un pending intent, elle doit désormais valider si
elle accepte de lancer son propre launcher. Pour valider l’app doit passer
un bundle ActivityOptions contenant
setPendingIntentBackgroundActivityStartMode(MODE_BACK
GROUND_ACTIVITY_START_ALLOWED).
https://developer.android.com/about/versions/14/behavior-changes-14#background-activity-restrictions
- Quand une app visible bind un service d’une app en fond en utilisant
bindService(), l’app visible doit valider qu’elle accepte d’utiliser son
launcher pour le service. Pour ce faire elle doit passer le drapeau
BIND_ALLOW_ACTIVITY_STARTS dans bindService()
46. MAJ des restrictions non SDK
Description
Breaking changes
- Les restrictions non-SDK ont été mises à jour, il ne faut pas les utiliser et
migrer vers des API publiques ou des SDK. Il est possible de tester l’app pour
étudier si elle utilise ce type de feature.
https://developer.android.com/about/versions/14/changes/non-sdk-14
47. Restrictions concernant la gestion de compte
Description
- À l’instar d’iOS, toute application permettant de créer un compte doit
également mettre en place un processus de suppression complète
de celui-ci.
- Une URL Internet doit également être mise en place afin que
l’utilisateur puisse supprimer son compte s’il a déjà supprimé
l’application.
https://android-developers.googleblog.com/2023/04/giving-people-more-control-over-their-data.html
Breaking changes