(set macro define)
因為參考了上面這一類的網址的 device platform 的取得方式, 覺得如果是使用 define macro 的方式,然後透過檢查裝置的寬或高的 points 值來進行判斷,其實是很有可能在之後, Apple 如果釋出了寬或高其中一項相同螢幕解析度重複為兩樣時,這種判斷方式,應該就 Game Over 了。
比方 iPhone6 ( W:H = 376:667), 未來如果有個 Apple X ( W:H = XXX:667 ), 這樣 ...
這個 667 就無法用來確定是哪個裝置的解析度了. =..="
(use sysctl method )
可是,如果使用的是這一種方式,雖然已經可以解決上面那一種方式的問題,非常可惜的是裏頭的這種寫法,如果遇到使用的裝置是 '模擬器' 進行 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 出來稍微改一下而已。 =..="
沒有留言:
張貼留言