如何检查应用程序是否在Delphi XE6中的iOS设备或模拟器上运行

时间:2014-05-22 09:37:43

标签: delphi delphi-xe6

基于此链接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虚拟机中运行。

2 个答案:

答案 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

CPUARMDCCIOSARM compiler(iOS设备)定义。

CPU386CPUX86DCCIOS32 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}

enter image description here