检查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) | 预定义条件
CPUARM
由DCCIOSARM 编译器(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