
從iOS8開始Xcode可以直接建立Framework工程了(?),再也不用建立靜態庫,然後再進行修改為Framework。另外在iOS7中使用Framework對於Xib和圖片的引用很不友善,在iOS8也提供了直接的API。
一、建立Framwork工程
新建工程,選擇Framework & Library -> Cocoa Touch Framework, 點選Next,建立FrameworkiOS8的Framework工程。新增FrameworkViewController的class及Xib,再新增一個圖片的Bundle。詳見github的Demo.

標頭檔案的暴露 在TARGETS -> Build Phases -> Headers 將FrameworkViewController.h從Project移到Public中。

在FrameworkViewController.h中暴露了一個方法- (void)displayImageView;
用來顯示圖片,在FrameworkViewController.m實現
#pragma mark - Public Methods
- (void)displayImageView
{
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
UIImage *image = [UIImage imageNamed:@"Images.bundle/LuFei" inBundle:bundle compatibleWithTraitCollection:nil];
self.imageView.image = image;
}
複製程式碼
載入指定的bundle中的PNG檔案。
二、建立測試工程
建立一個工程來測試下Framework:
-
新建工程FrameworkTest,將FramworkiOS8編譯生成的FrameworkiOS8.framework檔案copy到FrameworkTest的目錄下。
-
FrameworkTest工程引入FrameworkiOS8.framework。
-
在Targets -> General -> Embedded Binaries 引入framework
-
在Build Phases -> Copy Bundle Resources 引入framework.
-
編寫呼叫Framework的測試程式碼,引入
#import <FrameworkiOS8/FrameworkiOS8.h>
的標頭檔案。 -
執行測試程式碼
#pragma mark - Target Methods
- (IBAction)onClickFrameworkBtn:(id)sender
{
NSBundle *bundle = [NSBundle bundleForClass:[FrameworkViewController class]];
FrameworkViewController *frameworkVC = [[FrameworkViewController alloc] initWithNibName:@"FrameworkViewController" bundle:bundle];
[self presentViewController:frameworkVC animated:YES completion:^{
[frameworkVC displayImageView];
}];
}
複製程式碼
- 正確的顯示了Framework中Xib。 ? ^_^
直接載入Image 直接載入Framework中的圖片
- (IBAction)onClickImageBtn:(id)sender
{
NSBundle *bundle = [NSBundle bundleForClass:[FrameworkViewController class]];
UIImage *image = [UIImage imageNamed:@"Images.bundle/LuFei" inBundle:bundle compatibleWithTraitCollection:nil];
[self.view setBackgroundColor:[UIColor colorWithPatternImage:image]];
}
複製程式碼

獲取成功。
// END
關於Framework的打包,線上更新等等的功能,請參考其他文獻。不再重複描述。