iOS APP Framework化

iOS APP Framework化

目标:iOSAPP Framework化。

方法:资源文件打包成bundle,其它逻辑实现封装成framework静态框架。

准备:

一个基本功能的APP


1,将资源文件打包生成bundle

目标文件:图片等资源文件以及画面XIB

建立工程:File-> New -> Project -> macOS -> Framework & Library -> Bundle


拷贝导入资源文件:


修改项目TARGETS的BaseSDK为iOS:

至此工程已经建立完毕,编译工程生成.bundle文件

右键单击.bundle->show in finder便可找到生成的bundle


2,逻辑实现封装成静态框架

目标文件:.m .h文件

建立工程:File-> New -> Project -> iOS -> Framework & Library -> Cocoa Touch Framework


拷贝导入资源文件:


添加BundleTools,用来获取我们生成的.bundle里的资源文件

BundleTools.h

#import 

#define BUNDLE_NAME @"MySource"

@interface BundleTools : NSObject

+ (NSString *)getBundlePath: (NSString *) assetName;

+ (NSBundle *)getBundle;

@end

BundleTools.m

#import "BundleTools.h

@implementation BundleTools

+ (NSBundle *)getBundle{

 return [NSBundle bundleWithPath: [[NSBundle mainBundle] pathForResource: BUNDLE_NAME ofType: @"bundle"]];

}

+ (NSString *)getBundlePath: (NSString *) assetName{

 NSBundle *myBundle = [BundleTools getBundle];

 if (myBundle && assetName) {

 return[[myBundle resourcePath] stringByAppendingPathComponent: assetName];

    }

    return nil;

}

@end


修改我们导入的.m文件,添加init和initWithNibName方法使其初始化时候获取bundle里面的资源。

- (id)init{

 NSBundle *myBundle = [BundleTools getBundle];

 self = [super initWithNibName: [NSString stringWithUTF8String: object_getClassName(self)] bundle: myBundle];

 if (self) {


    }

    return self;

}


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

 if (self) {


    }

    return self;

}

至此工程已经建立完毕,编译工程生成.framework文件

右键单击.framework->show in finder便可找到生成的framework


3,建立测试工程

复制导入framework与bundle

工程TARGETS -> Embedded Binaries -> 添加framework

建立测试画面,使用framework功能

至此OS APP Framework化完毕,运行实现效果。


你可能感兴趣的:(iOS APP Framework化)