2013-05-26 92 views
3

我經常在iOS項目上開發一個開發服務器,它始終運行在我用於構建應用程序的同一臺機器上。一個典型的情況是,我有一個軌道應用程序在http://localhost:3000上運行,並且正在測試設備。爲了在設備上測試,我需要一個解決的IP地址,以便我的應用程序可以與本地網絡上的我的開發服務器通信。在Xcode中創建一個動態的預處理器宏

我知道我可以使用GCC_PREPROCESSOR_DEFINITIONS將某些環境變量設置爲預處理器宏,並且我知道我可以通過在bash腳本中運行ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}'來獲取生成計算機的IP地址。

我想要做的是使用一個值,如'@"http://${BUILD_MACHINE_IP_ADDRESS}:3000"'定義GCC_PREPROCESSOR_DEFINITIONSMY_SERVER_URL,但我想不通的是如何使用上述ifconfig腳本設置${BUILD_MACHINE_IP_ADDRESS}

我已經考慮使用運行腳本構建階段來編輯配置文件,但是像這樣的變化的後果是令人惱火的。例如,我不希望源代碼管理中包含該文件,因爲我的IP地址經常更改,並且會導致衝突。但是我需要將它包含在項目文件中,以便應用程序可以訪問它。這將導致項目構建所需的文件,但不包含在源代碼管理中,這很醜陋。

我也試着在運行腳本構建階段嘗試運行export BUILD_MACHINE_IP_ADDRESS=`ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}`,但不會產生結果。

+0

這個怎麼樣?'BUILD_MACHINE_IP_ADDRESS = $(ifconfig | grep -E'inet。[0-9]'| grep -v'127.0.0.1'| awk'{print $ 2}')' –

+0

@Jaypal yes我想要做什麼,但我不知道*在哪裏*我會這樣做,以使編譯時可用的變量。 –

+0

您可以在命令行上「導出」該變量,或者將其添加到您的配置文件中,使其每次打開終端時都可以全局使用。 –

回答

1

這樣做的一種方法是運行腳本構建階段,該階段寫入一個.h文件,該文件是#define的宏,並且包含您的源代碼。

我不認爲在構建過程中編寫.xcconfig會對該構建產生任何影響。

從運行腳本構建階段導出環境變量不會有多種原因。首先,可以從構建設置創建環境變量,但不能以其他方式工作。其次,即使他們這樣做了,子進程也不能在其父進程中設置環境變量。

對於完全的另一種方法,您是否使用開發機器的.local主機名而不是數字IP地址進行了研究?檢查「系統偏好設置」的「共享」窗格,該窗格會顯示您系統的域名。

+0

當我說問題中的配置文件時,我正在考慮更多的沿着.json或.plist文件的行,我應該可能更具體。使用機器的.local名稱將適用於只有我工作的項目,但是隻要您引入一個掉隊的團隊(每個團隊都有自己的開發服務器)。我想沒有理想的方法來做到這一點,我可能會去.h文件。謝謝:) –

+0

是「使用開發機器的.local主機名稱而不是數字IP地址」。 –