2010-07-12 47 views
1

我想製作一個可在iPad和iPhone4上運行的通用版本。基本上這是一個遊戲的「高清」版本,可以在更高分辨率的顯示設備上運行。iPad/iPhone4 Universal Build

據我所知,iPad和iPhone4都運行armv7,因此選擇armv6和armv7似乎沒有意義。儘管這是蘋果告訴你要做的。我知道這些說明是在iPhone4發佈之前發佈的,因此我很想知道是否有人知道爲iPad 3.2和iPhone 4.0構建的過程。

如果這包含在SDK文檔中,我很抱歉,但我找不到它!

作爲獎勵,我想知道正在構建的特定SDK的定義,以便我可以執行編譯時檢查,以便在運行3.2編譯時不會出錯。 contentclass中有一個名爲contentsScale的特定成員,它現在出現在4.0中。我只需要知道其中一個或兩個的定義的名稱。 (3.2和4.0)

謝謝一堆!

凱爾

+0

選擇的ARMv6和ARMv7沒有意義,它建立它兩者的ARMv6和ARMv7。如果你有一個較舊的設備,它將加載armv6代碼或armv7,如果你有一個較新的設備。 – 5ound 2010-07-12 19:45:56

+0

這個高清應用程序不提及那些。我有一個非高清sku舊設備。問題是如何結合3.2和4.0版本 – Kyle 2010-07-12 21:13:32

回答

2

如果你想支持的唯一設備是iPhone 4和iPad的應用程序,你可以建立僅僅針對ARMv7的,這會稍微降低您的可執行文件的大小。但是,您需要將armv7添加到Info.plist中UIRequiredDeviceCapabilities密鑰下的列表中,以確保App Store列表不會讓您將其安裝在armv6設備上。儘管如此,防止它被購買並運行在armv7 iPhone 3G S和第三代iPod touch上,同時允許iPhone 4和iPad將變得更加棘手。

否則,您可以像創建其他通用應用程序一樣構建此應用程序。我建議從iPhone項目開始並將其轉換爲通用應用程序,或者從通用應用程序模板開始。

檢測是否在運行時實現了特定方法可以使用-respondsToSelector:方法完成。例如,下面的代碼檢查的-contentsScale在CALayer的可用性,並調整該層的尺度以匹配顯示器的:

if ([self respondsToSelector:@selector(setContentsScale:)]) 
{ 
    Class screenClass = NSClassFromString(@"UIScreen"); 
    if (screenClass != Nil) 
    { 
     id scale = [[screenClass mainScreen] valueForKey:@"scale"]; 
     [(id)self setValue:scale forKey:@"contentsScale"]; 
    } 
} 
+0

謝謝。自己是CAEAGLLayer類的實例,這個解決方案出色地工作。謝謝! – Kyle 2010-07-13 20:05:38