iOS使用.framework类型的静态库
1.新建一个新工程
2.增加资源文件SDKDemoBundle.bundle,不增加资源文件,而使用资源文件会crash.
注意: SDKStaticFrameworkDemo.framework中的SDKDemoBundle.bundle资源文件不能在工程中直接访问需要把它移动到工程才能使用。不是从 SDKStaticFrameworkDemo.framework静态库里拖入工程,而是把SDKDemoBundle.bundle资源文移动到工程文件里加载。若两者都有虽然可以用但是多展包的大小。当然也可以参考如何访问组件的bundle资源来使用.bundle资源。
3.引入 SDKStaticFrameworkDemo.framework 文件
由于.a静态库要把生成的库中的include 文件加载到项目中,Framework库只需要把 SDKStaticFrameworkDemo.framework拖入工程就可以。
注意:SDKStaticFrameworkDemo静态库要和包名相同,不能乱改名字。
.framework 静态库不支持同时支持Debug和Release两个包,只能而选一。这方面不如.a静态库(存在两个.a包,会造成打出的ipa包变大问题)。别的第三方库如何解决这个问题我暂时还不知道。
最后引入结果如下
5.检查Linked Frameworks and Libraries下是否有你的静态库,若没有会crash。不过默认是会在它下面看到的。当然你用pods导入的在工程的Linked Frameworks and Libraries看不到,不过不影响你的正确使用。这个和动态库需要你手动配置到Embedded Binaries下简单多了,真正达到傻瓜式使用。当然更简单的是做一个公有组件
6.增加使用动态库的代码。
ViewController.m
#import "ViewController.h" #import <SDKStaticFrameworkDemo/SDKDemoViewController.h> #import <SDKStaticFrameworkDemo/TestTool.h> @interface ViewController () @property (nonatomic, strong) UIButton *testBtn; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIButton *testBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, 100, 50, 50)]; [testBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [testBtn setTitle:@"测试" forState:UIControlStateNormal]; [testBtn addTarget:self action:@selector(testAction:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:testBtn]; testBtn.center = self.view.center; self.testBtn = testBtn; } - (void)testAction:(UIButton *)button { [TestTool testLog]; SDKDemoViewController *vc = [[SDKDemoViewController alloc] init]; [self presentViewController:vc animated:YES completion:nil]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; [self.view bringSubviewToFront:self.testBtn]; } @end
7.调用以及结果