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.调用以及结果