我在Objective C中編寫了一個Cocoa應用程序,它與web服務進行通信,我希望它在調試模式下連接到沙箱,並且連接到真正的web服務發佈模式。我所需要做的就是改變代碼行,其中保存配置的對象被實例化(使用不同的init消息和不同的參數)。發佈和調試版本中的不同代碼/配置(Obj-C)
那麼如何交換Release或Debug模式下的一行代碼?
我在Objective C中編寫了一個Cocoa應用程序,它與web服務進行通信,我希望它在調試模式下連接到沙箱,並且連接到真正的web服務發佈模式。我所需要做的就是改變代碼行,其中保存配置的對象被實例化(使用不同的init消息和不同的參數)。發佈和調試版本中的不同代碼/配置(Obj-C)
那麼如何交換Release或Debug模式下的一行代碼?
你可以檢查#ifdef DEBUG
,但我會建議你不要這樣做。
調試和發佈版本之間有很多不同之處。不同的編譯器優化,不同的符號集等...
不管怎樣,你都會發現自己處於一種情況,你需要針對沙箱運行發佈版本以進行調試......並且您的調試版本針對生產Web服務,因爲某些客戶有問題,只能在發佈模式下進行復制。
所以,爲此,我建議用戶默認。見NSUserDefaults
。
請注意,可以從命令行設置簡單的用戶默認值。
因此,你可以這樣做:
/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug
首先,根據問題367368 - 調用它,例如DEBUG,定義一個只在您的調試版本配置中設置的預處理器符號。那麼你可以做
#ifdef DEBUG
// Code that only compiles in debug configuration
#else
// Code that compiles in other configurations (i.e. release)
#endif
您可以使用特定的配置,定義要變更執行的代碼。請先閱讀如何define a preprocessor symbol in Xcode。然後,在你的代碼中,做這樣的事情:
#if DEBUG_MODE
#define BACKEND_URL @"http://testing.myserver.com"
#else
#define BACKEND_URL @"http://live.myserver.com"
#end
NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:BACKEND_URL]];
儘管我喜歡bbum的解決方案,但我現在明白這是如何工作的,並且會牢記在心。謝謝。 – Christian
有趣的技術,我必須記住這一點。 – pix0r
感謝您的提示!你的終端命令並不適合我。我發現「默認寫my.bundle.identifier SandboxModeFlag -bool YES」對我來說工作正常。 – Christian