Skip to content

老司机 iOS 周报 #11 | 2018-03-19

Compare
Choose a tag to compare
@kemchenj kemchenj released this 22 Dec 09:41
· 5444 commits to master since this release

ios-weekly

老司机 iOS 周报第十期在 GitHub 上的 Star 数超过了 1000,得到大家的认可也坚定了我们把周报继续做下去的决心。

欢迎江湖人称吴彦祖的 @叶孤城 加入我们的编辑团队。

这期开始我们在每篇文章的开头会用一个动物表示预计阅读时长:

  • 🐎 很快就能读完(1 - 10 mins)
  • 🐕 中等(10 - 20 mins)
  • 🐢 慢(20+ mins)

新闻

WWDC 2018 时间确定

Apple 宣布 WWDC 2018 将于 6 月 4 日至 8 日在圣何塞举行,现已开放注册(注册截至时间是 3 月 22 日),届时将以抽签方式确定资格。

另外,Apple 还有 Scholarships 计划为优秀在校学生提供免费门票,这有一篇 WWDC 2017 Scholarships 获得者写的 WWDC18 奖学金指北

文章

🐎 iOS Weekly 的作者整理了一份他的 iOS 博客订阅

最近 iOS Weekly 的作者整理了一份他的 iOS 博客订阅,小编全部导入了之后,在列表里看到了最新很活跃的 Swift by Sundell,老牌大佬 Ole Begemann...,感兴趣的同学可以直接下载 OPML 文件然后直接导入到 RSS 阅读器里。

🐕 Solving a Mysterious Heap Corruption Crash

这是一个悲剧的故事,该作者业务中遇到了一个诡异的内存问题引起的 crash,百般追查,历尽千辛万苦,怀疑过是复杂 AR 业务代码所致,也怀疑过是 C/C++ low level 代码内存控制不当所致。然后开始疯狂的一步步移除业务中所有的三方库,依然 Crash,移除了重业务代码,依然 Crash,最后终于确定是 Xcode 的 bug,提交 bug 后被 Xcode 新版本修复,虽然是一个悲剧的故事,但整个过程从发现 bug 到解决 bug 再到细挖为什么的过程,值得借鉴。

🐢🌟 AppDelegate 瘦身指南

什么代码都往 AppDelegate 里放是业内常见的问题。作者整理了 AppDelegate 的代码解耦方式:

  • FRDModuleManager:模块管理者统一管理子模块;
  • JSDecoupledAppDelegate:自定义 AppDelegate 类,将 App 生命周期拆分成几个不同的代理进行解耦,而不是像原生的 AppDelegate 所有代理都在同一个类里;
  • AppDelegate 分类( Category ):这个方案比较常见了,就是按照职能把代码分到不同的 Category 文件中;
  • JLRoutes、MGJRouter:也是模块化后模块管理者管理的策略,只是结合了路由系统注册方式和第一种略有不同;
  • Objection:利用轻量级的依赖注入框架解决。不过这个方式不太主流,而且并没有真正解决 AppDelegate 设计上的问题。

🐕 Getting Started with Flutter

这是很标准的一篇 Getting Started With XX ,分别从简单介绍,配置环境,helloworld,热重载调试,组件复用,网络请求,Table 界面,图片与网络,使用主题,这几个方面一一带你体验了一把 Flutter,Talk is cheap,代码操练起来,亲自感受一下。

编辑觉得这是又一个巨型轮子,看看学学用用,业务中是否下决心大规模使用需要筒子们做好对比和衡量吧。

🐕 iOS 微信特殊字符保护方案

相信大家对之前 iOS 设备碰到特殊字符导致崩溃的问题记忆犹新,后来微信团队对特殊字符做了保护。

由于无法事先知道字符串里包含特殊字符,所以只能先让它排版/绘制,看看是否出现问题。做法是,在排版/绘制字符串前,先设置标记位,排版/绘制结束后,移除标记位;一旦发现标记位存在,就意味着这字符串可能有问题,下次就不显示这个字符串。

🐎 机器学习与移动端会碰出怎样的火花?

