基于此链接Conditional compilation (Delphi) CPUARM条件if对于Simulator应该为false而对于设备应该为true,问题是它对我不起作用。
我正在使用Delphi XE6, iOS Simulator 7.1
这是我的代码
{$IFDEF CPUARM}
s := 'iOS device';
{$ELSE}
s := 'iOS Simulator';
{$ENDIF}
p.s iOS模拟器正在VMWare虚拟机中运行。
答案 0 :(得分:6)
检查CPUARM
是正确的解决方案。为模拟器编译的iOS二进制文件不是ARM,它们实际上是x86。只需确保使用{$IFDEF IOS}
包装您的iOS代码:
{$IFDEF IOS}
{$IFDEF CPUARM}
s := 'iOS device';
{$ELSE}
s := 'iOS Simulator';
{$ENDIF}
{$ENDIF}
Delphi对iOS设备使用ARM编译器,但在iOS模拟器中使用x86编译器。
可用的编译器条件记录在Embarcadero的DocWiki:
中Conditional compilation (Delphi) | Predefined Conditionals
CPUARM
由DCCIOSARM compiler(iOS设备)定义。
CPU386
和CPUX86
由DCCIOS32 compiler(iOS模拟器)定义。
查看XE6的DCCIOSARM.EXE和DCCIOS32.EXE可执行文件中实际存在的条件值,确认:
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
答案 1 :(得分:-1)
我找到了解决此问题的方法:
我在Project->选项页面中为ISSIM
定义了ALL Configuration - IOS Simulator Platform
条件,然后我通过此检查了
{$IFDEF ISSIM}
s := 'iOS Simulator';
{$ELSE}
s := 'iOS device';
{$ENDIF}