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

5m1hhzi4  于 2023-03-18  发布在  iOS
关注(0)|答案(2)|浏览(214)

基于此链接条件编译( Delphi )CPUARM条件if对于模拟器应为false,对于设备应为true,问题是它对我不起作用。
这是我的密码

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

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

qaxu7uf2

qaxu7uf21#

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

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

Delphi 在iOS设备上使用ARM编译器,但在iOS模拟器上使用x86编译器。
Embarcadero的DocWiki上记录了可用的编译器条件:
条件编译( Delphi )|预定义条件
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

更新:从 Delphi 11.2开始,基于ARM的iOS模拟器现在可以通过新的DCCIOSSIMARM64编译器来支持,您可以使用IOSSIMULATOR条件来检查该编译器:

{$IFDEF IOS}
  {$IFDEF CPUARM}
    {$IFDEF IOSSIMULATOR}
s := 'iOS Simulator (ARM)';
    {$ELSE}
s := 'iOS device';
    {$ENDIF}
  {$ELSE}
s := 'iOS Simulator (x86)';
  {$ENDIF}
{$ENDIF}
pinkon5k

pinkon5k2#

我找到了解决此问题的方法:
我在项目-〉选项页面中为ALL Configuration - IOS Simulator Platform定义了一个ISSIM条件,然后我通过以下方式检查了它

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

相关问题