我有一个.ipa
,其中包含arm64
和armv
7个切片。如果我在支持arm64
和armv7
的iDevice上运行它,哪个切片将被运行时选中?
我可以通过打印NSLog
或某种方式来了解运行时已选择切片arm64
吗?
答案 0 :(得分:1)
如果您的应用程序是通过App Store下载并启用了字节代码,则iTunes连接将允许iOS设备根据您的设备架构下载相应的二进制文件。
如果您通过Xcode部署检查此选项: 它只会根据您的iOS设备架构进行编译。
如果你有NO
的选项,那么你可以测试正在运行的二进制架构:
if(sizeof(int*) == 4)
NSLog(@"32 bit arch");
else if(sizeof(int*) == 8)
NSLog(@"64 bit arch");
答案 1 :(得分:1)
根据Apple:
__LP64__
宏"和如果您有兴趣在编译时确定架构,基本上会出现以下代码(来自Google搜索):
#if __LP64__
// Being compiled for LP64 (64-bit arm64)
#else
// Being compiled for ILP32 (32-bit armv7)
#endif
正如您要求进行运行时测试一样,使用指针大小确定技术(根据我上面链接的Apple指南页确认)是一种方法。 Manish或Hashmat建议的代码显示了如何。
答案 2 :(得分:1)
你可以试试这种方式。您将不得不添加更多cpu_type_t选项。
if (isNegative)
{
count = -count;
}
return count;
编辑:首先尝试使用“hw.cpufamily”
func getCPUType() -> String {
var size: size_t = 0
var type: cpu_type_t = 0
var subtype: cpu_subtype_t = 0
size = MemoryLayout<cpu_type_t>.size;
sysctlbyname("hw.cputype", &type, &size, nil, 0);
size = MemoryLayout<cpu_subtype_t>.size;
sysctlbyname("hw.cpusubtype", &subtype, &size, nil, 0);
// values for cputype and cpusubtype defined in mach/machine.h
var cpu = ""
if (type == CPU_TYPE_X86)
{
cpu += "x86"
} else if (type == CPU_TYPE_VAX) {
cpu += "vax"
} else if (type == CPU_TYPE_ARM) {
cpu += "ARM"
switch(subtype)
{
case CPU_SUBTYPE_ARM_V7:
cpu += "V7"
break;
// ...
default: break
}
}
return cpu
}
答案 3 :(得分:1)
我之前看过这个问题,如果你看一下这个问题的评论,我认为这是相关的:
Xcode 6.3 builds all swift files twice
在链接问题的情况下,虽然已经过时,但答案都是。每个文件将构建两次,这可以在构建设置中手动更改(仅限构建活动体系结构)。
答案 4 :(得分:0)
如何使用此代码查找?
#if TARGET_OS_SIMULATOR
#else
if(sizeof(void *) == 4)
{
NSLog(@" This is a 32 bit architecture so most probably this armv7 ");
}
else if (sizeof(void *) == 8)
{
NSLog(@" This is a 64 bit architecture so most probably this is arm64 ");
}
else
{
NSLog(@" Unrecognized architecture ");
}
#endif