framework--怎么樣使用bundle來共享資源

續(xù)上一篇 framework--多架構(gòu)(Multi-Architecture)編譯

1、問題?

iOS的一個限制,framework只能包含頭文件和靜態(tài)庫。那么怎么樣通過使用bundle整合資源,讓其可以隨著framework一起發(fā)布。

2、解決方法:

2.1、創(chuàng)建一個Bundle
資源都會被添加到bundle中。這將是A工程上的另一個目標(biāo)。
1)


2)

3)因為要創(chuàng)建一個在iOS上使用的bundle,這與默認(rèn)的OS X不同。選擇RWUIControlsResources目標(biāo),然后點擊Build Settings欄,搜索base sdk,選擇Base SDK這一行,按下delete鍵,這一步將OS X切換為iOS。
這一步將OS X切換為iOS

4)將工程名稱改為A。搜索product name,雙擊進(jìn)入編輯模式,將${TARGET_NAME}替換為A。

5)默認(rèn)情況下,有兩種resolutions的圖片可以產(chǎn)生一些有趣的現(xiàn)象。例如,當(dāng)你導(dǎo)入一個retina @2x版本的圖片時,普通版的和Retina版的將會合并成一個多resolution的TIFF(標(biāo)簽圖像文件格式,Tagged Image File Format)。這不是一件好事。搜索hidpi將COMBINE_HIDPI_IMAGES設(shè)置為NO。

6)確保當(dāng)你編譯framework時,bundle也能被編譯并將framework作為依賴添加到集體目標(biāo)中。選中Framework目標(biāo),選擇Build Phases欄,展開Target Dependencies面板,點擊 + 按鈕,選擇AResources目標(biāo)將其添加為依賴。

7)在Framework目標(biāo)的Build Phases中,打開MultiPlatform Build面板,在腳本的最后添加下述代碼:

//這條指令將拷貝構(gòu)建好的bundle到用戶的桌面上
# Copy the resources bundle to the user's desktop
ditto "${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}.bundle" \
      "${HOME}/Desktop/${RW_FRAMEWORK_NAME}.bundle"

8)編譯framework scheme,你會發(fā)現(xiàn)bundle在桌面上出現(xiàn)


選擇framework scheme編譯

2.2、導(dǎo)入Bundle

為了用這個新的bundle開發(fā),你需要在示例項目中使用它,這意味著你必須既把它作為依賴添加到工程中,同時作為一個對象拷貝到項目中。


添加依賴

2.3、創(chuàng)建一個絲帶視圖(Ribbon View)
1)從之前下載的壓縮文件中將RWRibbon文件夾拖入到B工程下A組中。

選擇復(fù)制到該文件夾下

2)代碼中一個很重要的部分是你怎樣引用一張圖片。如果你看一下RWRibbonView.m文件中的addRibbonView方法,你將會看到相關(guān)的這一行代碼:

//Bundle就像一個文件目錄,所以引用bundle中的一張圖片是非常簡單的。
UIImage *image = [UIImage imageNamed:@"A.bundle/RWRibbon"];

3)將圖片添加到bundle中


4)導(dǎo)出頭文件RWRibbon.h,確保在framework中可以被訪問


5)將頭文件引用添加到framework的頭文件中。打開A.h添加下面這兩行:

// RWRibbon
#import < RWUIControls/RWRibbonView.h>

2.4、將絲帶添加到示例工程中
1)在B項目中打開RWViewController.m文件,在@interface后的大括號中添加下面的實例變量聲明。

RWRibbonView  *_ribbonView;

2)在viewDidLoad:的末尾添加下面的代碼來創(chuàng)建一個絲帶視圖:

// Creates a sample ribbon view
_ribbonView = [[RWRibbonView alloc] initWithFrame:self.ribbonViewContainer.bounds];
[self.ribbonViewContainer addSubview:_ribbonView];
// Need to check that it actually works :)
UIView *sampleView = [[UIView alloc] initWithFrame:_ribbonView.bounds];
sampleView.backgroundColor = [UIColor lightGrayColor];
[_ribbonView addSubview:sampleView];

3)編譯并運行B scheme。你將看到新的絲帶控件出現(xiàn)在應(yīng)用的下方。


編譯并運行B scheme
結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容