iOS app脚手架

iOS app脚手架,第1张

app脚手架概述

一个完整的app需要的能力和一些通用的解决方案(三方库)。
主流的app都将不同业务(增长、交易、短视频、直播、社区等等不同业务)做成独立的组件,以及支持app运行的基础代码都封装成独立的模块,不仅能提高编译速度,也解除了各个业务的耦合,下面是组件化app的各种基础库。

app容器能力 组件通信

各个组件之间啊采用何种方式通信的中间件
比如url-block方式,蘑菇街的方案
核心在于这种硬编码

#include 
#include 
@implementation Person


- (instancetype)init
{
    self = [super init];
    if (self) {
        [self readDataFromMachO];
    }
    return self;
}

- (void)readDataFromMachO {
    //1.根据符号找到所在的mach-o文件信息
        Dl_info info;
        dladdr((__bridge void *)[self class], &info);
    
    //2.读取__DATA中自定义的ProtocolInfoDataz数据
    #ifndef __LP64__
        const struct mach_header *mhp = (struct mach_header*)info.dli_fbase;
        unsigned long schemeSize = 0;
        uint32_t *schemeMemory = (uint32_t*)getsectiondata(mhp, "__DATA", "ProtocolInfoData", &schemeSize);
    #else /* defined(__LP64__) */
        const struct mach_header_64 *mhp = (struct mach_header_64*)info.dli_fbase;
        unsigned long schemeSize = 0;
        uint64_t *schemeMemory = (uint64_t*)getsectiondata(mhp, "__DATA", "ProtocolInfoData", &schemeSize);
     
    #endif /* defined(__LP64__) */
    
    //3.遍历ProtocolInfoData中的协议数据
    unsigned long schemeCounter = schemeSize/sizeof(struct ProtocolInfo);
    struct ProtocolInfo *items = (struct ProtocolInfo*)schemeMemory;
    for(int idx = 0; idx < schemeCounter; ++idx){
        NSString * key = [NSString stringWithUTF8String:items[idx].key];
        NSString * value = [NSString stringWithUTF8String:items[idx].value];;
        NSLog(@"-----key:%@ , value:%@",key,value);
    
    }
}

@end

@interface Person (myTest)
@end

@implementation Person (myTest)

- (void)loads {
    ProtocolRegister(Person, SwitchValueDelegate);
}
@end

还有protocol-class和target-action。
target-action代表的库是CTMediator
组件通信承担了大部分的页面跳转

启动器

负责启动任务的规划,包括负责网络库、埋点、crash收集、图片库等启动任务规划

生命周期管理

从main函数进入的appdelegate写了各种生命周期的代码。
负责app生命周期相关的事件分发,didfinish等方法

服务调度器

第一部分的组件通信里,CTMediator更适合处理一个组件暴露的服务调度的问题,蘑菇街的url-controller比较适合页面跳转。

UI骨架

对UIKit的再封装。定制导航栏(栈)、定制一些基础的按钮
加载占位图。

基础中间件 网络库

AFNetworking
一般会进行再分装,采用多实例方式去进行网络请求。

长连接

负责管理app内的长链接和退到后台的苹果apns长链接。
app内外的服务端推送

图片库

SDWebImage
一般会再封装,进行图片链接的替换(CDN),缓存逻辑补充(首页图片缓存、常见gif图)

埋点

用户行为分析

web容器

app的动态能力

启动闪屏

广告页

远端配置

下发一些用于灰度测试一些app能力的开关。
#3 高可用
性能度量、crash收集

安全容器

safeString等安全容器封装

安全气垫

相关文章:【网易iOS App运行时crash自动防护】
安全气垫对常见的 Crash 点,做了防护,且可以:
● 可通过 Orange 配置开启对应防护,包括:
○ 野指针防护
○ "unrecognized selector"相关防护
○ 容器类防护
○ NSNotificationCenter防护
○ performSelector防护
○ NSString,NSAttributedString防护
○ NSTimer内存泄露防护
○ KVO
○ NanoFree
○ WebView中MPVolumeView的Crash问题

多线程

封装GCD。

优秀博客

个人 王巍@Line https://onevcat.com/
个人 YY@滴滴 http://blog.ibireme.com/
个人 sunnxx@滴滴 http://blog.sunnyxx.com/
个人 砰@微信 http://blog.cnbang.net/
个人 卓同学@丁香园 http://www.jianshu.com/u/88a056103c02
个人 南峰子@京东 http://southpeak.github.io/
个人 唐巧@猿题库 http://blog.devtang.com/
个人 杨骑滔@锤子 http://kittenyang.com/
个人 迅捷 http://www.jianshu.com/u/3e55748920d2
个人 拖沓 http://draveness.me/
个人 杨萧玉@QQ http://yulingtianxia.com/
个人 Limboy@蘑菇街 http://limboy.me/
个人 田巍宇 https://casatwy.com/
个人 叶孤城 http://www.jianshu.com/u/b82d2721ba07
团队 布格利 http://chuansong.me/account/weixinBugly
团队 微信阅读 http://wereadteam.github.io/
团队 京东XcodeMen http://www.jianshu.com/u/d509cc369c78
团队 美团 http://tech.meituan.com/tag/iOS

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/996687.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存