老司机 iOS 周报 #7 | 2018-02-12

老司机 iOS 周报 #7 | 2018-02-12_第1张图片

老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

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

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

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

iOS 关键组件 iBoot 源代码泄露

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

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

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

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

文章

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

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

  • unrecognized selector crash[6]

  • KVO crash[7]

  • NSNotification crash[8]

  • NSTimer crash[9]

  • Container crash(数组越界,插 nil 等)[10]

  • NSString crash (字符串操作的 crash)[11]

  • Bad Access crash (野指针)[12]

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

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

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

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

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

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

iOS 架构之 View 层的架构方案

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

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

Crash 符号化[18]

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

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

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

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

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

  • 将其他语言编译成 WebAssembly 做到可以在浏览器里运行;

  • WebAssembly 在游戏引擎与图形渲染方面的运用;

  • 是加速原本的 js 代码的运行。

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

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

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

Swift 4.1 improves Codable with keyDecodingStrategy[22]

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[23] 2. Operation[24]

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

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

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

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

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

工具

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

一款协助你管理项目中 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 模型仓库[27]

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

  • https://coreml.store/

  • https://github.com/likedan/Awesome-CoreML-Models

  • https://github.com/SwiftBrain/awesome-CoreML-models

Carbon[28]

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

  • 可从 GitHub gist 直接导入;

  • 高度自定义,可调整语法主题、窗体样式等参数;

  • 分享便捷,一键发布 / 保存图片。

GitHub 地址:https://github.com/dawnlabs/carbon[29]

CTF Wiki[30]

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

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

GitHub 地址:https://github.com/ctf-wiki/ctf-wiki[31]

内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想找工作,点这里:https://www.yuque.com/iosalliance/article/bhutav

如果你想招人,点这里:https://www.yuque.com/iosalliance/article/ycyhf3

当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。

关注我们

我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。

老司机 iOS 周报 #7 | 2018-02-12_第2张图片

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

说明

???? 表示需某工具,???? 表示编辑推荐

预计阅读时间:???? 很快就能读完(1 - 10 mins);???? 中等 (10 - 20 mins);???? 慢(20+ mins)

参考资料

[1]

Swift 4.1 新增 -Osize 优化模式降低代码尺寸: https://swift.org/blog/osize/

[2]

Apple 已确认这一事件: https://www.cnet.com/news/apple-calls-leaked-iphone-source-code-outdated/

[3]

苹果公司与内蒙古签订协议,将在中国国内建设第二个数据中心: https://readhub.me/topic/1XVjDPeuSXk

[4]

iOS KVO crash 自修复技术实现与原理解析: https://zhuanlan.zhihu.com/p/33662572

[5]

《大白健康系统--iOS APP 运行时 Crash 自动修复系统》: https://neyoufan.github.io/2017/01/13/ios/BayMax_HTSafetyGuard/

[6]

unrecognized selector crash: https://neyoufan.github.io/2017/01/13/ios/BayMax_HTSafetyGuard/#unrecognized%20selector

[7]

KVO crash: https://neyoufan.github.io/2017/01/13/ios/BayMax_HTSafetyGuard/#kvo

[8]

NSNotification crash: https://neyoufan.github.io/2017/01/13/ios/BayMax_HTSafetyGuard/#notification

[9]

NSTimer crash: https://neyoufan.github.io/2017/01/13/ios/BayMax_HTSafetyGuard/#NSTimer

[10]

Container crash(数组越界,插 nil 等): https://neyoufan.github.io/2017/01/13/ios/BayMax_HTSafetyGuard/#container

[11]

NSString crash (字符串操作的 crash): https://neyoufan.github.io/2017/01/13/ios/BayMax_HTSafetyGuard/#NSString

[12]

Bad Access crash (野指针): https://neyoufan.github.io/2017/01/13/ios/BayMax_HTSafetyGuard/#badaccess

[13]

BayMaxProtector: https://github.com/sunday1990/BayMaxProtector

[14]

[译] Swift 算法学院 - 查找数组中第 K 大值: https://juejin.im/post/5a732b4b5188257a5d2b0161

[15]

raywenderlich/swift-algorithm-club: https://github.com/raywenderlich/swift-algorithm-club

[16]

数据结构 & 算法 in Swift (二):算法概述和排序算法: https://juejin.im/post/5a7b4101f265da4e7071b097

[17]

iOS 应用架构谈 view 层的组织和调用方案: https://casatwy.com/iosying-yong-jia-gou-tan-viewceng-de-zu-zhi-he-diao-yong-fang-an.html

[18]

Crash 符号化: http://saitjr.com/tags/crash/

[19]

Swift 中关于操作符的那些事儿: https://juejin.im/post/5a79552c5188257a7c6c3296

[20]

WebAssembly 能干什么?8 个 WebAssembly 应用案例: http://www.techug.com/post/webassembly-application-example.html

[21]

[译]在 Git 中保护 iOS 项目的敏感信息: https://juejin.im/post/5a7ae875f265da4e983efac7

[22]

Swift 4.1 improves Codable with keyDecodingStrategy: https://www.hackingwithswift.com/articles/52/swift-4-1-improves-codable-with-keydecodingstrategy

[23]

1. Basics: https://medium.com/flawless-app-stories/basics-of-parallel-programming-with-swift-93fee8425287

[24]

2. Operation: https://medium.com/flawless-app-stories/parallel-programming-with-swift-operations-54cbefaf3cb0

[25]

Flawless 的博客: https://medium.com/flawless-app-stories/tagged/ios

[26]

PodsUpdater--A macOS app which helps you manage dependency releases in your Podfile: https://github.com/kizitonwose/PodsUpdater

[27]

CoreML 模型仓库: https://coreml.store/

[28]

Carbon: https://dawnlabs.io/carbon

[29]

https://github.com/dawnlabs/carbon: https://github.com/dawnlabs/carbon

[30]

CTF Wiki: https://ctf-wiki.github.io/ctf-wiki/

[31]

https://github.com/ctf-wiki/ctf-wiki: https://github.com/ctf-wiki/ctf-wiki

你可能感兴趣的:(python,java,编程语言,人工智能,github)