【问题标题】:How to check if the app is running on iOS device or simulator in Delphi XE6如何在 Delphi XE6 中检查应用程序是否在 iOS 设备或模拟器上运行
【发布时间】:2014-07-11 06:23:45
【问题描述】:

基于此链接Conditional compilation (Delphi) CPUARM 条件 if 对于模拟器应为 false,对于设备应为 true,问题是它对我不起作用。 我正在使用Delphi XE6, iOS Simulator 7.1

这是我的代码

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

p.s iOS 模拟器在 VMWare 虚拟机中运行。

【问题讨论】:

  • 您应该总是将常见的delphi 标签添加到与Delphi 相关的问题中。也许您想知道对您的问题的关注度很低。这就是原因:o)
  • @SirRufo 谢谢老兄;)
  • @RobKennedy,实际上,没有。 iOS 模拟器不运行部署到 iOS 设备的相同二进制文件。模拟器运行 x86 编译代码,而不是 ARM 编译代码。所以它不是一个单一的编译。检查 CPUARM 是区分 iOS 设备和 iOS 模拟器的正确方法。

标签: delphi delphi-xe6


【解决方案1】:

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

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

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

【讨论】:

  • 不需要自己定义值,现有的编译器条件就足够了。
【解决方案2】:

检查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

【讨论】:

  • 我检查了文档,并在您编写时使用了 CPUARM 和 IOS,但令人惊讶的是它不起作用。
  • 我向你保证,确实如此。在为 iOS 模拟器编译时,不可能定义 CPUARM,除非项目中的其他内容手动定义它。正如您在我的回答中看到的那样,CPUARM 在 DCCIOS32 中实际上并不存在。
猜你喜欢
  • 1970-01-01
  • 2021-07-15
  • 2011-08-12
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 2016-02-19
  • 2012-09-12
相关资源
最近更新 更多