2009-01-14 88 views
12

我正在研究一個包含兩個目標的項目。一個用於構建用於Mac開發的框架,另一個用於創建用於iPhone開發的靜態庫。如何爲Mac和iPhone創建混合Xcode項目?

在通用代碼中,平臺之間的#ifdef沒有問題,但我無法正確地獲取目標和依賴關係。

第一個問題是,要使用哪個基礎SDK? 例如,如果我使用Mac 10.5,我不能包含UIKit框架(它被標記爲紅色,並且如果我展開它,則不顯示頭文件)。即使實際鏈接它的目標建立iPhone OS ..

另一個問題是,如何Foundation.framework,或像Security.framework的東西?如何處理它們,因爲我只能包含其中一個版本(Mac或iPhone SDK)...

任何人都對我有建議嗎? 我希望有一個乾淨的項目結構和兩個目標完全相同的代碼庫...配置是否應該走的路?

謝謝!

回答

5

只是爲了讓你知道:

我結束爲不同的平臺提供不同目標的項目。 但我並沒有包括我的目標本身依賴於框架,而只是將它們添加到其它鏈接器標記生成設置:

-framework Foundation -framework Security 

您可以檢查出來的項目,我上github做。

-3

難道你不能使用PIMPL idiom?和/或兩者都有一個共同的頭文件,但是使用基於目標體系結構或SDK的不同實現文件?

3

可能最簡單的方法就是做兩個項目(如果你喜歡的話,你可以把它作爲一個虛擬傘項目的子項目來完成),它們使用相同的源組合 - 一款面向Mac OS X的iPhone OS。

或者,您是否可以不在同一個項目中創建兩個單獨的目標,並從每個「獲取信息」窗口的「生成」選項卡中更改「基本SDK」?我沒有在我面前檢查Xcode,但我認爲它會讓你這樣做。

(當然,不管採用哪種方法,你可以添加第三個目標:一個靜態庫的模擬器,測試時將是有益的!)

+1

這就是問題所在。有兩個具有不同Base SDK的目標,其中一個是Mac OS X,不會讓我包含UIKit框架。 並且在兩個平臺上具有相同名稱的安全框架的問題仍然存在。但是「傘項目」的想法可能沒有問題。 – stigi 2009-01-16 09:55:33

3

這其實並不壞。只需創建適當類型的第二個目標,然後更改「Base SDK」構建設置即可。然後確保添加所有必需的文件。如果您想同時構建兩者,請創建一個聚合目標。有關實際示例,請參閱我的項目SSPromise