前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >制作动态framework与静态framework的那些坑(二)

制作动态framework与静态framework的那些坑(二)

作者头像
大话swift
发布2020-05-07 09:51:27
1.1K0
发布2020-05-07 09:51:27
举报
文章被收录于专栏:大话swift大话swift

上篇文章我们综合讲解了做了Dynamic Library的framework 和 Static Library 的framework这两种库的流程和注意事项。

两种framework的制作

今天我们再来说一个非常重要不可忽视的坑

静态库内部类添加Category

啥?Category?你可能会说这个再常见不过了,多么常用的功能啊,但是这个坑第一是必须要踩,并且莫名其妙………

我们接着上次的工程为EmViewController.h添加Category

代码语言:txt
复制
#import <EmbededFramework/EmbededFramework.h>
NS_ASSUME_NONNULL_BEGIN
@interface EmViewController (EmCategory)-(void)emStaticLibCategoryTest;@end
NS_ASSUME_NONNULL_END

#import "EmViewController+EmCategory.h"
@implementation EmViewController (EmCategory)-(void)emStaticLibCategoryTest{    NSLog(@"%s == %s",__FILE__,__func__);}@end

就是这么简单,我们下载重新Build之后在壳工程中试着调用吧

代码语言:txt
复制
 EmViewController *vc =   [[EmViewController alloc] initWithNibName:@"EmbededFramework.framework/EmViewController" bundle:[NSBundle mainBundle]];
    [vc emStaticLibCategoryTest];

不出意外的话恭喜您,crash驾到

`EmbededFrameworkTest99929:9240476 * Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-EmViewController emStaticLibCategoryTest: unrecognized selector sent to instance 0x7f9fae5100f0’

惊喜不?意外不?

我们先来做处理让他能顺利通过,然后在说原因

解决办法

被导入库的工程中选中Target=》Build Setting =>搜索othe linker flags

添加 -ObjC

理论答疑(网上教程)——Other Linker Flags

  1. -ObjC:这个flag告诉链接器把库中定义的OC类和Category或nib都加载进来,编译后app会变大,以为加载了很多不必要的文件导致可执行文件变大。但是如果静态库中有类和分类只有加入这个flag才行;但是当静态库中只有分类而没有类时,-ObjC就失效了,这时需要加-all_load 或 -force_load了
  2. -all_load:会强制链接器把目标文件都加载进来,即使没有objc代码。 弊端:当使用了不只一个静态库文件,会遇到ld:duplicate symbol错误,因为不同库里会有相同的目标文件,针对这个问题有两种解决方法:1》用命令行就行拆包2》用另一个参数-force_load
  3. -force_load: 这个flag与-all_load其实是一样的,只是-force_load需要指定要进行全部加载的库的文件路径,这样只是完全加载了一个库文件,不影响其余文件按需加载
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 静态库内部类添加Category
  • 解决办法
  • 理论答疑(网上教程)——Other Linker Flags
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档