Vérification des CPUARM
est la bonne solution. Les binaires iOS compilés pour le simulateur ne sont pas ARM, ils sont en fait x86. Assurez-vous d'envelopper votre code iOS avec {$IFDEF IOS}
:
{$IFDEF IOS}
{$IFDEF CPUARM}
s := 'iOS device';
{$ELSE}
s := 'iOS Simulator';
{$ENDIF}
{$ENDIF}
Delphi utilise un compilateur ARM pour les appareils iOS, mais utilise un compilateur x86 pour le simulateur iOS.
Les conditionals du compilateur disponibles sont documentés sur docwiki Embarcadero:
Conditional compilation (Delphi) | Predefined Conditionals
CPUARM
est défini par le DCCIOSARM compiler (iOS).
CPU386
et CPUX86
sont définis par le DCCIOS32 compiler (simulateur iOS).
Un regard sur les valeurs conditionnelles qui sont physiquement présents dans les fichiers exécutables DCCIOSARM.EXE et DCCIOS32.EXE de XE6 confirme que:
DCCIOSARM.EXE:
**CPUARM**
DCC
NEXTGEN
AUTOREFCOUNT
WEAKINSTREF
WEAKINTFREF
WEAKREF
EXTERNALLINKER
NATIVECODE
POSIX
POSIX32
MACOS
MACOS32
**IOS**
VER270
CONSOLE
BCB
PIC
UNICODE
CONDITIONALEXPRESSIONS
DCCIOS32.EXE:
**CPU386**
**CPUX86**
DCC
NEXTGEN
AUTOREFCOUNT
WEAKINSTREF
WEAKINTFREF
WEAKREF
NATIVECODE
POSIX
POSIX32
MACOS
MACOS32
**IOS**
ALIGN_STACK
UNDERSCOREIMPORTNAME
PC_MAPPED_EXCEPTIONS
ASSEMBLER
VER270
CONSOLE
BCB
PIC
UNICODE
CONDITIONALEXPRESSIONS
Vous devez toujours ajouter la balise 'delphi' commune à vos questions relatives à Delphi. Peut-être que vous vous demandiez la faible attention accordée à vos questions. C'est la raison: o) –
@SirRufo Merci mec;) – RezaRahmati
@RobKennedy, en fait, non. Le simulateur iOS n'exécute pas le même fichier binaire que celui qui est déployé sur les appareils iOS. Le simulateur exécute le code compilé x86, pas le code compilé ARM. Ce n'est donc pas une compilation unique. La vérification de CPUARM est la manière correcte de différencier un appareil iOS et un simulateur iOS. –