有誰知道一個簡單的方法來判斷iOS7設備是32位還是64位硬件?我不是指編程式,我只是指通過設置,型號,第三方應用程序等。確定iOS設備是32位還是64位
我有一個問題,我懷疑是64位相關。蘋果的建議是在64位模擬器上進行測試,但也要在實際的64位設備上進行測試,但並沒有說明如何確定這一點。我可以編寫一個測試應用程序來檢查sizeof(int)或其他什麼,但是有一些技術支持的方法可以知道他們在處理什麼。
埃裏克
有誰知道一個簡單的方法來判斷iOS7設備是32位還是64位硬件?我不是指編程式,我只是指通過設置,型號,第三方應用程序等。確定iOS設備是32位還是64位
我有一個問題,我懷疑是64位相關。蘋果的建議是在64位模擬器上進行測試,但也要在實際的64位設備上進行測試,但並沒有說明如何確定這一點。我可以編寫一個測試應用程序來檢查sizeof(int)或其他什麼,但是有一些技術支持的方法可以知道他們在處理什麼。
埃裏克
沒有其他「官方」方式來確定它。您可以使用此代碼來確定它:
if (sizeof(void*) == 4) {
NSLog(@"32-bit App");
} else if (sizeof(void*) == 8) {
NSLog(@"64-bit App");
}
這將檢查*應用程序*是以32位還是64位模式運行,而不是*硬件*是32位或64位。 –
根據Apple的說法,當您編譯64位時,.ipa文件中也包含32位和64位二進制文件。所以如果應用程序運行在64位模式下,那麼硬件是64位的。 –
@NikosM。,你有來源嗎? –
以下是方法is64bitHardware。如果硬件是64位硬件,並且在真實的iOS設備和iOS模擬器中運行,則返回YES。這裏是source。
#include <mach/mach.h>
+ (BOOL) is64bitHardware
{
#if __LP64__
// The app has been compiled for 64-bit intel and runs as 64-bit intel
return YES;
#endif
// Use some static variables to avoid performing the tasks several times.
static BOOL sHardwareChecked = NO;
static BOOL sIs64bitHardware = NO;
if(!sHardwareChecked)
{
sHardwareChecked = YES;
#if TARGET_IPHONE_SIMULATOR
// The app was compiled as 32-bit for the iOS Simulator.
// We check if the Simulator is a 32-bit or 64-bit simulator using the function is64bitSimulator()
// See http://blog.timac.org/?p=886
sIs64bitHardware = is64bitSimulator();
#else
// The app runs on a real iOS device: ask the kernel for the host info.
struct host_basic_info host_basic_info;
unsigned int count;
kern_return_t returnValue = host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)(&host_basic_info), &count);
if(returnValue != KERN_SUCCESS)
{
sIs64bitHardware = NO;
}
sIs64bitHardware = (host_basic_info.cpu_type == CPU_TYPE_ARM64);
#endif // TARGET_IPHONE_SIMULATOR
}
return sIs64bitHardware;
}
如果您複製完整的功能,請鏈接到您的[來源](http://blog.timac.org/?p=907)。 – DarkDust
完全未經測試,但你應該通過sysctl
這樣能夠獲得CPU:
#include <sys/types.h>
#include <sys/sysctl.h>
#include <mach/machine.h>
void foo() {
size_t size;
cpu_type_t type;
size = sizeof(type);
sysctlbyname("hw.cputype", &type, &size, NULL, 0);
if (type == CPU_TYPE_ARM64) {
// ARM 64-bit CPU
} else if (type == CPU_TYPE_ARM) {
// ARM 32-bit CPU
} else {
// Something else.
}
}
在iOS的7 SDK,CPU_TYPE_ARM64
在<mach/machine.h>
被定義爲:
#define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
一種不同的方式似乎是:
#include <mach/mach_host.h>
void foo() {
host_basic_info_data_t hostInfo;
mach_msg_type_number_t infoCount;
infoCount = HOST_BASIC_INFO_COUNT;
host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo, &infoCount);
if (hostInfo.cpu_type == CPU_TYPE_ARM64) {
// ARM 64-bit CPU
} else if (hostInfo.cpu_type == CPU_TYPE_ARM) {
// ARM 32-bit CPU
} else {
// Something else.
}
}
如果您使用的是clang編譯,還有另一種方法:檢查是否定義了__arm__
或__arm64__
。
下面的示例代碼沒有進行測試,但它應該說明我的意思是說:
#if defined(__arm__)
NSLog(@"32-bit App");
#elif defined(__arm64__)
NSLog(@"64-bit App");
#else
NSLog(@"Not running ARM");
#endif
注意,這依賴於一個事實,即當前的iOS應用程序二進制文件包含兩種,32位和64位二進制文件在一個單一的容器,它們將根據您的應用程序是否支持執行64位進行正確選擇。
在運行時,您可以使用這樣的事情
extension UIDevice {
static let is64Bit = MemoryLayout<Int>.size == MemoryLayout<Int64>.size
}
您可以在Int
https://developer.apple.com/documentation/swift/int/2885648-bitwidth
static var is32Bit: Bool {
return Int.bitWidth == 32
}
static var is64Bit: Bool {
return Int.bitWidth == 64
}
我迅速4使用使用bitWidth
,不知道這是否是最好的解決方案,但它作品。
func getCPUArch()
{
#if arch(arm)
print("this is a 32bit system")
#elseif arch(arm64)
print("this is a 64bit system")
#endif
}
你可以通過模型知道。 iPhone 5s,iPad mini Retina和iPad Air都是64位的。其他的是32位。 –
使用這個模型也是我得出的結論。我想用兩年後的型號就足夠了,我試圖弄清楚客戶正在運行的是什麼(「讓我們來看看,是5C 32位......」) –
在運行時,您可以通過下一個解決方案https:// stackoverflow檢測設備拱門。com/questions/20104403/determine-if-ios-device-is-32-or-64-bit/47636895#47636895 –