Based on this link Conditional compilation (Delphi) CPUARM conditional if should be false for Simulator and true for device, the problem is it's not working for me.
I am using Delphi XE6, iOS Simulator 7.1
This is my code
{$IFDEF CPUARM}
s := 'iOS device';
{$ELSE}
s := 'iOS Simulator';
{$ENDIF}
p.s iOS Simulator is running in a VMWare virtual machine.
Checking for CPUARM
is the correct solution. iOS binaries compiled for the simulator are not ARM, they are actually x86. Just make sure to wrap your iOS code with {$IFDEF IOS}
:
{$IFDEF IOS}
{$IFDEF CPUARM}
s := 'iOS device';
{$ELSE}
s := 'iOS Simulator';
{$ENDIF}
{$ENDIF}
Delphi uses an ARM compiler for iOS devices, but uses an x86 compiler for the iOS simulator.
The available compiler conditionals are documented on Embarcadero's DocWiki:
Conditional compilation (Delphi) | Predefined Conditionals
CPUARM
is defined by the DCCIOSARM compiler (iOS device).
CPU386
and CPUX86
are defined by the DCCIOS32 compiler (iOS simulator).
A look at the conditional values that are physically present in XE6's DCCIOSARM.EXE and DCCIOS32.EXE executable files confirms that:
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
I found a workaround for this problem:
I defined a ISSIM
condition for ALL Configuration - IOS Simulator Platform
in Project->Options page , then I checked that via this
{$IFDEF ISSIM}
s := 'iOS Simulator';
{$ELSE}
s := 'iOS device';
{$ENDIF}
来源:https://stackoverflow.com/questions/23803023/how-to-check-if-the-app-is-running-on-ios-device-or-simulator-in-delphi-xe6