iOS开发音频课---笔记---基础原理(二)

06 | App 如何通过注入动态库的方式实现极速编译调试?

iOS 原生代码的编译调试,都是通过一遍又一遍地编译重启 App 来进行的。所以,项目代码量越大,编译时间就越长。
虽然我们可以通过将部分代码先编译成二进制集成到工程里,来避免每次都全量编译来加快编译速度,但即使这样,每次编译都还是需要重启 App,需要再走一遍调试流程。

Injection for Xcode

John Holdsworth 开发了一个叫作 Injection 的工具可以动态地将 Swift 或 Objective-C 的代码在已运行的程序中执行,以加快调试速度,同时保证程序不用重启

使用方式就是 clone 下代码,构建 InjectionPluginLite/InjectionPlugin.xcodeproj ;
删除方式是,在终端里运行下面这行代码:
rm -rf ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/InjectionPlugin.xcplugin

Injection 会监听源代码文件的变化,如果文件被改动了,Injection Server 就会执行 rebuildClass 重新进行编译、打包成动态库,也就是 .dylib 文件。编译、打包成动态库后使用 writeSting 方法通过 Socket 通知运行的 App。

在这里插入图片描述
这个工具目前仅支持模拟器,不支持真机

写个UI,就能显示出来,感觉也是很厉害的样子


07 | Clang、Infer 和 OCLint ,我们应该使用谁来做静态分析?

静态分析,可以帮助我们在编写代码的阶段就能及时发现代码错误,从而保证工程质量

Xcode 自带的静态分析工具 Analyze,通过静态语法分析能够找出在代码层面就能发现的内存泄露问题,还可以通过上下文分析出是否存在变量无用等问题。

第三方静态检查工具:OCLint、Infer、Clang 静态分析器
对于 iOS 的静态分析,这三个工具都是基于 Clang 库开发的。

静态分析器,能够帮助我们更加全面的发现人工测试中的盲点,提高检查问题的效率,寻找潜在的可用性问题,比如空指针访问、资源和内存泄露等等。

Infer

Infer 是 Facebook 开源的、使用 OCaml 语言编写的静态分析工具,可以对 C、Java 和 Objective-C 代码进行静态分析,可以检查出空指针访问、资源泄露以及内存泄露。

更多Infer学习


08 | 如何利用 Clang 为 App 提质?

Clang是一个编译器,用来编写C、C++、OC语言
Clang只是一个编译器前端
Clang源码

  • Clang编译的速度非常快,对内存的使用率非常低,并且兼容GCC
  • 对于代码诊断来说,Clang很强大,Xcode也是使用Clang的。
  • Clang对typedef的保留和展开处理的很好
  • Clang的架构是模块化的。利用其输出的接口还可以开发用于代码转义、代码生成、代码重构的工具,方便与 IDE 进行集成。

Clang是基于C++开发的


09 | 无侵入的埋点方案如何实现?

埋点可以解决两大类问题:
一是了解用户使用 App 的行为
二是降低分析线上问题的难度

iOS 开发中常见的埋点方式,主要包括代码埋点、可视化埋点和无埋点(或者说是全埋点) 这三种。

  • 代码埋点主要就是通过手写代码的方式来埋点,能很精确的在需要埋点的代码处加上埋点的代码,可以很方便地记录当前环境的变量值,方便调试,并跟踪埋点内容,但 存在开发工作量大,并且埋点代码到处都是,后期难以维护等问题。
  • 可视化埋点,就是将埋点增加和修改的工作可视化了,提升了增加和维护埋点的体验。

之前公司用的神策,就算可视化埋点种的一类
可视化埋点更多学习

  • 无埋点,并不是不需要埋点,而更确切地说是“全埋点”,而且埋点代码不会出现在业务代码中,容易管理和维护。它的缺点在于,埋点成本高,后期的解析也比较复杂,再加上 view_path 的不确定性。所以,这种方案并不能解决所有的埋点需求,但对于大量通用的埋点需求来说,能够节省大量的开发和维护成本。

可视化埋点和无埋点,都属于是无侵入的埋点方案

iOS 开发中最常见的三种埋点,就是:
对页面进入次数、页面停留时间、点击事件的埋点
可以通过运行时方法替换技术来插入埋点代码,以实现无侵入的埋点方法


10 | 包大小:如何从资源和代码层面实现全方位瘦身?

App 包过大既损害用户体验,影响升级率,还会导致无法提交 App Store 的情况和非 WiFi 环境无法下载这样可能影响到 App 生死的问题。

官方 App Thinning

App Thinning 是由苹果公司推出的一项可以改善 App 下载进程的新技术,主要是为了解决用户下载 App 耗费过高流量的问题,同时还可以节省用户 iOS 设备的存储空间。

App Thinning 会专门针对不同的设备来选择只适用于当前设备的内容以供下载。比如,iPhone 6 只会下载 2x 分辨率的图片资源,iPhone 6plus 则只会下载 3x 分辨率的图片资源。

  • x86_64 和 i386,是用于模拟器的芯片指令集架构文件;
  • arm64、armv7、armv7s ,是真机的芯片指令集架构文件。

App Thinning的大部分工作都是由 Xcode 和 App Store 来帮你完成的,你只需要通过 Xcode 添加 xcassets 目录,然后将图片添加进来即可。
按照 Asset Catalog 的模板添加图片资源即可,添加的 2x 分辨率的图片和 3x 分辨率的图片,会在上传到 App Store 后被创建成不同的变体以减小 App 安装包的大小
使用 App Thining 后,你可以将 2x 图和 3x 图区分开,从而达到减小 App 安装包体积的目的

无用图片资源

图片资源的优化空间,主要体现在删除无用图片图片资源压缩这两方面。

福利
删除无用图片的第三方,可以试试LSUnusedResources

图片资源压缩
将图片转成WebP格式

代码瘦身

App 的安装包主要是由资源和可执行文件组成的
可执行文件就是 Mach-O 文件,其大小是由代码量决定的
对可执行文件进行瘦身,就是找到并删除无用代码的过程

通过 AppCode 找出无用代码

如果工程量不是很大的话,建议直接使用 AppCode 来做分析。
用 AppCode 做分析的方法很简单,直接在 AppCode 里选择 Code->Inspect Code 就可以进行静态分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值