老司机 iOS 周报 #11 | 2018-03-19
老司机 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()
来得到该函数所在的库路径,最后通过这个路径去 allBundles
和 allFrameworks
中匹配,来实现了 [NSBundle current]
方法。
🐕 不同角度看问题 - 从 Codable 到 Swift 元编程
喵神新文,围绕“将一个类型转换为字典”这个问题,向读者介绍了三种解决思路和实现细节:Codable、Mirror 以及代码生成。而更为重要的点在于喵神想传递的思想:如何利用“元编程”的思维来解决项目中碰到的重复体力劳动问题。(PS:喵神最近开通了小专栏,非常值得关注!)
🐎 快速用上 Swift 静态库
文章记录了作者在 Swift 静态库上使用的一些实践。作者使用了一个比较 trick 的技巧,通过在 Podfile 中添加自定义脚本的方式,快速为每个第三方库添加 static_framework 支持。不过因为是实践类型的,如果要引入到自己的项目中,可能还会有一些坑需要自己处理。
🐢 Using Swift Server API 0.1.0
这是一个 Swift Http API 的使用介绍,总共有三篇文章,对于 Swift 服务端开发感兴趣的朋友可以看一看:
- Raw API:Swift Http 原始 API 的使用介绍
- µExpress:用了 350 行代码,在原始 API 的基础上构建了一个类似于 Express.js 的网络框架
- 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
开源的 iOS
、watchOS
和 tvOS
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)