2015-10-14 56 views
0

我想檢測我的應用程序在哪個iPhone上運行。 我發現這一點,在這裏計算器:檢查iPhone設備版本在設備上失敗

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0) 

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) 
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) 
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT)) 
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT)) 

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0) 
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0) 
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0) 
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0) 

但是,這並不爲我工作。當我有標準模式(不縮放)的iPhone6時,它說它是iPhone5。 我還測試

[UIScreen mainScreen].bounds.size.width 

但這返回每次320

在模擬器它的作品完美,但在設備上失敗。

有人可以幫我找出哪個iPhone使用?

問候

+2

如果您沒有提供iPhone 6的launch_screen.xib或啓動圖像,則在iPhone6中縮放應用程序。 請檢查您的狀態欄的高度,當您的應用程序運行時,如果它說20,並且它看起來比平常高,應用程序被縮放。 – Alex

+0

我已經添加了launch_screen.xib。沒有它也不適用於模擬器。 – BHuelse

回答

2

而不是依賴於屏幕尺寸,爲什麼不使用「[[UIDevice curentDevice] model]」呢?

Here's a tutorial that might help you out

如果「[[UIDevice currentDevice] model]」對於您來說不夠詳細,還有「sysctlbyname("hw.machine", machineNameAsCString, &size, NULL, 0);」,其中的教程顯示瞭如何從中獲得「漂亮的字符串」(或漂亮版本的模型名稱)。

There's also Open Source available that you can drop in to determine the Device display name

+0

有了這個,我無法找出它是否是iPhone6。它只是說x86_64。 – BHuelse

+0

是的,你可以。通過「'hw.machine'」,「iPhone7,2'」是iPhone 6,「iPhone7,1'」是iPhone 6 Plus。 [更多信息可以在這個非常相關的問題中找到](http://stackoverflow.com/questions/18414032/how-to-identify-a-hw-machine-identifier-reliable)。 –

+0

是的你是對的,這是我的錯。 hw.machine工作。 – BHuelse