2015-12-22 111 views
3

使用的Xcode 7.2(7C68),OS X 10.11.2(15C50)Xcode的構建配置在工作區多個項目

TL;博士有了相同的Xcode工作區多個項目,爲什麼我的用戶定義的構建構建配置的設置似乎不起作用?我在方案中正確設置了它們,但是在模擬器上運行時,值是正確的;當在設備上運行時,這些值是錯誤的。

你好。我正在嘗試利用Xcode構建配置(.xcconfig文件)根據環境自定義我們的應用程序的行爲。這樣我們就可以根據方案的構建配置自動在集成和生產URL之間切換。但是,我很難讓它正常工作。我認爲我的工作區佈局可能會受到責難。這裏是佈局/結構:

  • 的Xcode工作區
    • iOS應用項目(2個目標:應用程序,測試)
    • 可可觸摸框架項目(2個目標:框架,測試)
  • 現在

,我有以下.xcconfig文件這些項目的每一個

  • Debug.xcconfig
  • Testing.xcconfig
  • Release.xcconfig

此外,下面的方案(映射一到一個爲每個項目及其各自的配置):

  • 調試
  • 測試
  • 發佈

對於框架,這些文件包含的信息,我們想自定義基於調試或測試或釋放(例如URL,API令牌/密鑰等)。現在,應用程序和框架都有自己的這些文件的副本。這是因爲Xcode在處理依賴關係或多個項目時,會隱式地嘗試在此場景中使用同名的配置。我想這個問題的一部分是我不知道如何明確地告訴Xcode使用X配置的依賴關係,不是正在設置的配置。

換句話說,我該如何告訴這兩個應用程序使用X配置和框架來使用Y配置?

現在,當我運行模擬器中的應用程序時,我知道該方案使用了正確的info.plist值,因爲URL和日誌設置顯示正確。但是,當我在設備上歸檔或運行時,會使用錯誤的構建配置。我不知道爲什麼會發生這種情況。

的屏幕截圖和代碼說明是如何工作的,現在:

圖1:Info.plist

圖2:Framework build settings

圖3(一些方法的分體):

if let infoDict = NSBundle(identifier: Constants.uniformTypeIdentifier)?.infoDictionary, 
     let apiKey = infoDict[Configuration.SerializationKeys.pusherAPIKey] as? String { 
      return apiKey 
    } 

在框架內部,用戶定義的構建設置包含需要爲調試vs發佈而更改的設置與vs無論如何(圖。 1)。 Info.plist文件理想地提取給定方案的變量值(圖2)。然後在代碼中,我從信息plist中檢索值(圖3)。

任何設備在被告知時都會拒絕使用生產值,包括當我在我的方案的運行操作以及存檔操作中手動切換時 - 存檔使用會返回設備上的錯誤生成設置。

對不起,這是漫長的,感謝您的閱讀。

回答

1

最後,我用類似的方法決定爲這裏看到:

How to compile a project with app and library in the same workspace with different configuration names?

它增加了建立父項目內設置直接就怎麼查找在兒童項目需要。此外,我需要採用嵌入式.framework文件並將其設置爲相對於構建路徑並使用配置設置。我確實忽略了這些變體,只是使用了$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)-$(PLATFORM_NAME)來表示所有值,而不是留下平臺名稱以最終取得成功。

當我學習和發現更多內容時,將更新這篇文章。


更新:2016年2月29日:

我刪除了.xcconfig文件;他們沒有必要。

但是,我試圖在嵌入式框架中實際使用第三種方案時遇到了困難。我嘗試切換DEFAULT_CONFIGURATION,但設置不成立。省略一些細節,基本上即使指定了正確的構建目錄,Xcode也會在使用父級的構建配置設置時忽略此操作,並將所有產品構建在同一個目錄中,我也相信這是「構建隱式依賴項」以及「嵌入框架」構建階段。但是,如果您要刪除這些內容並安裝到設備上,則應用程序在啓動時會崩潰,因爲它找不到框架文件。

待續...

相關問題