2016-08-29 35 views
0

我正在構建一個與服務器通信的iOS應用程序。我們有一個測試/登臺服務器,一臺生產服務器,每個開發者都有一個用於開發的服務器本地實例。在編譯時獲取開發機器的名稱?

我已經添加了一些簡單的邏輯,根據我們是否運行TestFlight構建,App Store構建或調試構建(用於開發)來配置服務器的地址。對於開發構建,應用程序試圖擊中本地主機,如果我們在模擬器上運行,這是非常好的,但如果我們在設備上運行則不是那麼好。

我知道ngrok,這是一個可能的解決方案,但由於暴露的URL部分是隨機生成的(至少對於免費版本),它並不適合。我在想,一個可行的開發方法可能是在編譯時檢查開發機器的名稱並插入此值。但是,如果可能的話,我不確定如何實現這一目標。我記得在Java時代使用ant/maven和環境屬性文件進行編譯時變量過濾,但我想知道在Xcode中是否有相當簡單的方法來實現這一點。

任何人都可以解釋這一點嗎?

回答

0

所以我繼續挖掘,並採取了以下解決方案。這方面的內容在這裏的其他許多帖子中已經提到。

  1. 我增加了一個叫做HostNameMacroHeader.h一個新的頭文件,我 項目。
  2. 我在'編譯源代碼'階段之前添加了'運行腳本'階段到我的編譯版本。該腳本包含以下內容:

    echo "//***AUTOGENERATED FILE***" > ${SRCROOT}/MyAppName/HostNameMacroHeader.h 
    echo "#define BUILD_HOST_NAME @\"`hostname`\"" >> ${SRCROOT}/MyAppName/HostNameMacroHeader.h 
    

然後在我的實現,在這裏我想使用的服務器地址,我用的是產生BUILD_HOST_NAME宏。

這是一個有點冒險的解決方案,但它現在做的工作。歡迎提出建議和清潔版本。