老司机 iOS 周报 #4 | 2018-01-22ios-weekly

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

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

欢迎来自百度的@折腾范儿_味精加入我们的编辑团队。

感谢来自饿了么的@mmoaay为老司机画的 logo,真是 666。

新闻

库克:将允许 iPhone 6 / 6s / 7 手动解除降速[1]

持续发酵的苹果电池降频门,苹果再退一步。库克接受采访时表示会在系统中增加一项设置,用户可以禁用苹果为了保护电池而设的降频策略。最新的 11.2.5 测试版中已经可以查看电池状况。

微信打赏功能将在 iOS 上回归[2]

在「微信公开课 Pro」的主题演讲中,张小龙表示打赏功能将回归,并将修改打赏机制,打赏金额将直接支付给内容创作者。

Apple 更新 App Store 网页预览界面[3]

Apple 在 iOS 11 中对 App Store 进行重新设计,现在终于对网页版动刀,跟上 iOS 上的简洁和卡片式风格。

苹果预计下周修正文字讯息漏洞「ChaiOS」[4]

跟之前的 iMessage 漏洞类似,收到一个特殊链接的短信之后,设备就会重启,主要是因为 iMessage 会自动加载网页信息生成预览界面,在这一个网页里嵌入几十万个不必要的字符就可以系统崩溃,据悉这个 bug 已经在 iOS 11.2.5 beta 6 里修复了。[5]

文章

蜂鸟商家版 iOS 组件化 / 模块化实践总结[6]

文章详实介绍了饿了么物流移动 iOS 开发组的 Swift / OC 混编项目「蜂鸟商家版」进行组件化 / 模块化改造的实践历程,有类似需要的同学可以参考一下。

iPhone X home button[7]

iPhone X 用来替换物理 home 键的虚拟 home indicator,可能展示在任何一个 view 上,也展示在锁屏界面上,home indicator 背景颜色会根据背后展示的 view 而改变。这是怎么实现的呢?Sash Zats 深入底层来揭示秘密。

从 Aspects 源码中我学到了什么[8]

作者分享了自己阅读 Aspects 代码之后的收获,另外博客里还有几篇 YYKit 的源码阅读分享,质量都很高。

iOS 如何进行网络测速[9]

@Joy_xx 大佬的文章,主要分享了两种常见的网络测速方案。文章内容简短,只谈思路,不涉及技术细节。想做网络测速又没有思路的童鞋可以看看。

Useful Optional Extensions[10]

文章分享了各种 Optional 的实用扩展。通过这些扩展,可以用更少的代码来实现判断非空、设置默认值、设置默认行为、处理异常、定义多个可选值之间的关系、判断执行以及条件过滤等功能。文章末尾还给了一个例子,通过代码对比的方式,鼓励大家使用扩展 Optional 的方式来实现业务逻辑。

WebAssembly 的那些事

文章介绍了 WebAssembly 这门在浏览器里跑编译后的字节码的神奇技术,可以把 C++ / Rust 编译成字节码下发给浏览器,进行高效的字节码运行,而非传统 JS 解释执行。文章还手把手教你亲自写一个 C,先编译成 asm.js,在生成 wasm 文件执行,也教你把Rust,编译成 wasm 执行。

objc - 编译 Runtime 源码 objc4-680[11]  objc - 编译 Runtime 源码 objc4-706[12]

从苹果开源网站上,我们可以找到很多有意思的开源项目。objc4 是其中一个,也即我们通常说的 Runtime 源码,我们遇到的 libobjc.A.dylib 就是用它编译出来的。

这两篇文章就是介绍如何将从苹果网站上下载的 Runtime 源码,创建工程进行编译,运行,调试,从而更深刻的学习和理解 Runtime 源代码的,并且文章中留有作者的 GitHub 可以直接下载可编译版的 2 套源码。

WKWebView 强大的新特性[13]

越来越多的项目逐渐开始使用 WKWebView 进行网页展示,是否苦恼于 WKWebView 对于操作 Cookie 的天坑以及不支持 NSURLProtocol 的弊端?这篇文章介绍了 iOS11 的新 API 为你解决了这些问题,不仅包括操作 Cookie 的 WKHTTPCookieStore,处理自定义协议的 WKURLSchemeHandler,还有用于广告屏蔽的新 API WKContentRuleList

Building for the Blockchain(面向区块链开发)[14]

在区块链上,你不需要部署任何中心化的服务器,这就意味着单点失败的风险为零。如果你的整个技术栈都是去中心化的,那么就不需要引入“可信”的第三方,而没有第三方则意味着可以 100% 对抗审查。区块链技术带来了数据开放的新机会,基于区块链的去中心化数据库未来可期。

YC 是著名的科技企业孵化机构。发布在 YC 官博上的这篇文章介绍了区块链技术对开发者的意义。

给 Bool 扩展一个 Toggle 方法[15]

objc.io 介绍的小技巧,给 Bool 扩展一个 toggle 方法之后就可以避免 myVar.prop1.prop2.enabled = !myVar.prop1.prop2.enabled 这种丑陋的写法了,可以直接写为 myVar.prop1.prop2.enabled.toggle()

并且已经起草提案[16]给 Swift Evolution 了,这个方法有可能在以后会加入标准库。

今日头条算法原理(全)

今日头条公开了他们推荐算法的原理。介绍了如何做到内容、用户、环境(工作场合、通勤、旅游等不同的场景)的匹配预估。

工具

CocoaPods 发布 1.4.0[17]

CocoaPods 发布了 1.4.0,带来了很多强大的功能。如下:

  • Test specs 支持配置 App host

  • 脚本配置 支持 Podfile 和 Podspec 配置脚本,CocoaPods 会根据你在Podfile 和 Podspec 的关联脚本描述,自动添加相关脚本到不同的Target;

  • 支持静态库 使用 use_frameworks! 同时支持 static framework 和 dynamic framework。只要开源库的作者在 podspec 文件中添加 s.static_framework = true,CocoaPods 就会把这个库配置成static framework。同时支持 Swift 和 Objective-C;

  • Podspec 文件可以配置 Swift 的版本号

  • 过渡到https 当你发布一个 Pod 不支持 https 的时候,会有一个警告。在未来的某个版本,将不再支持不支持 https 的 Pod。

Design+Code[18]

Design+Code 是一个教你从零开始设计、开发一款 App 直到在 App Store 上架的 iOS App,不需要任何编程基础。其中包括 iOS 11 的设计理论例如颜色、动画以及为 iPhone X 进行适配等,少见的设计和开发兼具的交互式教学工具,值得一试。

Cocoapods-Packager[19]

CocoaPods 官方工具,可以根据现有的 podspec 生成 framework 或 static library,给我们的 Pods 库发布工作带来了更多选择和想象空间。

代码

SwiftyUserDefaults[20]

利用 NSUserDefaults 存储一些数据在开发中是常用的事。但是每次存取都依赖于字符串类型的 key、类型也不校验,在实际开发中也带来了不小困扰。这个库利用 Swift 的枚举和泛型优化了 NSUserDefaults 的使用体验,思路值得借鉴。

Turi Create[21]

「Turi Create」是 Apple 的机器学习框架,目前已经开源在 Github 上。它简化了定制机器学习模型的开发。就算你不是一个机器学习专家,也可以在你的应用中添加建议、对象检测、图像分类、图像相似性或活动分类。让开发者更容易的构建机器学习模型。

objc.io 新书「App Architecture」[22]

本书预计四月完成,但提供「早鸟」版购买,每周可以收到新内容。

音视频

Swift Unwrapped #42 Conditional Conformance[23]

这期很简短,只是简单地聊了一下,之前 Ole 大神发过一篇文章讲了如何查看 Swift 源码,里面讲到了一个代码生成工具 gyb,主要是为了解决 Swift 泛型能力不足的问题,现在实现了 Conditional Conformance 之后就可以重构掉之前很大一部分 gyb 代码。并且单单只是重构掉 Slice 类型,就已经让 Swift 标准库的二进制文件缩小了 5% ????,真是越来越期待 Swift 4.1 的发布了!!!

另外 Swift 的博客还发布了一篇文章[24]专门讲解这个功能,有兴趣的人可以去看看。

本期编辑

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

内推

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

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

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

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

关注我们

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

老司机 iOS 周报 #4 | 2018-01-22

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

说明

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

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

参考资料

[1] 

库克:将允许 iPhone 6 / 6s / 7 手动解除降速: http://digi.163.com/18/0119/06/D8G91D3R001680N8.html

[2] 

微信打赏功能将在 iOS 上回归: http://tech.sina.com.cn/i/2018-01-16/doc-ifyqqieu6753280.shtml

[3] 

Apple 更新 App Store 网页预览界面: https://itunes.apple.com/cn/app/id911261462

[4] 

苹果预计下周修正文字讯息漏洞「ChaiOS」: https://cn.engadget.com/2018/01/18/apple-fix-for-chaios-bug-next-week-imessage/

[5] 

据悉这个 bug 已经在 iOS 11.2.5 beta 6 里修复了。: http://www.idownloadblog.com/2018/01/18/ios-11-2-5-beta-6-fixes-the-chaios-text-bomb-messages-bug/

[6] 

蜂鸟商家版 iOS 组件化 / 模块化实践总结: https://juejin.im/post/5a620cf5f265da3e36415764

[7] 

iPhone X home button: http://blog.zats.io/2017/12/27/iPhone-X-home-button

[8] 

从 Aspects 源码中我学到了什么: https://lision.me/aspects/

[9] 

iOS 如何进行网络测速: https://juejin.im/post/5a62c2416fb9a01ca713893d

[10] 

Useful Optional Extensions: https://appventure.me/2018/01/10/optional-extensions/?utm_campaign=Revue%20newsletter&utm_medium=Newsletter&utm_source=AppCoda%20Weekly

[11] 

objc - 编译 Runtime 源码 objc4-680: http://blog.csdn.net/wotors/article/details/52489464

[12] 

objc - 编译 Runtime 源码 objc4-706: http://blog.csdn.net/wotors/article/details/54426316

[13] 

WKWebView 强大的新特性: http://www.cnblogs.com/zhanggui/p/8260136.html

[14] 

Building for the Blockchain(面向区块链开发): https://zhuanlan.zhihu.com/p/32914619?iam=7a313be561811283ea95625f373cdd99

[15] 

给 Bool 扩展一个 Toggle 方法: https://www.objc.io/blog/2018/01/16/toggle-extension-on-bool/

[16] 

起草提案: https://github.com/apple/swift-evolution/pull/782/files

[17] 

CocoaPods 发布 1.4.0: http://blog.cocoapods.org/CocoaPods-1.4.0/

[18] 

Design+Code: https://itunes.apple.com/cn/app/design-code/id1281776514?mt=8

[19] 

cocoapods-packager: https://github.com/CocoaPods/cocoapods-packager

[20] 

SwiftyUserDefaults: https://github.com/radex/SwiftyUserDefaults

[21] 

Turi Create: https://github.com/apple/turicreate

[22] 

objc.io 新书「App Architecture」: https://www.objc.io/books/app-architecture/

[23] 

Swift Unwrapped #42 Conditional Conformance: https://spec.fm/podcasts/swift-unwrapped/105029

[24] 

一篇文章: https://swift.org/blog/conditional-conformance/

相关文章: