iOS之NSBundle的使用/打包成bundle檔案
參考:http://blog.csdn.net/sjl51060/article/details/43938911
http://www.jianshu.com/p/a8c9e52c80de
1.Bundle 檔案,簡單理解,就是資原始檔包。我們將許多圖片、XIB、文字檔案組織在一 起,打包成一個 Bundle 檔案。方便在其他專案中引用包內的資源。
2.Bundle 檔案是靜態的,也就是說,我們包含到包中的資原始檔作為一個資源包是不參 加專案編譯的。bundle 包中不能包含可執行的檔案。它僅僅是作為資 源,被解析成為特定的二進位制資料。
3.前往Build Settings設定引數
- "Base SDK" 設定為 "IOS 8.3" (Xcode 6.3.2為例)
- "Build Active Architecture Only" 設定為 "YES"
- "Debug Information Format" 設定為 "DWARF with dSYM File"
- "OS X Deployment Target" 設定為 "Compiler Default"
- "Skip Install" 設定為 "NO"
- "Strip Debug Symbols During Copy" 中"Release"模式設定為 "YES"
- "IOS Deployment Target" 設定為 "IOS 7.0"
- "COMBINE_HIDPI_IMAGES" 設定為 "NO"
3.bundle的製作-------
將資原始檔或資料夾拖動到工程中的 SourcesBundle 資料夾下面。
編譯生成 Bundle 檔案。---分別選擇 Generic iOS Device 和任意一個模擬器各編譯一次,編譯完後,我們會看到工程中 Products 資料夾下的 SourcesBundle.bundle 由紅色變成了黑色。
-
show in finder,看看生成的檔案。我們看到它為真機和模擬器都生成了 .bundle 資原始檔。
=========bundle資源包的使用一:
吧生成的bundle檔案拖到要使用餓工程中;
// 設定檔案路徑
NSString
NSBundle *resourceBundle = [NSBundlebundleWithPath:bundlePath];
// 載入 nib檔案
UINib *nib = [UINibnibWithNibName:@"Demo"bundle:resourceBundle];
NSArray *viewObjs = [nibinstantiateWithOwner:niloptions:nil];
// 獲取 xib檔案
UIView *view = viewObjs.lastObject;
view.frame = CGRectMake(20,50,self.view.bounds.size.width -40,self.view.bounds.size.width -40);
[self.view addSubview:view];
VC獲得bundle中的資源NSString * bundlePath = [[ NSBundle mainBundle] pathForResource: @ "MyBundle"ofType :@ "bundle"];
NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"vc_name"bundle:resourceBundle];
圖片獲得bundle中的資源UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];
UIImage *image = [UIImage imageNamed:@"MyBundle.bundle/img_collect_success"];
[imgView setImage:image];
==========bundle資源包的使用二:載入 Bundle中的圖片資原始檔
指定絕對路徑的形式:
UIImage *image = [UIImage imageNamed:@"SourcesBundle.bundle/demo.jpg"];
拼接路徑的形式:
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"SourcesBundle" ofType:@"bundle"];
NSString *imgPath= [bundlePath stringByAppendingPathComponent:@"sb"];
UIImage *image = [UIImageimageWithContentsOfFile:imgPath];
巨集定義的形式:
#define MYBUNDLE_NAME @"SourcesBundle.bundle"
#define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:MYBUNDLE_NAME]
#define MYBUNDLE [NSBundle bundleWithPath:MYBUNDLE_PATH]
NSString *imgPath= [MYBUNDLE_PATH stringByAppendingPathComponent:@"demo4"];
UIImage *image = [UIImage imageWithContentsOfFile:imgPath];
===========bundle的使用三 在控制器中加入一下程式碼:-(instancetype)init{
NSString *bundlePath = [[NSBundlemainBundle] pathForResource:@"WofuSDKBundle"ofType:@"bundle"];
NSBundle *resourceBundle = [NSBundlebundleWithPath:bundlePath];
self=[superinitWithNibName:@"Wofubindbankcarvc"bundle:resourceBundle];
returnself;
}
==========bundle的使用四=====載入bundle中的xib生成的cell
載入nib的時候使用以下程式碼,最主要的是表明是從那個bundle中獲取nib;
NSString *bundlePath = [[NSBundlemainBundle] pathForResource:@"WofuSDKBundle"ofType:@"bundle"];
NSBundle *resourceBundle = [NSBundlebundleWithPath:bundlePath];
UINib *nib=[UINibnibWithNibName:@"Wofucreditcell"bundle:resourceBundle];
[tab registerNib:nib forCellReuseIdentifier:identifier];