# 老司机 iOS 周报 #46 | 2018-12-03

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## 新闻

### [Apple 举办编程一小时活动](https://www.apple.com/cn/today/collection/hourofcode/)

在 12 月 1 日至 14 日期间，Apple 将在全国的 Apple Store 零售店举办「编程一小时」活动，现在已开放报名。你将有机会从编程基础知识入手，用 Swift 语言写代码，为机器人编程。也许这一小时的课程，将开启你对编程一生的热爱。

### [App Store Connect Holiday Schedule](https://developer.apple.com/news/?id=11272018)

因圣诞假期，App Store 将在 12 月 23 日至 27 日停止应用审核。

## 文章

### 🐕 [Animations are assets: using Core Animation archives on iOS](https://rambo.codes/ios/2018/11/11/animations-are-assets.html)

作者在逆向过程中发现了 `Animations` 也可以作为资源归档，并且在2016年的时候已经上线了一款使用该技术的 APP。
简单而言，就是将 `Core Animation` 添加完动画效果的 `layer` 利用 `NSKeyedArchiver/NSKeyedUnarchiver` 进行归档，然后在 APP 需要动画的时候进行加载，文中附有 `Demo`。

- 使用 [Kite软件](https://kiteapp.co/) 进行方便动画的制作，并且导出 `CAAR` 文件（也可以自行代码 `archiver` 后导出）。
- 因为导出的文件是一个 `CoreAnimation layer tree`，你可以实现颜色改变，形变等 `CoreAnimation layer` 的动画效果。
- `CAAR` 文件独立，意味着你可以放在 `Asset Catalog`， `Bundle`，甚至服务器下发。
- 不需要依赖另外的第三方动画框架。

延展阅读：

- [Kite Compositor：原型设计新玩具](https://zhuanlan.zhihu.com/p/25673691)

### 🐢 [iOS 12 Password Tools: Improving User Security and Experience](https://www.raywenderlich.com/7162-ios-12-password-tools-improving-user-security-and-experience)

在本教程中，您将使用这些 iOS 12 安全工具，使您的用户能够：
- 在您的网站和您的应用之间共享和同步密码。
- 保存并更新iOS密码。
- 自动生成安全密码。
- 访问通过短信发送的验证安全代码，无需离开应用。

### 🐕 [Extending optionals in Swift](https://www.swiftbysundell.com/posts/extending-optionals-in-swift)

Swift 中的可选值实际是定义了一个 `Optional<Wrapped>` 枚举，所以我们可以通过扩展枚举，让我们以一种更好的方式处理可选值。

我们可以给枚举添加一个扩展方法，当值为 `nil` 的时候抛出 `error`，直接将方法接入到调用末尾，则能轻松将缺失值转换为一个错误。

当然你也可以发挥更多想象力，添加扩展将值的逻辑判断代码、类型匹配代码等等操作封装起来，最终得到一个更好，更容易阅读的调用链。

### 🐎 [When to use UserDefaults, Keychain, or Core Data](https://fluffy.es/persist-data/)

本文总结了我们开发过程中常用的几种数据存储方式的使用场景，以及它们的使用方法和注意点。都是比较初级的知识，但作者写得很详细，总结的也很到位。

- UserDefaults

    用来存储不敏感的少量数据，比如需要持久化的用户设置、游戏分数、播放的歌曲名等。
	
- Keychain

    用来存储相对敏感的少量数据，比如用户密码、内购状态、令牌密钥等。
    
- Core Data

    用来存储数据量大的列表、关系型数据，以及需要查询和筛选的数据，比如 Todo 列表、文章评论等。


### 🐢 [A Comparison of Swift and Kotlin Languages](https://www.raywenderlich.com/6754-a-comparison-of-swift-and-kotlin-languages)

尽管 Swift 和 Kotlin 在语法上有太多相似的地方，但也仍然有很多核心特性上的差异。本文重点介绍了 Swift 和 Kotlin 之间的异同。

从代码风格和语法层面详细对比了属性，数据结构，方法，闭包，可选类型，流程控制，类，扩展，协议，功能性语法等重要语言特性的相似点和不同点。同时推荐了许多其他对比 Swift 和 Kotlin 的文章。

### 🐢 [手把手教你给企业微信 Mac 客户端去除水印](https://zhaoxinyu.me/2018-11-24-crack-wew/)

目前，许多公司使用了企业微信作为内部聊天工具，既然是企业级的，免不了界面会有水印，这可以使公司的内部信息被员工截图散播出去时候可以有效的溯源等等。

水印有两种情况，一种是在客户端合成的，另一种是 server 下发的图片就带有水印。前者通过反编译客户端进行去除，而后者相对较难，只能通过图像技术去做。企业微信 Mac 的客户端水印就属于前者。

所以，文中笔者就尝试反编译的手段成功去除了水印。不过，本文更适合作为反编译的实战教学文章来观看，一方面是截图公司的信息散布出去本事也并不好，另一方面是不能保证微信企业客户端没有暗水印。

### 🐕 [Evaluating SwiftSyntax for use in SwiftLint](https://www.jpsim.com/evaluating-swiftsyntax-for-use-in-swiftlint/)

之前 SwiftLint 是基于 SourceKit 封装了一套 API 去处理语法规则的。现在 SwiftSyntax 出来之后，本来打算使用它去简化之前的语法规则，结果发现运行效率竟然变低了。文中笔者给出了具体原因：SwiftSyntax 对于每个文件解析都新开一个 Swift 编译器实例拖慢了整体速度。

### 🐕 [解读 App Store 审核黑箱政策 —— 远没有你想象的那么邪恶](https://juejin.im/post/5bfd2ae7f265da61141c4bf7?utm_source=gold_browser_extension)

作者在 App Store 上架了 15 款应用，与 App Store 审核的往来超过几百次，在这篇文章里，作者分享了他对 App Store 的理解和看法，具体包括 App Store 采用黑箱审核的原因、为何难以得到清楚的答复、双标情况以及对于 App Store 审核的几点建议。


## 工具

### [ReadyForBAT - iOS 面试准备之思维导图](https://github.com/MisterBooo/ReadyForBAT)

作者在学习完慕课网 iOS 面试实战项目后利用思维导图做了总结。这套导图覆盖面较广，可以给正在跳槽或者准备年后跳槽的各位同行用作参考，好好梳理一遍自己的知识体系。

### [Komondor - Git Hooks for Swift projects](https://github.com/orta/Komondor)

Komondor 是一款帮助简化 Git Hook 设置的工具，它依赖于 Swift Package Manager 的运行，只要在 Package.swift 里加上依赖，然后像这样去指定 hook 就可以完成设置：

```swift
import PackageConfig

let config = PackageConfig([
    "komondor": [
        "pre-push": "swift test",
        "pre-commit": [
            "swift test",
            "swift run swiftFormat .",
            "swift run swiftlint autocorrect --path Sources/",
            "git add .",
        ],
    ],
])
```

## 代码

### [appstoreconnect-swift-sdk](https://github.com/AvdLee/appstoreconnect-swift-sdk)

上个月苹果终于将 WWDC 2018 里提到的 App Store Connect API 开放给广大开发者。这是一个基于 Swift 编写的 SDK，可以让开发者方便地使用苹果开放的这些接口。


## 音视频

### [ggtalk | 聊聊 Swift 这四年（上）](http://talk.swift.gg/5)

Swift 自第一次推出到现在，已经有了四年的时间。这四年语言本身经过了很多发展，很多改变，而国内的 iOS 开发行业，Swift 开发者的生活和工作，也发生了很多变化。从 14，15年的黄金时代到16年的 ‘iOS 没人要了’，再到18年的 ‘iOS 又有人要了’，今年，Swift 5.0 终于提出要把 ABI 稳定放在首位，这应该算一个 Swift 重要的一个里程碑。在这样一个时间点，ggtalk 请了几个使用 Swift 的程序员，一起聊了聊 Swift 的这四年（ggtalk 是国内 Swift 社区 SwiftGG 推出的程序员闲聊节目）。有空的时候可以听听，相信同样写 Swift 的你，会有共鸣。

## 内推

- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507)：社招、应届、实习均可。项目在技术上很有挑战性，团队技术氛围极好。诚心希望各路大神前来切磋，也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com，暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~

- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0)：负责支付宝会员及帐号业务线，地点北京国贸，金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到：weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com （同一个邮箱）或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。

