13 votes

Comment détecter si une application iOS s'exécute sur un Mac M1?

Je propose une application iOS sur l'App Store. Avec le lancement des Macs M1 d'Apple, il est possible d'exécuter des applications iOS sur macOS. Je veux empêcher que mon application ne soit utilisée sur macOS, par exemple en lançant une exception après le lancement ou en appelant exit(0) ultérieurement.

Comment puis-je détecter que l'application s'exécute sur un Mac M1 ?

Dans une certaine mesure, les applications iOS s'exécutant sur Macs semblent se signaler elles-mêmes comme des iPads, ce qui exclut certaines méthodes courantes d'identification de l'appareil.

Quelques détails pour fournir du contexte :

  1. J'ai déjà retiré l'application du Mac App Store sur App Store Connect.

  2. L'application est conçue et optimisée pour les écrans tactiles. La version actuelle offrirait une expérience utilisateur très mauvaise lorsqu'elle est exécutée sur macOS. Cela nécessiterait de nombreux changements et beaucoup d'efforts pour en faire une bonne application Mac. Je n'ai aucun plan, encore moins les ressources pour le faire.

  3. En surface, cela pourrait ressembler à la question "Comment puis-je détecter si mon application s'exécute sur un appareil jailbreaké ?". Techniquement, cela pourrait être correct, et je comprends qu'il n'est généralement pas conseillé de mettre en place une détection des jailbreaks pour prévenir les piratages d'IAP, etc. Une différence importante est qu'Apple tente activement de prévenir les jailbreaks et décourage fortement les utilisateurs de le faire, ce qui semble maintenir la communauté des jailbreaks assez petite et en dehors du mainstream, mais d'un autre côté, Apple veut évidemment avoir le plus grand nombre possible d'applications iOS disponibles sur les Macs. Il est actuellement très facile d'exécuter des applications iOS sur des Macs, même si elles ne sont pas proposées dans le Mac App Store. Il existe des instructions sur des blogs technologiques populaires comme MacRumors et 9to5mac. Je veux m'assurer qu'au moins cette méthode facile d'exécuter l'application sur un Mac est empêchée.

  4. De nombreux détails d'implémentation dans cette application ont été développés en supposant que l'application ne s'exécutera jamais que dans un bac à sable iOS auquel les utilisateurs n'ont pas un accès facile. Maintenant, il est probablement beaucoup plus facile pour les utilisateurs d'exécuter l'application avec des ressources modifiées, des paramètres utilisateur ou des contenus de répertoires comme Application Support, y compris des fichiers que je supposais être toujours immuables. Si les utilisateurs trouvent un moyen d'accéder au contenu de l'application qui nécessite normalement des achats intégrés ou des abonnements, par exemple en falsifiant des fichiers .plist ou en renommant des fichiers de ressources de manière inattendue, c'est un véritable risque commercial.

23voto

LGP Points 2619

Le framework d'Apple vous permet de détecter si l'application s'exécute en tant qu'application iOS sur Mac en utilisant le drapeau d'informations de processus isiOSAppOnMac.

Ce drapeau est disponible à partir d'iOS 14.0 et doit donc être encapsulé pour ne s'exécuter que sur ces versions. Notez que puisque la version 14.0 est également la première version pour iOS sur Mac, vous pouvez supposer en toute sécurité qu'elle ne peut pas fonctionner sur un Mac si la version est antérieure à 14.0.

// Swift
var isiOSAppOnMac = false
if #available(iOS 14.0, *) {
    isiOSAppOnMac = ProcessInfo.processInfo.isiOSAppOnMac
}
print("\(isiOSAppOnMac ? "iOS app on Mac" : "not iOS on Mac")!")

Ou si vous préférez Objective-C :

// Objective-C
BOOL isiOSAppOnMac = false;
if (@available(iOS 14.0, *)) {
    isiOSAppOnMac = [NSProcessInfo processInfo].isiOSAppOnMac;
}
NSLog(@"%@", isiOSAppOnMac ? @"iOS app on Mac" : @"not iOS app on Mac");

Référence : Apple : Exécuter vos applications iOS sur macOS

-1voto

siiiiiix Points 89

Votre question a les sous-questions suivantes.

  1. Comment ne pas permettre à mon application iOS d'être disponible sur Mac quand ?

Si vous souhaitez limiter votre application pour qu'elle ne soit téléchargeable que sur des appareils iOS et non pas sur des appareils macOS, vous pouvez désactiver la disponibilité de Mac pour votre application dans App Store Connect. Apprenez-en plus

  1. Comment savoir si mon application iOS fonctionne sous macOS alimenté par M1 ?

Vous devez obtenir des informations sur le CPU et cette question a déjà été posée et a une bonne réponse ici

-3voto

Medhi Points 788

Pour vérifier si une application s'exécute en mode iOS sur un Mac Apple Silicon (comme le M1), vous devez vérifier la nouvelle variable disponible UNIQUEMENT pour iOS 14+ :

Objective-c :

if (@available(iOS 14.0, *) && [NSProcessInfo processInfo].isiOSAppOnMac) {
    // sur Mac
}

Swift :

if #available(iOS 14.0, *), ProcessInfo.processInfo.isiOSAppOnMac {
    // sur Mac
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X