老司机 iOS 周报,只为你呈现有价值的信息。
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
Swift 4.1 将随 iOS 11.3、Xcode 9.3 一起发布。Optimization Level
新增 -Osize
模式,降低编译后代码尺寸。按官方描述,启用 -Osize
后代码尺寸将降低 5%-30%,而性能影响可以忽略不计(小于 5%)。
另外,还从 Optimization Level
独立出 Compilation Mode
,可选 Single File
和 Whole Module
。
iBoot
源代码泄露有匿名开发者在 GitHub 上传了 iOS 核心组件
iBoot
的源代码,iBoot
是 iOS 关键的源代码之一,它确保了操作系统的可信任启动,换句话说,它是加载 iOS 的程序,是开启 iPhone 运行的第一个进程,它加载并验证内核是否被苹果正确签名,然后执行,就像 iPhone 的 BIOS 一样。
Apple 已确认这一事件[2]并表示泄漏的是 iOS 9 的代码。
苹果公司将在内蒙古乌兰察布市,建设中国第二个数据中心,于 2020 年开始投入运营,继而形成“南贵北乌”两个数据中心的格局。
一年前网易杭研的博客《大白健康系统--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 时进行状态的更新。
介绍了查找数组中第 K 大值的算法。更多的基于 Swift 的算法例子可以看 raywenderlich/swift-algorithm-club[15]。
本篇是《数据结构 & 算法 in Swift》系列连载的第二篇,首先简单地讲解了算法基础,包括算法的概念、时间复杂度与空间复杂度以及递归。然后结合 Swift 代码实现讲解了排序算法,包括选择排序、插入排序、归并排序和快速排序。
在前两年 Casa 分享的 iOS 应用架构谈 view 层的组织和调用方案[17] 之后,这是圈内现在新鲜出炉的又一篇 view 层架构分析文章。Casa 的文章最后站在更宏观的角度去提出 view 层架构模式需要遵循的"拆分三大心法"和"设计四大心法"。
这篇篇幅相对要少一些,该作者从「如何评价一个架构方案」-> 「MVC / MVVM / MVP / VIPER 等几种主流的架构模式简析」-> 「团队内最终的方案」,循序渐进地分享了适合自己团队的架构方案实践过程,对于初入架构设计的同学会相对更加友好一些。笔者建议先读懂这篇文章后,再细细咀嚼 Casa 的文章。
作者一共写了三篇文章,从 基本流程与相关命令 到 symbolicatecrash 源码浅析与优化 以及最后的 Mach-O 与 atos,由浅入深的解释了 iOS Crash 从产生到符号化的整个过程。
这篇文章主要是介绍了一个处理 Error 的技巧,通过自定义操作符来简化错误处理的代码,没有复杂的逻辑和抽象,简单实用,强烈推荐????
WebAssembly 的特点是在浏览器里面他运行的比 js 快,虽然还是一个提案中的技术,但是各大浏览器厂商都已经跟进,因此有了很多 WebAssembly 实际应用案例,这篇文章就介绍了 8 个案例,从这里面的介绍可以看到 WebAssembly 普遍被应用到了这几个方向
将其他语言编译成 WebAssembly 做到可以在浏览器里运行;
WebAssembly 在游戏引擎与图形渲染方面的运用;
是加速原本的 js 代码的运行。
如果要开源的代码涉及敏感信息,比如 API Key,HMAC secrets 或密码,那么比较好的方式是把它们放在新建的 xcconfig 文件里,Git 再忽略这些文件。最后新建不把值包含进去的示例配置 xcconfig 文件。
其它开发者此时只需要将示例配置文件填值,再重命名一下即可轻松运行不包含敏感信息的项目。
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)
第一篇介绍了使用 Swift 进行并行编程时的多种方式,从 Process 到更高级的抽象 Operation,如何控制并发的顺序,锁和信号的使用。
第二篇主要是讲 Operation,包括 API,生命周期,依赖以及封装的介绍。
这一系列由浅入深,配图清晰,顺便推荐一下他们团队 Flawless 的博客[25],里面有很多技术分享,质量都很高。
详细介绍了 Git 提供的二分法调试工具:git bisect。它可以按照我们选定的 commit 列表,进行二分分割,快速定位出出错的 commit。来帮我们缩小最小改动的代码,从而快速定位问题。作者还采用了漫画的形式,帮助读者加深印象。
一款协助你管理项目中 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
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 是一个可以在线将代码生成高逼格图片的工具,它具有以下特点:
可从 GitHub gist 直接导入;
高度自定义,可调整语法主题、窗体样式等参数;
分享便捷,一键发布 / 保存图片。
GitHub 地址:https://github.com/dawnlabs/carbon[29]
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)会推送消息,欢迎关注。
同时也支持了 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/
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