- 上海即刻：如果你认识聪明勤奋、胆大心细、有追求的工程师，那就来加入我们吧！任何推荐或简历可直接发给 Jason（即刻 iOS leader）: jasy@okjike.com，或微博 [@JasonYuh](https://weibo.com/jasonyuh)。

- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html)：奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域， 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。

- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D)：如想了解更多深圳头条的信息，可以加小T微信：tomtan，切磋技术和聊情怀都可以喔~~~~

- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society)：简历可以发送到邮箱 raozhizhen@gmail.com，或者添加我（[@AidenRao](https://weibo.com/AidenRao)）的微信 jingmu1994 了解更多公司及岗位信息。

- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度)：百度教育事业部，地点：北京西二旗。部门下面有百度阅读，百度文库，百度爱听等 App 产品。团队技术氛围浓厚，有兴趣的同学欢迎将简历发送到我的邮箱：lizelei@baidu.com。

## 关注我们

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

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

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

## 本期编辑

[@四娘](https://kemchenj.github.io)，[@享耳先森](https://github.com/iblacksun)，[@Damonwong](https://weibo.com/damonone)，[@折腾范儿_味精](http://weibo.com/agvicking)，[@张嘉夫](https://weibo.com/2949394297)，[@AidenRao](https://weibo.com/AidenRao)，[@Parsifal](https://weibo.com/parsifalchang)，[@aaaron7](https://weibo.com/aaaron7)，[@方秋枋](https://weibo.com/100mango)，[@kyo](https://github.com/KyoLi)，[@tom510230](https://xiaozhuanlan.com/u/6682065345)，[@anotheren](https://anotheren.com)，[@水水](https://www.xuyanlan.com)，[@looping](https://github.com/looping)，[@老老老老老老老驴](https://weibo.com/u/6090610445)，[@小非86](https://weibo.com/xuyafei86)，[@邦ben](http://weibo.com/linwenbang)，[@红纸](https://github.com/nianran)，[@含笑饮砒霜](http://chinafish.news)，[@JimQ](https://github.com/waz0820)

## 说明

🚧 表示需翻墙，🌟 表示编辑推荐

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