自从 CoreML 随着 iOS11 发布之后,机器学习在移动端的应用就越来越被重视。知乎上也对其进行了热议,其中 『网友微调』围绕着『移动设备适合做机器学习的原因』、『移动端机器学习的具体应用』和 『机器学习在移动端的特点』三方面和大家分享了自己的看法,很有见地。

🐕 给 NSBundle 添加一个 current 方法

NSBundle 是我们开发中的常见类,但苹果并没有提供直接通过 [NSBundle current] 方便地获得当前的 bundle 的 API。于是该文作者与其朋友开了个脑洞,通过 backtrace() 来获取调用者的函数指针,进而再使用 dladdr() 来得到该函数所在的库路径,最后通过这个路径去 allBundlesallFrameworks 中匹配,来实现了 [NSBundle current] 方法。

🐕 不同角度看问题 - 从 Codable 到 Swift 元编程

喵神新文,围绕“将一个类型转换为字典”这个问题,向读者介绍了三种解决思路和实现细节:Codable、Mirror 以及代码生成。而更为重要的点在于喵神想传递的思想:如何利用“元编程”的思维来解决项目中碰到的重复体力劳动问题。(PS:喵神最近开通了小专栏,非常值得关注!)

🐎 快速用上 Swift 静态库

文章记录了作者在 Swift 静态库上使用的一些实践。作者使用了一个比较 trick 的技巧,通过在 Podfile 中添加自定义脚本的方式,快速为每个第三方库添加 static_framework 支持。不过因为是实践类型的,如果要引入到自己的项目中,可能还会有一些坑需要自己处理。

🐢 Using Swift Server API 0.1.0

这是一个 Swift Http API 的使用介绍,总共有三篇文章,对于 Swift 服务端开发感兴趣的朋友可以看一看:

  1. Raw API:Swift Http 原始 API 的使用介绍
  2. µExpress:用了 350 行代码,在原始 API 的基础上构建了一个类似于 Express.js 的网络框架
  3. Swift Nio:使用最新的 Swift-Nio 处理网络请求

🐎 🚧 Best iOS Development Tips and Tricks

本文介绍了 Xcode 使用中的一些实用技巧,五分钟的阅读即可让我们掌握一些大幅提升工作效率的 Xcode 配置方法,值得一看(文中视频源为 YouTube,请注意科学上网)。

🐕 苹果 ResearchKit 中的图表控件

ResearchKit中提供了五种默认的图表UI控件,包含常见的饼图(pie chart), 单线图(line chart),多线图(multi lines graph), 和散点图(discreate graph), 多散点图(mutl discrate graph)。使用方法也很简单,和 tableView 很相似,只需要设置好每种图表的 DataSource 即可。但是,关于饼图线框图之类的的第三方框架实在太多。我对这些控件的使用频次存疑。

设计

🐢 Great UI Animations tips

主要分析了几种常见 Transition animation 的设计方法。可以了解很多 Transition 的设计思路和意图。比如不同 state 需要展示同一种内容的情况下应该如何设计转场等。配合大量 gif 的解释说明,非常值得一看。

🐕 🚧 Designing a better notification experience for iOS

从设计角度分析 Apple 应该如何优化 iOS 目前的通知系统,通过“分组”和“暂时静音”两种方式来过滤噪音,让用户快速、轻松地理解信息。

工具

Sophie

Sophie 是一款 Carthage 图形化界面管理工具,目前功能还比较简陋,但是基本的管理功能都已经有了。对于图形界面爱好者是一款非常不错的工具软件。

代码

Open-Source iOS Apps

开源的 iOSwatchOStvOS App 列表,目前收集了超过 700 个项目,GitHub Stars 超过 16000 次,值得参考。

ZIKCellularAuthorization

iOS 10 上国行设备首次安装 App 在获取网络权限时会有不弹授权 Alert 的 bug,这一系统 bug 让众多开发者无可奈何。这个开源作者通过一系列的排查调研,最后使用私有 API 来解决了这一难题,整个解决方案和思路都很值得学习。

另外由于目前 iOS 11 的覆盖率已经接近 70%,且该问题仅在 iOS 10-10.3.1 中出现,编辑建议要慎重考虑是否将该方案运用到线上应用。

本期编辑

@没故事的卓同学@四娘@mmoaay@享耳先森@EyreFree@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal@叶孤城

说明

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

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