2015年5月6日 星期三

[記錄]判斷 iDevice Platform 的方式



(set macro define)

因為參考了上面這一類的網址的 device platform 的取得方式, 覺得如果是使用 define macro 的方式,然後透過檢查裝置的寬或高的 points 值來進行判斷其實是很有可能在之後 Apple 如果釋出了寬或高其中一項相同螢幕解析度重複為兩樣時這種判斷方式應該就 Game Over 了。

比方 iPhone6 ( W:H = 376:667), 未來如果有個 Apple X ( W:H = XXX:667 ), 這樣 ...
這個 667 就無法用來確定是哪個裝置的解析度了. =..="




可是,如果使用的是這一種方式,雖然已經可以解決上面那一種方式的問題,非常可惜的是裏頭的這種寫法如果遇到使用的裝置是 '模擬器' 進行 iDevice 模擬的開發階段的時候它也只會一直告訴想要它的資訊的開發人員說:

'我是模擬器'
'我是模擬器'
'我是模擬器'

(因為很重要、所以也要來上三遍?)
也因為如此就代表這個寫法如果 '沒有實裝進實機' 裡頭的時候,只要是在模擬器的環境之下,仍然是無用武之地的。

可是在很多種狀況下並不是都有實機可以拿來裝著玩的,感覺上這個判斷方式就差那麼一小步就可以順利拿來用在 '模擬器開發階段' 了啊 ~ .~

所以決定以這個寫法為基礎,並在裡頭幫加掛一個 define 值,讓它在有效的狀況之下可以 '強制在模擬器開發階段時'用相同的方式(method)就能取得對應的裝置資訊; 若是在非 DEBUG, 或者是實機的狀態下, 就運行本來的流程

而且,這個  define 值,必須是在 'DEBUG' 'TARGET_IPHONE_SIMULATOR' 也被設定的狀況下才會有效。
也就是說在被設定為 'RELEASE' 或者是 '非模擬器' 的狀態下這個設定值就無效化了

加掛的 define 值,在 UIDevice+TechD.h 裡頭:
#define ENFORCED_SIMULATOR_TO_SIMULATE_IDEVICE      "iPhone7,1"

這個 define 可以使用的設定值,則位於 UIDevice+TechD.m 裡頭:
+ ( NSDictionary * ) _DeviceHardwareInformation
{
    //  ... 
}

然後,就可以透過很簡單的 method,來取得相關的 platform 資訊了:
比方:

[UIDevice devicePlatform];
[UIDevice devicePhysicalPixels];
[UIDevice isIPhone6];
//  ...


※ 不過,也因為這個 Container 是自己手動建立的,所以後續 Apple 有正式推出新的 iDevice 的時候又剛好是需要用到的裝置時即請務必記得回來增加設定到這個 .m 檔裡頭。
※※※※ 說是這樣說,因為我目前的開發環境,還是沒有開始使用實機,所以這個 category class 在實機上的測試,我並沒有辦法進行,暫時只能用「祈禱的」。

※ 雖然目前只有搞了一個 class’s category 的小功能而已,還是試著把它弄到 GitHub 上頭玩玩。
( 更慘的是,明明只有兩個檔案,卻花掉好幾天在玩這個,而且 ⋯ 本來根本不是要弄這個東西的  =..=" )


※ 結果因為懶得打了,所以把已經寫在檔案內的一些說明, copy 出來稍微改一下而已。 =..="



沒有留言:

張貼留言