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

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

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

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

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

新闻

WWDC 2018 时间确定[2]

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

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

文章

???? iOS Weekly 的作者整理了一份他的 iOS 博客订阅[4]

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

???? Solving a Mysterious Heap Corruption Crash[5]

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

???????? AppDelegate 瘦身指南[6]

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

  • FRDModuleManager:模块管理者统一管理子模块;

  • JSDecoupledAppDelegate:自定义 AppDelegate 类,将 App 生命周期拆分成几个不同的代理进行解耦,而不是像原生的 AppDelegate 所有代理都在同一个类里;

  • AppDelegate 分类( Category ):这个方案比较常见了,就是按照职能把代码分到不同的 Category 文件中;

  • JLRoutes、MGJRouter:也是模块化后模块管理者管理的策略,只是结合了路由系统注册方式和第一种略有不同;

  • Objection:利用轻量级的依赖注入框架解决。不过这个方式不太主流,而且并没有真正解决 AppDelegate 设计上的问题。

???? Getting Started with Flutter[7]

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

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

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

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

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

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

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

???? 给 NSBundle 添加一个 current 方法[11]

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

???? 不同角度看问题 - 从 Codable 到 Swift 元编程[13]

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

???? 快速用上 Swift 静态库[15]

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

???? Using Swift Server API 0.1.0[16]

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

  1. Raw API[17]:Swift Http 原始 API 的使用介绍

  2. µExpress[18]:用了 350 行代码,在原始 API 的基础上构建了一个类似于 Express.js 的网络框架

  3. Swift Nio[19]:使用最新的 Swift-Nio 处理网络请求

???? ???? Best iOS Development Tips and Tricks[20]

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

???? 苹果 ResearchKit 中的图表控件[21]

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

设计

???? Great UI Animations tips[22]

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

???? ???? Designing a better notification experience for iOS[23]

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

工具

Sophie[24]

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

代码

Open-Source iOS Apps[25]

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

ZIKCellularAuthorization[26]

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

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

内推

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

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

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

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

关注我们

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

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

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

说明

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

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

参考资料

[1]

@叶孤城: https://weibo.com/u/1438670852

[2]

WWDC 2018 时间确定: https://developer.apple.com/wwdc/

[3]

WWDC18 奖学金指北: https://apollozhu.github.io/2018/03/16/wwdc18-scholarships-info-cn/

[4]

iOS Weekly 的作者整理了一份他的 iOS 博客订阅: https://iosdevdirectory.com/

[5]

Solving a Mysterious Heap Corruption Crash: https://topologyeyewear.github.io/engineering-blog/2018/03/07/heap_corruption/

[6]

AppDelegate 瘦身指南: http://kyson.cn/index.php/archives/105/

[7]

Getting Started with Flutter: https://www.raywenderlich.com/188257/getting-started-with-flutter

[8]

机器学习与移动端会碰出怎样的火花?: https://www.zhihu.com/question/65957269

[9]

CoreML: https://developer.apple.com/documentation/coreml

[10]

网友微调: https://www.zhihu.com/people/breaknever/activities

[11]

给 NSBundle 添加一个 current 方法: http://bou.io/NSBundle.current.html

[12]

NSBundle: https://developer.apple.com/documentation/foundation/bundle

[13]

不同角度看问题 - 从 Codable 到 Swift 元编程: https://onevcat.com/2018/03/swift-meta/

[14]

小专栏: https://xiaozhuanlan.com/onevcat

[15]

快速用上 Swift 静态库: https://blog.dianqk.org/2018/03/08/use-static-framework/

[16]

Using Swift Server API 0.1.0: http://www.alwaysrightinstitute.com/microexpress-nio/

[17]

Raw API: http://www.alwaysrightinstitute.com/http-010/

[18]

µExpress: http://www.alwaysrightinstitute.com/microexpress/

[19]

Swift Nio: http://www.alwaysrightinstitute.com/microexpress-nio/

[20]

Best iOS Development Tips and Tricks: https://medium.com/developerinsider/best-ios-development-tips-and-tricks-6c42c1d208c1

[21]

苹果 ResearchKit 中的图表控件: http://researchkit.org/docs/docs/ChartsAndGraphs/ChartsAndGraphs.html

[22]

Great UI Animations tips: https://uxdesign.cc/good-to-great-ui-animation-tips-7850805c12e5

[23]

Designing a better notification experience for iOS: https://uxdesign.cc/designing-a-better-notification-experience-for-ios-def1df8e89e8

[24]

Sophie: https://marcosantadev.com/portfolio/macos-app-sophie/

[25]

Open-Source iOS Apps: https://github.com/dkhamsing/open-source-ios-apps

[26]

ZIKCellularAuthorization: https://github.com/Zuikyo/ZIKCellularAuthorization

相关文章: