老司机 iOS 周报 #35 | 2018-09-10
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
Swift Server 工作组
Swift Server 工作组现在正式宣布进入下一个阶段,工作组接下来的目标是建立一套健康强壮的生态系统,让开发者可以更容易找到高质量的库和工具。其实早在 2016 年这个工作组就已经成立了,当时的目标是创建一套通用的底层 API,供上层的 Swift 服务端框架使用,这就是 Swift-NIO,那么接下来实际要做些什么呢?
类似于 Swift 的核心开发团队,这个工作组会负责提供总体的技术方向和制定标准,围绕 Swift Server 去构建一系列的服务端生态,工作组的成员包括了来自苹果,IBM 和 Vapor 的工程师,他们也会积极参与开发,并且希望社区也可以参与到这个过程中,目前工作组已经在论坛里列了一份草稿去描述未来的工作方向,包括了工具链,Database Driver,分布式系统架构等等。
BTW,Swift 官网把 Server Work Group 放到了 Focus Areas 那一栏里,表现出了对于服务端重视。(同一栏里的还有 ABI Stability)
10 月 3 号起所有 App 必须在 App Store Connect 里配置隐私政策链接
10 月 3 日起,所有新的应用和更新的应用程序都必须在 App Store Connect 里配置隐私政策链接。隐私政策必须清晰且直白的告知用户,他们的应用会收集什么数据,以及根据他们的隐私保护协议,这些被收集好的数据会被如何利用,幷确认是否有第三方机构有权接触到这些数据。
文章
🐕 Early returning functions in Swift
Early Return, 顾名思义,就是早点儿 return 的意思。作者指出当我们做一些分支逻辑的时候,结合 guard 来在不满足条件的时候直接 return 掉 function,可以使得我们的代码更加清晰,以及更易于 debug。不过我个人认为对于类似的逻辑,更合理的逻辑应该是用 do{} while(false)
, 在不满足条件的时候直接 break 这样确保函数有一个单一的 exit point,更有可维护性。除了 Early Return,文章还推荐使用函数来封装复杂的条件判断,使代码更具可读性。
总体来说,文章深度一般,但是探讨的 case 还是比较有趣的,可以看看。
🐎 TODO FIXME And Compiler Directives
Swift 4.2 中添加了两个新的编译器命令,#warning("message")
和 #error("message")
,可以让你的代码在编译的时候,产生警告及错误。
🐎 iOS App 连接外设的几种方式
如果开发的应用功能涉及到和硬件交互,那么知道 iOS app 连接外设有几种方式就很重要了。
- 无线的连接是日常里非常常见的蓝牙、WIFi。
- 有线分成两派:
- MFI:苹果认证的外设。亲儿子 CarPlay 是特供的 NCM。其他外设则是基于 External Accessory Protocol,通过引入 ExternalAccessory.framework 进行通讯。但是 MFI 的申请门槛非常高。
- 没什么卵用的 USB 热点共享。
spirit-jsb 推荐
🐎 iOS 如何精确还原 UI 稿多行文字间距
大家开发中一定遇到过文字间距如何精确还原的问题,不论是 PhotoShop + 标注工具
还是 Sketch
。文章介绍了通过设置 minimumLineHeight
maximumLineHeight
,然后利用 baselineOffset
修正完美还原多行文本间距。
🐎 Why you’re not supposed to call description
大家在使用 Swift 的时候,一定会经常把一些任意的字符串、整型或者对象作为调试信息的一部分来输出到控制台。可能你注意过 CustomStringConvertible 和 CustomDebugStringConvertible 这两个协议,还有 String(describing:) 但是却不太清楚其中有什么区别。本文作者讲解了这几个类型分别做些什么,以及为什么使用时调用 String(describing:) 和 String(reflecting:) 是最佳的选择。
🐎 Practical Dynamic Type
在 iOS 11 之前,如果想根据 iOS 系统字体大小来动态调整字体尺寸,只能观察 UIContentSizeCategoryDidChange,并在变动发生时手动渲染视图。但 iOS 11 推出了一些改进,方便 app 针对视弱用户开发辅助功能,作者在这篇文章里展示了如何实际利用 iOS 11 对 Dynamic Type 的提升,对视弱用户提供完整的辅助功能,同时还能支持之前的 iOS 版本。
🐎 iOS App 后台任务的坑
Peak 最近一直在调研和分享 Background Crash 相关的知识,比如 32 期周报中推荐的『iOS App 后台 Crash 调查』一文。而这篇文章则是他最近这段时间调研结果的总结。文中提到,涉及 Background Task 的 Crash 主要有以下三种类型:
- 0xdead10cc - 为了保证 Extension 和 Host App 对 DB 操作的数据库完整性,系统强杀应用;
- 0xbada5e47 - 发起过多的 Background Task,或者 Background Task 在超时之后会调用 expiry handler 超过几秒钟,都会被系统强杀;
- 0x8badf00d - 主线程卡死,被系统的 WatchDog 强杀;
另外此类 Crash 第三方的收集框架捕获不到,所以需要借助苹果自带的 Crash 日志才能排查。
🐎 打造高可拓展的 iOS KeyValueStore
本文循序渐进地讲解了如何打造一个高可拓展的 iOS KeyValueStore。从最开始一个 Key,一个 Data 的表,逐步讲解如何支持存储元数据,分组,索引。行文流畅,没有废话,值得一看。
🐢 MacOS 的安全和隐私指南
本文翻译自 drduh 的一篇文章, macOS Security and Privacy Guide。如今用户电脑的安全及隐私问题越来越被重视起来,无论是公司还是个人。本文对于想要提高个人 Mac 的安全性以及隐私性的人比较有帮助。文章从 Web、 VPN、防火墙、系统服务等很多点详细讨论了 MacOS 的安全和隐私问题,读完这篇文章,相信对于这方面的很多疑问都可以迎刃而解。
🐎 Swift Knowledge Base updates for Swift 4.2
Swift 4.2 正式版再过几天就要发布了,这一次更新虽然只跨了一个小版本,但还是带来了许多实用的新特性,还没来得及了解的同学推荐看一下这篇文章。
🐎 Hacking Hit Tests
来自 Soroush Khanlou 的一篇文章。文章介绍了 HitTest 这个来自 UIKit 的快被大家遗忘了的方法。
在一些特定情况下,开发者可能会需要 Override HitTest 方法来达到一些特定的目的。作者就遇到了类似的情况。而 Override HitTest 在很多时候能给开发带来更多的可能。相信大家若是对 HitTest 有更深入的了解,也能对 iOS 开发有更深的理解。
🐢 CLI: improved
作为开发人员,一般都离不开命令行工具,本文的作者分享了自己在命令行工具上的一些积累和经验,帮助大家更好地提升工作效率
cat
的升级工具ping
的升级工具- 你可以使用 prettyping,这个工具对ping的返回结果做了一层GUI的封装
ctrl+r
(回溯过往输入的命令)的升级工具- 你可以使用 fzf 来更好地进行回溯匹配
top
的升级工具- 你可以使用 htop 获得更多的交互命令来显示系统硬件信息
find
的升级工具du
的升级工具man
的升级工具- 你可以使用 tldr 更好地阅读帮助文档
grep
的升级工具- 有些时候,
grep
的对于复杂的过滤规则力不从心,这个时候可以考虑用ack || ag
来代替
- 有些时候,
grep et al
的升级工具- 你可以使用 jq 来更好地处理 json 转换的问题
- 更多更好的工具等待挖掘中
设计
Lessons Learned From the RWDevCon 2018 Design Lab
在今年 RWDevCon 2018 大会的 Design Lab 中,两个资深 UI/UX 设计师解答了 Ray Wenderlich 读者有关 app 设计的问题,其中包含了很多常见解决方案,具体分为以下四个方面:格式塔理论、原生组件及行为、竞品研究和产品文案。阅读这篇文章可以让你在创建移动应用时避免犯同样的错误。
书
Mac 高效开发指南
bestswifter 同学一直非常的重视工作效率,本书从系统配置、Mac 工作流、编辑器之神:Vim、Git 从入门到进阶、终极武器 Zsh 等方面去打造一个高效的工作流,致力于提高 Mac 工作效率的实用手册。不管你是入门新人,还是撸码老手,都能从书中学习到很多你平时不会注意的,提升工作效率的点。效率上去了,你才能有更多的时间,去对自我进行提升。
音视频
泊学技术视频
构建自己的Docker镜像
Docker用类似git的方式管理了我们对容器的修改,这也就意味着,我们可以“提交”这些修改,查看修改的历史记录,以及制作新的镜像。
使用Dockerfile自动化镜像构建
如何自动化镜像的定制过程呢?你可以把每一步修改的动作写在Dockerfile里,然后执行docker build就好了。
通过Docker执行任意版本的Swift
这段视频里,我们基于Swift官方提供的二进制程序,制作一个可以执行任意版本Swift的镜像,有了它,我们就能更方便、安全的实验各种Swift新特性了。
[视频链接]
内推
-
北京-蚂蚁金服 招iOS/安卓/前端开发:负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:[email protected] / [email protected] (同一个邮箱) 或这微博私信 @折腾范儿_味精 了解情况。
-
上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): [email protected],或微博 @JasonYuh。
-
杭州奇志科技招聘 iOS、前端:奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 @没故事的卓同学 了解。
-
深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目:如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~
-
北京字节跳动 iOS 团队持续招人中:简历可以发送到邮箱 [email protected],或者添加我(@AidenRao)的微信 jingmu1994 了解更多公司及岗位信息。
-
北京百度教育事业部招 iOS 开发:百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:[email protected]。
关注我们
我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
本期编辑
@没故事的卓同学,@四娘,@享耳先森,@Damonwong,@折腾范儿_味精,@张嘉夫,@AidenRao,@Parsifal,@aaaron7,@方秋枋,kyo,tom510230,anotheren,水水,looping,@JasonYuh,@老老老老老老老驴
说明
🚧 表示需翻墙,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)