老司机 iOS 周报 #7

5,417 阅读8分钟

这周就是春节了,周报在春节期间不会更新,祝大家过个好年。

新闻

Swift 4.1 新增 -Osize 优化模式降低代码尺寸

Swift 4.1 将随 iOS 11.3、Xcode 9.3 一起发布。Optimization Level 新增 -Osize 模式,降低编译后代码尺寸。按官方描述,启用 -Osize 后代码尺寸将降低 5%-30%,而性能影响可以忽略不计(小于 5%)。

另外,还从 Optimization Level 独立出 Compilation Mode,可选 Single FileWhole Module

iOS 关键组件 iBoot 源代码泄露

有匿名开发者在 GitHub 上传了 iOS 核心组件 iBoot 的源代码,iBoot 是 iOS 关键的源代码之一,它确保了操作系统的可信任启动,换句话说,它是加载 iOS 的程序,是开启 iPhone 运行的第一个进程,它加载并验证内核是否被苹果正确签名,然后执行,就像 iPhone 的 BIOS 一样。

Apple 已确认这一事件并表示泄漏的是 iOS 9 的代码。

苹果公司与内蒙古签订协议,将在中国国内建设第二个数据中心

苹果公司将在内蒙古乌兰察布市,建设中国第二个数据中心,于 2020 年开始投入运营,继而形成“南贵北乌”两个数据中心的格局。

文章

iOS KVO crash 自修复技术实现与原理解析

一年前网易杭研的博客《大白健康系统--iOS APP 运行时 Crash 自动修复系统》引发了很多讨论。利用 runtime 动态特性,对一些常见 crash 进行保护:

博客介绍了实现原理,未公布代码。现在根据小道消息,网易的这个库内部并未全面使用,开源计划已经搁置。社区有热心群众出于学习心态,按照文章思路写了一个类似的代码库:BayMaxProtector

本文则针对如何防护 KVO crash 提出新的方案:通过建立哈希表保存观察者、keyPath 的信息,在对象 dealloc 时进行状态的更新。

[译] Swift 算法学院 - 查找数组中第 K 大值

介绍了查找数组中第 K 大值的算法。更多的基于 Swift 的算法例子可以看 raywenderlich/swift-algorithm-club

数据结构 & 算法 in Swift (二):算法概述和排序算法

本篇是《数据结构 & 算法 in Swift》系列连载的第二篇,首先简单地讲解了算法基础,包括算法的概念、时间复杂度与空间复杂度以及递归。然后结合 Swift 代码实现讲解了排序算法,包括选择排序、插入排序、归并排序和快速排序。

iOS 架构之 View 层的架构方案

在前两年 Casa 分享的 iOS 应用架构谈 view 层的组织和调用方案 之后,这是圈内现在新鲜出炉的又一篇 view 层架构分析文章。Casa 的文章最后站在更宏观的角度去提出 view 层架构模式需要遵循的"拆分三大心法"和"设计四大心法"。

这篇篇幅相对要少一些,该作者从「如何评价一个架构方案」-> 「MVC / MVVM / MVP / VIPER 等几种主流的架构模式简析」-> 「团队内最终的方案」,循序渐进地分享了适合自己团队的架构方案实践过程,对于初入架构设计的同学会相对更加友好一些。笔者建议先读懂这篇文章后,再细细咀嚼 Casa 的文章。

Crash 符号化

作者一共写了三篇文章,从 基本流程与相关命令symbolicatecrash 源码浅析与优化 以及最后的 Mach-O 与 atos,由浅入深的解释了 iOS Crash 从产生到符号化的整个过程。

Swift 中关于操作符的那些事儿

这篇文章主要是介绍了一个处理 Error 的技巧,通过自定义操作符来简化错误处理的代码,没有复杂的逻辑和抽象,简单实用,强烈推荐👍

WebAssembly 能干什么?8 个 WebAssembly 应用案例

WebAssembly 的特点是在浏览器里面他运行的比 js 快,虽然还是一个提案中的技术,但是各大浏览器厂商都已经跟进,因此有了很多 WebAssembly 实际应用案例,这篇文章就介绍了 8 个案例,从这里面的介绍可以看到 WebAssembly 普遍被应用到了这几个方向

  • 将其他语言编译成 WebAssembly 做到可以在浏览器里运行;
  • WebAssembly 在游戏引擎与图形渲染方面的运用;
  • 是加速原本的 js 代码的运行。

[译]在 Git 中保护 iOS 项目的敏感信息

如果要开源的代码涉及敏感信息,比如 API Key,HMAC secrets 或密码,那么比较好的方式是把它们放在新建的 xcconfig 文件里,Git 再忽略这些文件。 最后新建不把值包含进去的示例配置 xcconfig 文件。

其它开发者此时只需要将示例配置文件填值,再重命名一下即可轻松运行不包含敏感信息的项目。

Swift 4.1 improves Codable with keyDecodingStrategy

Swift 4.0 中增加了 Codable 来方便的解析 Json,然而 Json 作为一个通用的数据格式通常用于和其他平台交互,其他平台的命名规范如果不是驼峰式就需要声明 json key 映射。4.1 中增加了 keyEncodingStrategy 配置两种常见命名规范的自动转换:

let jsonString = """
[{
    "name": "MacBook Pro",
    "screen_size": 15,
    "cpu_count": 4
    }]
"""

struct Mac: Codable {
    var name: String
    var screenSize: Int
    var cpuCount: Int
}

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
let encoded = try encoder.encode(macs)

Parallel programming with Swift 1. Basics 2. Operation

第一篇介绍了使用 Swift 进行并行编程时的多种方式,从 Process 到更高级的抽象 Operation,如何控制并发的顺序,锁和信号的使用。

第二篇主要是讲 Operation,包括 API,生命周期,依赖以及封装的介绍。

这一系列由浅入深,配图清晰,顺便推荐一下他们团队 Flawless 的博客,里面有很多技术分享,质量都很高。

漫画:Git 二分 Debug,火速定位出错代码!

详细介绍了 Git 提供的二分法调试工具:git bisect。它可以按照我们选定的 commit 列表,进行二分分割,快速定位出出错的 commit。来帮我们缩小最小改动的代码,从而快速定位问题。作者还采用了漫画的形式,帮助读者加深印象。

工具

PodsUpdater--A macOS app which helps you manage dependency releases in your Podfile

一款协助你管理项目中 CocoaPods 依赖的小工具,能够清晰展示你项目内的依赖版本以及该依赖的最新版本,并提供自动适配兼容版本的功能。

分享笔者在使用过程中遇到一个坑,原因是某个比较旧的私有源配置的是 http 的 url,导致出现了fatal: could not read Username for 'http://git.privatesource.com': Device not configured,即该工具执行 pod repo update 的时候并没有权限去拉取你的私有源。解决方式也很简单,把旧的源里 url 修改成 ssh 的 url 即可,配置文件路径为 /Users/your_username/.cocoapods/repos/-private-podrepo/.git/config

CoreML 模型仓库

iOS11 所推出的 CoreML 让 App 开发者可以不用学习了解 Deep Learning ,不用亲自训练模型,拿训练好的模型就可以在 App 里快速使用。并且搭配开放了几个视频识别物体的模型 Object Detect,那么除了苹果开放的识别物体模型,现在还有哪些地方可以找到更多的训练好的 CoreML 模型呢?这里面介绍 3 个 Link,里面有很多训练好的有趣的模型,比如照片转油画 / 面部情绪识别 / 人物年龄猜测 / 文章分类 / 文字情绪识别等等,iOS 开发者的福音,可以拿来做一些有趣的个人 idea App

Carbon

Carbon 是一个可以在线将代码生成高逼格图片的工具,它具有以下特点:

  • 可从 GitHub gist 直接导入;
  • 高度自定义,可调整语法主题、窗体样式等参数;
  • 分享便捷,一键发布 / 保存图片。

GitHub 地址:github.com/dawnlabs/ca…

CTF Wiki

CTF(Capture The Flag,夺旗赛)起源于 1996 年 DEFCON 全球黑客大会,是网络安全技术人员之间的竞技比赛。

CTF Wiki 是一个自由的站点,主要包含了 CTF 中的基础知识、常见题型、解题思路以及常用工具等,可以帮助你更快地了解 CTF 竞赛以及网络安全相关知识,对安全领域相关知识感兴趣的同学千万不要错过。

GitHub 地址:github.com/ctf-wiki/ct…

本期编辑

@没故事的卓同学@四娘@mmoaay@享耳先森@EyreFree@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal

说明

🚧 表示需翻墙