2013-04-06 63 views
7

有沒有辦法找出運行時使用的Scheme?在運行時查找Xcode構建方案名稱

可能有更好的方法來做到這一點,我試圖通過使用方案名稱設置Access環境(生產VS開發)。

目前我使用#define ENV @"PROD"App-Prefix.pch文件要做到這一點,但有一個機會,錯過這個發送時PKG蘋果進行審查:(

回答

3

當運行在模擬器或設備上的應用程序,該DEBUG變量設置,允許你從你的代碼中使用它:

#ifdef DEBUG 
    // Something 
#else 
    // Something else 
#endif 

您可以從您的目標的構建設置看這個變量:

只要Run配置設置上Debug(產品 - >計劃 - >編輯計劃),這個變量將被設置:

enter image description here

+0

啊,我不知道,thx爲超快速響應:) – user390687 2013-04-07 00:09:17

+0

是的,使用** Build Configuration **這樣做可能比通過Scheme推斷它更好,因爲構建配置也會影響其他很多其他建立設置。 – 2013-04-07 00:09:59

19

我搜索無遠弗屆的答案,這因爲我真的不喜歡創建額外的目標或額外配置集的想法。這兩個選項都會造成巨大的配置同步問題。

因此,黑客的Xcode了幾個小時後,這是我想出了:

步驟1:關鍵「SchemeName」添加到類型爲String您的Info.plist。

步驟2:編輯您的默認方案和建設 - >預動作添加一個新的運行腳本下列要求:

/usr/libexec/PlistBuddy -c "Set :SchemeName \"$SCHEME_NAME\"" "$PROJECT_DIR/$INFOPLIST_FILE" 

確保從選擇下一個目標「提供構建設置從」。

步驟3:現在複製該計劃多次,你喜歡(管理計劃 - >選擇現有方案 - >點擊齒輪圖標 - >複製)。例如,你可以創建開發,分期,製作,App Store等。如果您希望在版本控制中執行這些方案,請不要忘記單擊「共享」。

步驟4:在代碼中,你可以檢索這樣的值:

NSString *schemeName = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"SchemeName"]; 

現在,該代碼可以正確運行時進行自我配置。沒有令人討厭的預處理宏來處理,沒有脆弱的配置混亂維護。

+0

這是偉大的工程!我只在info.plist中設置了'SchemeName'鍵,並且在運行構建時設置了該值。這是我的問題:$ SCHEME_NAME從哪裏來?我搜索了XCode環境變量(和互聯網)的文檔,無法找到任何參考。 – shmim 2016-01-06 18:25:45

+0

在我開始工作之前,我已經將運行腳本命令回顯出所有的環境變量(Xcode在執行腳本之前設置了一堆)。我剛纔搜尋了一遍,直到我找到一個可能的嫌疑人。 – 2016-01-06 21:17:51

+0

而事實上,如果我沒有記錯,這個env var只在與方案相關的Pre/Post操作中設置。我不認爲它是在Build階段的正常運行腳本中設置的。 – 2016-01-06 21:35:02

相關問題