La meilleure façon de le vérifier est de regarder embedded.mobileprovision
([[NSBundle mainBundle] pathForResource:@"embedded.mobileprovision" ofType:nil]
):
- C'est un peu une douleur à analyser car il est signé plist (PKCS#7 données signées, selon
openssl asn1parse -inform der
), mais un mauvais hack est de simplement regarder pour <plist
et </plist>
.
- Le développement comprend avec leur udid et
<key>get-task-allow</key><true/>
- Ad Hoc de distribution contient avec leur udid (et d'obtenir la tâche allow=false)
- App Store de distribution contient pas de avec leur udid.
L'autre chose que vous pouvez faire est de vérifier les droits incorporés dans le fichier exécutable (otool -l
qu'il énumère, LC_CODE_SIGNATURE
). L'analyse de ce qui est encore plus fastidieux (vous devez analyser le Mach-O-tête et de charger les commandes, et pour "universel de fichiers binaires qui sont maintenant par défaut, vous aurez besoin de vérifier les chargés d'architecture ou de toutes les architectures).
- Le développement s'appuie contiennent
<key>get-task-allow</key><true/>
- Ad Hoc et l'App Store s'appuie contiennent
<key>get-task-allow</key><false/>
Je ne pense pas que les droits de distinction entre les Ad Hoc et l'App Store construit.
En dehors de ceux-ci et le certificat est signé avec, il n'y a pas de différence entre le Développement/Ad Hoc/apps de l'App Store (il y en a quelques autres choses dans les droits/profil de configuration, mais rien de plus fiable que je peux penser).
Considérations relatives à la sécurité
Aucune de ces sont difficiles à contourner. Pour la première méthode, l'application pourrait juste "swizzle" -[NSBundle pathForResource:ofType:]
. La deuxième méthode est un peu plus difficile en fonction de ce que l'API que vous utilisez pour lire le fichier.