老司机 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() 来得到该函数所在的库路径,最后通过这个路径去 allBundles 和 allFrameworks 中匹配,来实现了 [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 服务端开发感兴趣的朋友可以看一看:
Raw API[17]:Swift Http 原始 API 的使用介绍
µExpress[18]:用了 350 行代码,在原始 API 的基础上构建了一个类似于 Express.js 的网络框架
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]
开源的 iOS、watchOS 和 tvOS 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)会推送消息,欢迎关注。
同时也支持了 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