7

基于此链接Conditional compilation (Delphi) CPUARM conditional if should be false for Simulator and true for device,问题是它对我不起作用。我在用Delphi XE6, iOS Simulator 7.1

这是我的代码

    {$IFDEF CPUARM}
s := 'iOS device';
    {$ELSE}
s := 'iOS Simulator';
    {$ENDIF}

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

4

2 回答 2

8

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

{$IFDEF IOS}
  {$IFDEF CPUARM}
s := 'iOS device';
  {$ELSE}
s := 'iOS Simulator';
  {$ENDIF}
{$ENDIF}

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

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

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

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

CPU386并由DCCIOS32 编译器(iOS 模拟器)CPUX86定义。

查看 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
于 2014-05-22T15:17:57.400 回答
-1

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

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

    {$IFDEF ISSIM}
s := 'iOS Simulator';
    {$ELSE}
s := 'iOS device';
    {$ENDIF}

在此处输入图像描述

于 2014-05-22T10:03:42.353 回答