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

Rez*_*eza 7 delphi delphi-xe6

基于此链接条件编译(Delphi) CPUARM条件,如果模拟器应为false,设备为true,问题是它对我不起作用.我在用Delphi XE6, iOS Simulator 7.1

这是我的代码

    {$IFDEF CPUARM}
s := 'iOS device';
    {$ELSE}
s := 'iOS Simulator';
    {$ENDIF}
Run Code Online (Sandbox Code Playgroud)

ps iOS模拟器正在VMWare虚拟机中运行.

Rem*_*eau 7

检查CPUARM是正确的解决方案.为模拟器编译的iOS二进制文件不是ARM,它们实际上是x86.只需确保用以下内容包装您的iOS代码{$IFDEF IOS}:

{$IFDEF IOS}
  {$IFDEF CPUARM}
s := 'iOS device';
  {$ELSE}
s := 'iOS Simulator';
  {$ENDIF}
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

Delphi对iOS设备使用ARM编译器,但在iOS模拟器中使用x86编译器.

可用的编译器条件记录在Embarcadero的DocWiki上:

条件编译(Delphi)| 预定义条件

CPUARMDCCIOSARM编译器(iOS设备)定义.

CPU386CPUX86由定义DCCIOS32编译器(iPhone模拟器).

查看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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


Rez*_*eza -1

我找到了解决这个问题的方法:

我在 Project->Options page 中定义了一个ISSIM条件ALL Configuration - IOS Simulator Platform,然后我通过此检查

    {$IFDEF ISSIM}
s := 'iOS Simulator';
    {$ELSE}
s := 'iOS device';
    {$ENDIF}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述