阅读 2586

老司机 iOS 周报 #35 | 2018-09-10

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

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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的升级工具
    1. 你可以使用 ccat 来对cat的结果进行颜色分类
    2. 你可以使用 bat 来对cat的结果进行二次检索和分页
  • ping的升级工具
    1. 你可以使用 prettyping,这个工具对ping的返回结果做了一层GUI的封装
  • ctrl+r(回溯过往输入的命令)的升级工具
    1. 你可以使用 fzf 来更好地进行回溯匹配
  • top的升级工具
    1. 你可以使用 htop 获得更多的交互命令来显示系统硬件信息
  • find的升级工具
    1. 你可以使用 Alfred,这个 app 能够帮助你更好地检索文件
    2. 你可以使用 fd 来获得更好的文件检索功能
  • du的升级工具
    1. 你可以使用 ncdu,这个工具可以跟 iTerm2 更好地结合使用
    2. 你可以使用 nnn,这是一个磁盘空间管理的高性能工具
  • man的升级工具
    1. 你可以使用 tldr 更好地阅读帮助文档
  • grep的升级工具
    1. 有些时候,grep的对于复杂的过滤规则力不从心,这个时候可以考虑用ack || ag来代替
  • grep et al的升级工具
    1. 你可以使用 jq 来更好地处理 json 转换的问题
  • 更多更好的工具等待挖掘中
    1. ponysay替代cowsay
    2. csvkit替代awk et al
    3. noti替代display notification
    4. entr替代watch

设计

🐕 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新特性了。 [视频链接]

内推

关注我们

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

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

本期编辑

@没故事的卓同学@四娘@享耳先森@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal@aaaron7@方秋枋kyotom510230anotheren水水looping@JasonYuh@老老老老老老老驴

说明

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

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

关注下面的标签,发现更多相似文章
评论