我在嘗試升級應用程序(Clarke)以提供10.6兼容性。當存在新的API時,構建向後兼容的OS X應用程序?
我的計劃是根據所使用的OSX版本使用兩種不同的代碼路徑。
在10.5上它將使用一個控制器,它由完全自定義的代碼組成,這些代碼不依賴於任何特定的Cocoa API。在10.6版本中,它將使用另一個控制器,該控制器基於相同的抽象類將新的CoreLocation API封裝在相同的接口中。在運行時,應用程序將通過檢測操作系統版本在控制器之間切換。
這適用於10.6 10.6 SDK內置正常,但在同一建立炸燬的10.5:
10/09/2009 18:30:50 [0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575] dyld: unknown required load command 0x80000022
10/09/2009 18:30:51 com.apple.launchd[403] ([0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575]) Exited abnormally: Trace/BPT trap
如果我建10.5 SDK無法編譯CoreLocation的東西,很明顯。
我希望能夠爲這個應用程序提供一個二進制文件。有沒有辦法從10.5中「隱藏」CoreLocation API?
這是正確的方法,但還有更多: 當您需要調用10.6但不是10.5的API時,您需要使用NSClassFromString()來獲取類名。然後檢查返回的類名是否有效。如果它是有效的,你可以繼續並調用你需要的API。如果沒有,你需要優雅地故障恢復。 – Jasarien 2009-09-10 21:22:08