基于此链接条件编译(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虚拟机中运行.
检查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上:
CPUARM由DCCIOSARM编译器(iOS设备)定义.
CPU386和CPUX86由定义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)
