2012-09-12 64 views
4

我已經創建了一個包含2個目標,而我在這兩個目標的實現靜態庫的XCode謨。根據我編譯的目標,我的靜態庫中的一些類需要略有不同。自定義靜態庫

我沒有任何想法如何正確地做到這一點。 有什麼想法?

謝謝

+0

你不能用靜態庫這樣做在編譯的時候,因爲它只是 - 一個靜態庫。它並不關心你使用的產品的目標平臺。期。如果你確切地告訴我們你需要做什麼,我們可能會想出一個運行時解決方案。 –

+1

將靜態庫分隔到另一個Xcode項目中,在這個新的Xcode項目中創建兩個目標並根據這兩個目標更改行爲。並在您的原始項目中設置不同的目標依賴關係和鏈接。以SDWebImage(https://github.com/rs/SDWebImage)爲例 - 有兩個目標SDWebImage和SDWebImage ARC,這些目標生成兩個不同的靜態庫(libSDWebImage.a和libSDWebImageARC.a)進行鏈接。 – robertvojta

+0

我喜歡在靜態庫中創建多個目標的想法:-)。謝謝@RobertVojta – Niko

回答

0

以什麼方式他們需要有所不同? (我根據我的回答猜測它可以通過在類中設置某種狀態變量或通過自定義初始化方法來處理)

我建議您創建某種形式的自定義init方法或實例您爲需要具有不同行爲的類設置的變量。然後,您可以在每個目標的生成設置中使用用戶定義的設置。

檢查這個問題&答案的詳細資料:iphone: get User Defined variable in Target's setting by code?

Basicly你可以有這將是像一個字符串設置,以便:「標準」,就從

FooBarClass.h 

typedef enum { FooBarSettingNormal, FooBarSettingFast } FooBarSetting; 

-(id)initWithSetting:(FooBarSetting)setting; 

然後把它拿來從代碼中獲取buildsetting中的變量集並初始化FooBar對象,如下所示:

SomeViewController.m 

NSNumber* fooBarSetting = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"FooBarSetting"]; 
FooBar * baz = [[FooBar alloc] initWithSetting:[fooBarSetting intValue]]; 

此啓用就是你要在你的類不同的行爲,並保持靜態庫分開,並從您正在使用的項目獨立。

我希望你覺得這個有點用:)