我們有一個NSUUID類(我們提供聲明和實現)。我們成功地使用了它到iOS 6.0。我們實施它,是因爲UIDevice uniqueIdentifier
早在Apple棄用它之前就被禁止了,並且返回一個NSUUID是一個很自然的選擇。NSUUID衝突(iOS6.0及以上)
在的iOS 6.0,我們不得不警惕的定義,因爲蘋果推出了同一類:
#if __IPHONE_OS_VERSION_MAX_ALLOWED <= __IPHONE_5_1
@interface NSUUID : NSObject {
...
}
#endif
的iOS 5.1和較小現在打破。在iOS 5.1上,我們在alloc/init
之後返回nil
。
我試圖刪除#if/#end
,但在使用最新的iPhone SDK時,我得到重複的名稱。
蘋果缺乏一個穩定的API是一個錯誤,而不是一個功能。這個「在運行時嘗試」的廢話並沒有削減它。這使得寫出高度完整的軟件變得非常困難。
從Tommy的回答下面,我不能指示Apple的工具鏈始終使用我們的NSUUID實現。如何爲iOS 5.1及更低版本提供NSUUID的實現(可能使用最新的SDK進行編譯)?
是否有任何理由不能爲您的下一個版本重命名NSUUID?無論如何,你的用戶必須更新,因爲如果他們的二進制文件嘗試更新他們的iOS,他們的二進制文件將與他們的操作系統衝突 –
這表現出發生Objective-C命名空間衝突的情況。也許蘋果保留的NS-前綴的不明智的使用是怪罪。 – ZhangChn
我希望它可以在任何地方工作:'NSUUID * uuid = [DeviceUtils applicationIdentifier]'。這隻有在所有平臺上都有'NSUUID'的情況下才有效。在iOS 5.1及更低版本上,我們*提供*因爲缺失而提供。在這件事上沒有選擇。 – jww