IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS app脚手架 -> 正文阅读

[移动开发]iOS app脚手架

app脚手架概述

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

app容器能力

组件通信

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

#include <dlfcn.h>
#include <mach-o/getsect.h>
@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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:30:55  更:2021-11-10 12:31:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:43:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码