Je veux vérifier si l'utilisateur exécute l'application sur iOS moins de 5.0 et afficher une étiquette dans l'application.
Comment détecter par programme quel iOS s'exécute sur le périphérique de l'utilisateur?
Merci!
Meilleure version actuelle , sans avoir à traiter de recherche numérique dans NSString, c'est définir macros
(Voir la réponse d'origine: Check iPhone Version iOS )
Ces macros existent dans github, voir: https://github.com/carlj/CJAMacros/blob/master/CJAMacros/CJAMacros.h
Comme ça:
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
et les utiliser comme ceci:
if (SYSTEM_VERSION_LESS_THAN(@"5.0")) {
// code here
}
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
// code here
}
pour obtenir la version du système d'exploitation:
[[UIDevice currentDevice] systemVersion]
renvoie la chaîne, qui peut être transformée en int/float via
-[NSString floatValue]
-[NSString intValue]
comme ça
Les deux valeurs (floatValue, intValue) seront supprimées en raison de son type, la version 5.0.1 deviendra 5.0 ou 5 (float ou int). Pour comparer avec précision, vous devrez la séparer en un tableau de réponses acceptées par le contrôle INT ici: - Vérifier la version iPhone iOS
NSString *ver = [[UIDevice currentDevice] systemVersion];
int ver_int = [ver intValue];
float ver_float = [ver floatValue];
et comparer comme ça
NSLog(@"System Version is %@",[[UIDevice currentDevice] systemVersion]);
NSString *ver = [[UIDevice currentDevice] systemVersion];
float ver_float = [ver floatValue];
if (ver_float < 5.0) return false;
Pour la syntaxe Swift 4.0
l'exemple ci-dessous vérifie simplement si le périphérique est de version iOS11
ou supérieure.
let systemVersion = UIDevice.current.systemVersion
if systemVersion.cgFloatValue >= 11.0 {
//"for ios 11"
}
else{
//"ios below 11")
}
Depuis iOS 8, nous pouvons utiliser la nouvelle méthode isOperatingSystemAtLeastVersion
sur NSProcessInfo
NSOperatingSystemVersion ios8_0_1 = (NSOperatingSystemVersion){8, 0, 1};
if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:ios8_0_1]) {
// iOS 8.0.1 and above logic
} else {
// iOS 8.0.0 and below logic
}
Attention, cela va planter sur iOS 7, car l'API n'existait pas avant iOS 8. Si vous utilisez iOS 7 ou une version antérieure, vous pouvez effectuer le contrôle en toute sécurité avec
if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)]) {
// conditionally check for any version >= iOS 8 using 'isOperatingSystemAtLeastVersion'
} else {
// we're on iOS 7 or below
}
Par souci d'exhaustivité, voici une approche alternative proposée par Apple lui-même dans le iOS 7 Guide de transition de l'interface utilisateur , qui consiste à vérifier la version de Foundation Framework.
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
// Load resources for iOS 6.1 or earlier
} else {
// Load resources for iOS 7 or later
}
Je sais que je suis trop tard pour répondre à cette question. Je ne suis pas sûr que ma méthode fonctionne toujours sur les versions iOS faibles (<5.0):
NSString *platform = [UIDevice currentDevice].model;
NSLog(@"[UIDevice currentDevice].model: %@",platform);
NSLog(@"[UIDevice currentDevice].description: %@",[UIDevice currentDevice].description);
NSLog(@"[UIDevice currentDevice].localizedModel: %@",[UIDevice currentDevice].localizedModel);
NSLog(@"[UIDevice currentDevice].name: %@",[UIDevice currentDevice].name);
NSLog(@"[UIDevice currentDevice].systemVersion: %@",[UIDevice currentDevice].systemVersion);
NSLog(@"[UIDevice currentDevice].systemName: %@",[UIDevice currentDevice].systemName);
Vous pouvez obtenir ces résultats:
[UIDevice currentDevice].model: iPhone
[UIDevice currentDevice].description: <UIDevice: 0x1cd75c70>
[UIDevice currentDevice].localizedModel: iPhone
[UIDevice currentDevice].name: Someones-iPhone002
[UIDevice currentDevice].systemVersion: 6.1.3
[UIDevice currentDevice].systemName: iPhone OS
[[UIDevice currentDevice] systemVersion]
[[UIDevice currentDevice] systemVersion];
ou vérifiez la version comme
Vous pouvez obtenir les macros ci-dessous de ici .
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(IOS_VERSION_3_2_0))
{
UIImageView *background = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cs_lines_back.png"]] autorelease];
theTableView.backgroundView = background;
}
J'espère que cela t'aides
[[[UIDevice currentDevice] systemVersion] floatValue]
Marek Sebera est génial la plupart du temps, mais si vous êtes comme moi et trouvez que vous devez vérifier la version iOS plus souvent, vous ne souhaitez pas exécuter en permanence une macro en mémoire, car vous subirez un très léger ralentissement, en particulier sur les appareils plus anciens.
Au lieu de cela, vous souhaitez calculer la version iOS comme une seule fois et la stocker quelque part. Dans mon cas, j’utilise la classe singleton GlobalVariables
que j’utilise pour vérifier la version iOS dans mon code à l’aide d’un code comme celui-ci:
if ([GlobalVariables sharedVariables].iOSVersion >= 6.0f) {
// do something if iOS is 6.0 or greater
}
Pour activer cette fonctionnalité dans votre application, utilisez ce code (pour iOS 5+ utilisant ARC):
GlobalVariables.h:
@interface GlobalVariables : NSObject
@property (nonatomic) CGFloat iOSVersion;
+ (GlobalVariables *)sharedVariables;
@end
GlobalVariables.m:
@implementation GlobalVariables
@synthesize iOSVersion;
+ (GlobalVariables *)sharedVariables {
// set up the global variables as a static object
static GlobalVariables *globalVariables = nil;
// check if global variables exist
if (globalVariables == nil) {
// if no, create the global variables class
globalVariables = [[GlobalVariables alloc] init];
// get system version
NSString *systemVersion = [[UIDevice currentDevice] systemVersion];
// separate system version by periods
NSArray *systemVersionComponents = [systemVersion componentsSeparatedByString:@"."];
// set ios version
globalVariables.iOSVersion = [[NSString stringWithFormat:@"%01d.%02d%02d", \
systemVersionComponents.count < 1 ? 0 : \
[[systemVersionComponents objectAtIndex:0] integerValue], \
systemVersionComponents.count < 2 ? 0 : \
[[systemVersionComponents objectAtIndex:1] integerValue], \
systemVersionComponents.count < 3 ? 0 : \
[[systemVersionComponents objectAtIndex:2] integerValue] \
] floatValue];
}
// return singleton instance
return globalVariables;
}
@end
Vous pouvez maintenant vérifier facilement la version iOS sans exécuter de macros en permanence. Notez en particulier comment j'ai converti le [[UIDevice currentDevice] systemVersion]
NSString en un CGFloat accessible en permanence sans utiliser aucune des méthodes inappropriées déjà mentionnées sur cette page. Mon approche suppose que la chaîne de la version est au format n.nn.nn (permettant l’absence de bits ultérieurs) et fonctionne pour iOS5 +. Lors des tests, cette approche est beaucoup plus rapide que l’exécution constante de la macro.
J'espère que cela aide les personnes confrontées au problème que j'ai rencontré!
Pour obtenir des informations plus spécifiques sur le numéro de version avec les versions majeure et mineure séparées:
NSString* versionString = [UIDevice currentDevice].systemVersion;
NSArray* vN = [versionString componentsSeparatedByString:@"."];
Le tableau vN
contiendra les versions majeure et mineure sous forme de chaînes, mais si vous souhaitez effectuer des comparaisons, les numéros de version doivent être stockés sous forme de nombres (ints). Vous pouvez ajouter ce code pour les stocker dans le tableau C * versionNumbers
:
int versionNumbers[vN.count];
for (int i = 0; i < sizeof(versionNumbers)/sizeof(versionNumbers[0]); i++)
versionNumbers[i] = [[vN objectAtIndex:i] integerValue];
* Les tableaux C sont utilisés ici pour une syntaxe plus concise.
Dans MonoTouch:
Pour obtenir la version majeure, utilisez:
UIDevice.CurrentDevice.SystemVersion.Split('.')[0]
Pour les versions mineures, utilisez:
UIDevice.CurrentDevice.SystemVersion.Split('.')[1]
Une vérification simple pour la version iOS inférieure à 5 (toutes les versions):
if([[[UIDevice currentDevice] systemVersion] integerValue] < 5){
// do something
};