2009-09-10 43 views
5

我在Objective C中編寫了一個Cocoa應用程序,它與web服務進行通信,我希望它在調試模式下連接到沙箱,並且連接到真正的web服務發佈模式。我所需要做的就是改變代碼行,其中保存配置的對象被實例化(使用不同的init消息和不同的參數)。發佈和調試版本中的不同代碼/配置(Obj-C)

那麼如何交換Release或Debug模式下的一行代碼?

回答

7

你可以檢查#ifdef DEBUG,但我會建議你不要這樣做。

調試和發佈版本之間有很多不同之處。不同的編譯器優化,不同的符號集等...

不管怎樣,你都會發現自己處於一種情況,你需要針對沙箱運行發佈版本以進行調試......並且您的調試版本針對生產Web服務,因爲某些客戶有問題,只能在發佈模式下進行復制。

所以,爲此,我建議用戶默認。見NSUserDefaults

請注意,可以從命令行設置簡單的用戶默認值。

因此,你可以這樣做:

/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug 
+0

有趣的技術,我必須記住這一點。 – pix0r

+1

感謝您的提示!你的終端命令並不適合我。我發現「默認寫my.bundle.identifier SandboxModeFlag -bool YES」對我來說工作正常。 – Christian

2

首先,根據問題367368 - 調用它,例如DEBUG,定義一個只在您的調試版本配置中設置的預處理器符號。那麼你可以做

#ifdef DEBUG 
    // Code that only compiles in debug configuration 
#else 
    // Code that compiles in other configurations (i.e. release) 
#endif 
8

您可以使用特定的配置,定義要變更執行的代碼。請先閱讀如何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]]; 
+0

儘管我喜歡bbum的解決方案,但我現在明白這是如何工作的,並且會牢記在心。謝謝。 – Christian

相關問題