专栏首页大话swiftiOS 组件化转framework

iOS 组件化转framework

RouteDemo

JLRoute方式简易组件化调研实例,实例中加载两个组件采用framework方式加载

基础

路由注册

采用Appdelegate添加类目 使用initialize来加载【因此需要注意】

UIViewController通用加载方式,采用Category方式提供加载了main , static library dynamic library中的VC加载

注意类目会根据编译顺序加载而initialize只会加载一次,因此需要避免在其他库的Appdelegate地方使用initialize,防止路由无法被注册

@interface UIViewController (JLRouteInit)



/// 默认从主项目加载

/// @param params <#params description#>

/// @param block <#block description#>

+(instancetype)initRouteParams:(NSDictionary *) params

                         block:(void(^)(UIViewController * viewController, NSDictionary *param)) block ;



/**



   采用static 需要将xib打包进framework中



   导入时:Build Phases

   静态库需要添加到 Copy Bundle Resources中



  图片资源加载方式 xxx.framework/xxx.png

 @note     UIImage *  image = [UIImage imageNamed:@"StaticVC.framework/img.png"];



   */

+(instancetype)initRouteParams:(NSDictionary *)params

           staticFrameworkName:(NSString *)frameworkName forStaticLibraryBlock:(void (^)(UIViewController * _Nonnull, NSDictionary * _Nonnull))block;





/// dynamic 设置

/// general 选择 Frameworks Libraries and Embeded Content

/// 选中对应的framework 然后 Embed选项选中 Embed Without Signing

/// @see  dyld: Library not loaded: @rpath/DynamicVC.framework/DynamicVC 问题解决参照 note

/// @note 目的是项目打包时打包至App下面的Frameworks文件夹下

/// @note 图片资源按照从mainbundle加载就行







+(instancetype)initRouteParams:(NSDictionary *)params

         forDyLibraryBlock:(void (^)(UIViewController * _Nonnull, NSDictionary * _Nonnull))block;



@end

无论是静态库还是动态库都十分需要注意资源文件的加载

静态库制作

公开库暴漏对外调用方式 Build Phases中需要 Headers设置Public Private Project分别代表需要暴漏出的级别,一目了然不太过多说明 主要是需要考虑public的文件头,给外部调用使用

1 StaticVC.h中添加需要暴漏出去头h文件

#import <Foundation/Foundation.h>



//! Project version number for StaticVC.

FOUNDATION_EXPORT double StaticVCVersionNumber;



//! Project version string for StaticVC.

FOUNDATION_EXPORT const unsigned char StaticVCVersionString[];



// In this header, you should import all the public headers of your framework using statements like #import <StaticVC/PublicHeader.h>

#import <StaticVC/StaticViewController.h>

2 导入设置

正常拖入到项目中之外还需注意一个地方—-将对应静态库 添加到Build Phases下的 Copy Bundle Resources中

3 静态文件读取加载注意事项(nib xib也是资源文件)

静态库需要使用需要注意 1 资源加载 xxx.framework/xxx资源的方式, 2 制作是需要将对应资源文件添加到 Build Phases中的 Copy Bundle Resources中

动态库制作

资源加载可以采用常规的方式加载

项目导入

General 中 Framework ,Libraries, and Embedded Content 中需要将对应动态库的Content设置为 Embed……

本文分享自微信公众号 - 大话swift(gh_ca2266b7cab0),作者:YuLongLi

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 制作动态framework与静态framework的那些坑

    今天我们来看看制作framework---dynamic和static这两中库需要注意的

    大话swift
  • ZuJianHua

    Intent 传递的数据都必须基于Serializable protocol, 且将常用的基本数据均以extension此protocol

    大话swift
  • WKWebview 与App交互辅助工具类

    之前lz公众号写个关于UIWebView的JS与App通信的文章,但是最新iOS审核规定需要替换掉UIWebView使用WKWebView才可以过审。但是之前有...

    大话swift
  • 使用git将AS项目提交到github

    git config --global user.email ***@qq.com

    蜻蜓队长
  • 你的系统可用性 5 个 9 了吗?

    又是一年放榜日,众多考生满怀期待的点开招生网,结果输了信息才发现根本没办法查询——查询人数太多了,直接把系统打挂了!这个时候,还没翻身的码农闰土被问到一个直击心...

    出其东门
  • 2018-08-24

    函数可以嵌入在sql中使用的,可以在select中调用 存储过程要让sql的query 可以执行, 需要把 mysql_real_connect 的最后一个参...

    JavaEdge
  • 光刻机欧洲可以制造,为什么感觉欧洲芯片做不起来呢?

    首先来讲光刻机技术不仅仅是欧洲独有的,光刻机需要几万个零件需要全球供应零部件,核心部件当然是欧洲和美国共同完成的,只不过荷兰ASML最终完成了整合,并且几乎达到...

    程序员互动联盟
  • ICT技术之喷—基础架构

    最近读到不少卖弄风骚的文章,题目都很诱人,不是“下一代XXX技术”,就是“未来XXX平台”,或者干脆“XXX2.0/3.0/4.0/…”。作为一只自称后现代主义...

    用户1324186
  • 分布式日志收集系统: Facebook Scribe之结构及源码分析

    技巅
  • IEEE特稿:神经形态芯片注定为深度学习而生,否则就是自取灭亡

    【新智元导读】研究者声称神经形态芯片相比传统的CPU,耗能更小。但现在的问题是,研究者需要证明,神经形态芯片能够从研究实验室转移到商业应用中吗。用航空业打比方的...

    新智元

扫码关注云+社区

领取腾讯云代金券