# 老司机 iOS 周报 #1 | 2018-01-01

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

有建议或者有信息推荐可以到我们 [github](https://github.com/SwiftOldDriver/iOS-Weekly) 下面提 issue。

## 新闻

### [致广大用户关于 iPhone 电池及性能的说明](https://www.apple.com/cn/iphone-battery-and-performance/)

苹果对电池老化会导致 iPhone 性能下降做的沟通说明。表示 **从来没有、也永远不会通过任何手段，来有意缩短任何 Apple 产品的使用寿命，更不会降低用户体验来迫使大家升级设备**。为了安抚大家的不满，苹果将更换电池的费用下调了 390 元，从 608 元降到 218 元。不过这个降价不是永久性的，只持续到 18 年 12 月。

### [Swift 快要可以和 Python 无缝交互了](https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20171204/042029.html)

这是 Chris Lattner 大神到 Google 之后的第一个提案，让 Swift 可以和 Python 无缝交互，Chris 每次提案基本上都会带上 Demo，这一次也不例外，只用了不到一千行代码就把交互逻辑给实现了出来🤷‍♂️，大家可以直接下载这个 [playground](https://lists.swift.org/pipermail/swift-evolution/attachments/20171206/9103f31e/attachment.zip) 试一下用 Swift 写 Python 是什么感觉。

另外 Chris 还提出使用一套 DynamicMemberProtocol 去优化了 Python 交互的语法， 与 Python 的交互都是依赖于字符串，画风大概是这样的 `let a = np.call(member: "arange", args: 15).call(member: "reshape", args: 3, 5)`，如果实现了 DynamicMemberProtocol 的话，就可以在 Swift 里像 Python 代码一样调用 Python 的方法 `np.arange(15).reshape(3, 5)`，编译器不会给遵循了这个协议的对象做静态检查，但这本质上只是一个语法糖，编译时还是会转化为前者的格式去调用。

### [苹果宣布收购 Buddybuild](https://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651114092&idx=1&sn=2647b0230a12333e1b866e11165d7aa8)
Buddybuild 是著名的自动化 CI 托管服务平台，苹果收购后 Buddybuild 公司将会加入 Xcode 团队。期待 Xcode 对 CI 的支持将会更进一步。


### [Swift Weekly Brief 宣布停更](https://www.jessesquires.com/blog/swift-weekly-brief-hiatus/)

Jesse Squires 宣布停止更新 Swift Weekly，一直以来这个 News Letter 都是我了解 Swift 开发进度最主要的途径，现在要停更了，确实很可惜。

Jesse 提到停止更新的理由，主要是因为当初开始 Swift Weekly 的时候，Swift 刚刚开源，对于功能和设计的讨论非常非常多，并且 Mailing List 这种形式让人很难找到有价值的内容，所以这样一个 News Letter 在当时是非常有意义的。但现在 Swift 已经逐渐成熟，社区里的讨论变得越来越深入，而且 Swift 最近还从 Mailing List 迁移到了[论坛](https://forums.swift.org)上，相关资讯的获取已经变得越来越方便了，Swift Weekly 的存在价值也已经大不如前了，所以才打算停止更新。

但停更只是个人意义上的停更，Jesse 欢迎社区的人接手过去继续更新，并且在原文介绍了一系列接手的注意事项。

### [Apple 更新 App Store Review Guidelines，增加 VPN 和 loot boxes 等条款](http://www.appstorereviewguidelineshistory.com/)

Apple 于 2017.12.21 更新了其 App Store Review Guidelines. 主要变化集中在以下几个方面：

- 新上架 App 引入 pre-order 机制
- 虚拟物品抽奖必须公布各项概率(loot boxes)
- VPN 类应用如需在特定地区发布，必须提供相应许可信息
- 符合特定前提下，允许通过模板生成的 App 上架发布

### [LiberiOS jailbreak for iOS 11 officially released, includes support for the iPhone X](https://www.modmy.com/liberty-jailbreak-ios-11-released-includes-cydia-and-support-iphone-x)

LiberiOS 正式发布 iOS 11.0 - 11.1.2	的越狱工具，包括对 iPhone X 的支持。

## 文章

### [iOS 知识小集](https://github.com/southpeak/iOS-tech-set)

国内知名开发者 [@南峰子](https://weibo.com/touristdiary) 把过去微博上发出来的 iOS 开发知识整理了出来，发在了 GitHub 上，据介绍这一系列的微博已经有 1000w 的阅读量了！！！

### [Swift Tips](https://github.com/johnsundell/swifttips#53-string-based-enums-in-string-interpolation)

跟前面 iOS Tips 小集类似的项目，不同的是这个项目里讲的是一些 Swift 的小 Tips，里面 #7，#22 等技巧我都有实际用于项目中，推荐大家看一下。

### [Weak Arrays](https://www.objc.io/blog/2017/12/28/weak-arrays/)

objc.io 在这篇博客里简单介绍了在 Swift 中自定义弱引用数组的一种实现方式。

### [When and how to use Value and Reference Types in Swift](https://khawerkhaliq.com/blog/swift-value-types-reference-types/)

全面介绍了 Swift 中的值类型和引用类型的使用区别。

### [Building an enum based analytics system in swift](https://www.swiftbysundell.com/posts/building-an-enum-based-analytics-system-in-swift)

使用 enum 和 protocol 构建安全、高效、灵活的 Swift 事件统计系统。

### [Measuring Swift compile times in Xcode 9](https://www.jessesquires.com/blog/measuring-compile-times-xcode9/)

对 Xcode 进行一些配置看看哪些 Swift 代码拖慢了你的编译速度。

## 工具

### [App Host](https://github.com/pluosi/app-host)
一个轻量级的包托管网站，app-host 主要用于 iOS 和 Android 的包管理，作用类似于fir.im，不同之处是可以自由部署在内网，方便了公司项目保密。并且代码开源也可以方便根据各自需求进行定制化开发。

### [XcodeGen](https://github.com/yonaskolb/XcodeGen)
XcodeGen 是一个根据已有的代码文件 / 目录和简单的配置文件来生成 Xcode project 的开源工具，快速生成模板工程、将 .xcodeproj 从 Git 追踪中忽略、方便地和他人分享自己的工程配置等，无限可能，等你尝试。

## 代码

### [WCDB Swift](https://mp.weixin.qq.com/s/mf-JDZrTHAS0ViJBbpC1cA)

WCDB 是微信团队开源的 SQLite 数据库，近日放出 WCDB Swift 的 1.0 正式版，WCDB Swift 使用纯 Swift 编写，几乎不包含 Cocoa 的代码，且与 ObjC 版保持完全一致的功能。其基于 Swift 4.0 的 Codable 协议实现模型绑定，通过建立 Swift 类型与数据库表之间的映射关系，使得开发者可以通过类对象直接操作数据库。

虽然项目没有实际使用于微信中，但这只是第一步嘛，并且文章最后还表示测试用例的代码覆盖率已经达到了 91.34% 了🤑，所以大家真的可以考虑在项目中使用。

### [Task automation in Swift with Sake](http://ppinera.es/2017/12/15/sake.html)

iOS 还没有使用 Swift 语言编写的自动化工具，目前流行的都是采用 bash、ruby 编写的。于是作者尝试利用 Swift 写了 Sake。这个项目目前还处于早期。

### [Fluid Slider](https://github.com/Ramotion/fluid-slider)

Ramotion 出品的滑动控件。

### [微信跳一跳可以直接更改分数，POST 请求没有校验](https://gist.github.com/feix/6dd1f62a54c5efa10f1e1c24f8efc417)

v2ex 上也有[获得微信小游戏跳一跳源码](https://www.v2ex.com/t/419352)的讨论。

## 书

### [Swift 进阶](https://objccn.io/products/advanced-swift/)

Swift 经典书籍《Swift 进阶》更新了 Swift 4 的相关内容。

### 本期编辑

[@没故事的卓同学](https://weibo.com/1926303682/profile)，[@四娘](https://kemchenj.github.io)，[@mmoaay](https://weibo.com/u/1302422271)，[@享耳先森](https://github.com/iblacksun)，[@EyreFree](https://weibo.com/eyrefree777)
