Skip to content

Releases: SwiftOldDriver/iOS-Weekly

老司机 iOS 周报 #2 | 2018-01-08

22 Dec 09:33
Compare
Choose a tag to compare

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

新闻

TIOBE 2017年度语言揭晓:哦,我的上帝,是古老的 C

今年 C 语言并没有很强势,只是也没有其他增长很突出的语言,C 的增长率 1.69% 就成为了佼佼者。亚军是 Python ,增长了 1.21%。

2018 年 1 月的排行中,Swift 排名 12,OC 18,相比去年略有提升。

集成 iCloud、Passbook 或订阅类 iAP 将导致 App 无法转移

集成过 iCloud, Passbook 或订阅类 iAP 将导致 App 无法转移到别的开发者帐号,即使之前集成过,新版禁用也不行。

Apple 拿下 iPhone X 外形设计专利

美国专利商标局报告显示,苹果已经拿到了 iPhone X 的外形设计专利。不过据最新报道,此专利并非针对「刘海」造型提出,而是著重边框上的按键、天线断点、扬声器等处细节。另外,iPhone X 的「刘海」部分集成了多达 8 个传感器(比 iPhone 8 多 3 个),分别是红外镜头、泛光感应元件、点阵投影器。

让所有科技巨头“焦头烂额”的intel漏洞是什么

Intel CPU 爆出史上最大漏洞。腾讯安全联合实验室的这篇回答详细的介绍了漏洞的原理和影响。

文章

程序员如何在技术浪潮的更迭中保持较高的成长速度

冰霜的 17 年总结,标题改成《我是如何从霜菜到霜神》也不为过。技术人员都要面对如何成长的问题,冰霜在文章中结合自身介绍了他是如何进行高效学习的,值得借鉴思考。

QUIC 协议初探 - iOS实践

QUIC(Quick UDP Internet Connections)是基于 UDP 的 WEB 开发协议 TCP + TLS + HTTP2 = UDP + QUIC + HTTP2’s API,由 Google 开发,希望其取代 TCP,加快网页传输速度。还计划提交至 IETF,成为下一代的正式网络规范。文中详细介绍了 iOS 平台下集成方式及与 HTTP2 的对比数据。

Basics of parallel programming with Swift 🚧

非常详细的介绍了 Swift 中并发编程涉及到的概念,你值得拥有。

如何实现 React Native 里的页面导航系统

RN 的导航和跳转一直是一个需要解决的问题。作者总结对比了现有的几个开源方案,并阐述了自己的解决思路。

阮一峰:比特币入门教程

数字货币已经成为新的风口。文章从技术角度通俗易懂的介绍了比特币的技术原理及基本概念。

Detecting screen capturing in iOS 11

随着教育、娱乐等领域付费视频服务的兴起,怎样防止付费内容的流失与传播成为了一个很重要的问题,本文详细阐述并演示了如何在 iOS 11 上实现对用户屏幕录制或镜像操作进行侦测的方法,值得一看。

工具

App Sight

查看主流 app 都用了哪些第三方服务和 SDK 。

代码

Kickstarter 开源了他们的客户端

Kickstarter 开源了他们的客户端代码,里面有非常多可以学习的内容,例如:

  • AppEnviroment 的抽象:所有状态都用一个全局的 Enviroment 去保存,包括了缓存,设备状态,用户等等,有了这一个抽象的存在就意味着测试时可以随意模拟和切换状态,在测试和监控复现 bug 时非常有用。
  • 可运行的文档:使用 Playground 去搭建 API 文档,UI 的格式可以通过 PlaygroundLiveView 即时查看,构建出了一个类 REPL 的调试环境出来。并且每次 pull request 也会尝试编译 playground 里的代码,如果 API 进行了修改,那就让我们知道该更新文档了。美中不足是目前 Playground 对于 framework 的支持很一般,我们使用 Carthage 或者 Cocoapods 的话需要做很多 setup 才行。
  • ...

相关资料:

RxFlow

RxSwift 社区推出的基于 Coordinator 模式的响应式导航框架。

LSAnimator by Lision

基于多维链表实现的 iOS 链式动画库,相比业界另外一个知名 Swift 动画库 IBAnimatable,有如下特性:

  • 支持多链式动画,并发执行多条动画链;
  • 每个动画节点采用 CAAnimationGroup 实现,从而支持单动画节点复合动画;
  • 提供 OC 版;
  • 侧重于对动画的深度定制。

OOMDetector

OOMDetector 是腾讯开源的一个 iOS 内存监控组件,应用此组件可以帮助你轻松实现 OOM 监控、大内存分配监控、内存泄漏检测等功能:

  • OOM 监控:监控 OOM,Dump 引起爆内存的堆栈;
  • 大内存分配监控:监控单次大块内存分配,提供分配堆栈信息;
  • 内存泄漏检测:可检测 OC 对象、Malloc 堆内存泄漏,提供泄漏堆栈信息。

DeepDiff

大家在工作中应该经常遇到数据集合更新,然后我们手动 diff 之后刷新 TableView 的情况,但这样的代码重复也容易出错。

DeepDiff 这个框架把这个过程地封装了起来。只要我们直接传入旧的集合和新的集合,然后把 diff 的结果交给 TableView 直接刷新就可以了,下面是代码示例:

let changes = diff(
    old: oldItems, 
    new: newItems, 
    reduceMove: true
)

tableView.reload(changes: changes, completion: { _ in })

并且它在性能方面的表现也很棒,官方的介绍页里有一个简单的性能对比,排名第一。

quicktype

quicktype 可以根据给出的 JSON 数据推断出数据类型,然后输出具体的类型模型,支持 Swift、C++、Go、Java、C# 等语言。支持 Xcode 9,使用得当可以给我们的开发带来一定的便利。

音视频开发进阶指南:基于Android与iOS平台的实践

作者是唱吧的音视频架构师。全面的介绍了音视频开发的基础知识,也结合了移动开发的相关技术(FFmpeg、OpenGL ES)进行了介绍。

音视频

阿尔法狗 AlphaGo 2017 🚧

阿尔法狗(AlphaGo)官方纪录片,全方位展示了人机大战的过程,更尽可能多地揭示了人类思维和未来人工智能的工作方式。

Testing in iOS

raywenderlich 的付费视频课程(第一部分可以免费观看)。视频课程分为:单元测试基本概念、单元测试实战和 UI 测试实战三个部分。

本期编辑

@没故事的卓同学@四娘@mmoaay@享耳先森@EyreFree

微信打赏

感谢您的支持。

微信支付

说明

🚧 表示需翻墙

老司机 iOS 周报 #19 | 2018-05-14

22 Dec 09:45
Compare
Choose a tag to compare

ios-weekly

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

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

新闻

iOS 11 App 上传规则变化

2018 年 7 月份开始,所有上传 App Store 的应用都必须是基于 iOS 11 SDK 编译并适配 iPhone X 的分辨率。当然,Apple 也对上传流程做了进一步的优化。更多细节,请参照:https://developer.apple.com/ios/submit/

What's New In Vapor 3

Vapor 3 对 Vapor 进行了彻底的重新设计,为未来几年的发展奠定了基础,让 Vapor 能够成长和进化为最好的服务器端 Swift 框架。Vapor 3 现在完美支持 Swift 4 的 Codable,并且从同步阻塞架构进化为异步非阻塞架构,同时还采用 Apple 新的开源服务器端框架 SwiftNIO 来管理所有网络连接和 HTTP 解析。

在 apple/swift 的 tensorflow 分支上开发 Swift for TensorFlow

Swift for TensorFlow 的 Swift 编译器开发在 google/swift 分支上,Ted Kremenek (Swift 项目新主管)和 Chris Lattner(Swift 之父)都认为将这个分支上的工作移动到 Apple/Swift 上直接开发,对 Swift 社区更有益处。这样会让 Swift 编译器开发的协同工作集中到一个中心,而且也能避免大家对于 Swift 产生方言的担忧。

新分支 tensorflow 将会在近期创建,tensorflow 上开发的新功能,会通过 Swift 发展流程,将一部分合入 Swift 主分支,tensorflow 分支本身,也会密切追踪 Swift 主分支的更新。

Ulysses 13 将更好的支持代码展示

最好的 MarkDown 写作工具之一 Ulysses 对代码的展示一直不够友好,最近宣布将在下个版本中优化对代码段的展示,并且支持 github style。

文章

🐢 AVAudioEngine Tutorial for iOS: Getting Started

音频处理一直是 iOS 开发中非常棘手的一部分,因为在 iOS 8 之前只能使用低级的、晦涩难懂的 Core Audio 框架,但随着 iOS 8 发布了高级的音频工具集 AVAudioEngine,我们不再需要深入挖掘 Core Audio 也可以实现音频处理,这篇教程会为你介绍如何使用这个新工具。

🐎 深入了解Flutter界面开发

最近一段时间,通过学习浏览器内核的相关思想来做界面开发的框架层出不穷。从 Reactive Native、Samurai Native、Weex 到最近的 Flutter、Tangram,各个公司都结合自己的业务时间推出了对应的轮子。不过反过来想,轮子多的核心原因恰恰是其实目前还没有完美的轮子。

这篇文章并不是 Flutter 的教程,而是重点介绍了 Flutter 的渲染流程和原理,以及探讨了一些背后的 immutable 和 react 之间惺惺相惜的设计思想,很有价值。如果自己所在的团队有这类轮子需求的同学,一定不要错过。

🐎 DEALING WITH DATES

时间对于在日常生活中的我们是简单的概念,但是在编程领域却是困难的。本文介绍了在 Apple 平台下,如何利用系统框架来对时间进行正确的处理。

🐎 Codable 与 JSONSerialization 性能测试

Swift 4 的新功能 Codable 可以自动生成解析 JSON 的构造器,但这些自动生成的代码跟我们手写的有什么区别呢?这篇文章的作者写了一个性能测试去比较 JSONDecoder 和 JSONSerialization,文末作者表示虽然 Codable 生成的代码效率只有手动解析的一半,但比起这点性能消耗,绝大部分情况下 Codable 带来的便利更加重要。

🐢 从源码看微信小程序启动过程

这篇文章记录了作者经过 3 个礼拜研究后,对小程序框架的基本代码结构,启动流程以及程序实例化过程的理解,并且从小程序的启动流程入手一步步解答了“框架对传入的对象等到底做了什么”的疑问。

🌟 Memory Leaks in Swift

Leaks 相关的内容在业内虽然已经有很多文章了,但多数是以 OC 来做示例,文章从 Swift 角度讲 Memory Leaks 是什么、有哪些危害?为什么会发生 Leak?最后重点介绍了消除 Leaks 的几种方式。

🐎 Making illegal states unrepresentable

作者以 URLSession 为例,大致描述了如何通过 Swift 的强类型来消除不明确的状态。在编译器的帮助下,编写出更加逻辑缜密的代码。

🚧 🐎 Capture iOS simulator video for App Preview

这里介绍了一个 Xcode 模拟器的命令行小技巧,很方便的用简单的命令行来实现将模拟器中的操作录制成录像,方便上传到 AppStore 的录像展示之中,浏览该网页需要翻墙。

🐢 🌟 🚧 Best iOS hacks from Twitter: March & April Edition

3 月 和 4 月整理自 Twitter 的各种 iOS 开发、调试小技巧与冷知识,非常干的干货,推荐花时间仔细阅读,绝对会有所收获。

音视频

RWDevCon 2018 Vault Video Bundle

此系列视频收费 $99,共 18 个主题:如 Serialization in SwiftAuto LayoutClean ArchitectureAndroidTDDWKWebViewARKitMetal 等,如对其中两个主题感兴趣也就值回票价了。

内推

丁香园丁香妈妈团队招中高级 iOS 工程师

新组建的团队,有电商方面开发经验优先,有意向请发送简历到 gp@dxy.cn

百度文库 / 百度阅读,招聘 Android / iOS / Fe 高级 / 资深工程师

百度文库 / 百度阅读,招聘 Android / iOS / 前端 高级 / 资深工程师,坐标北京百度科技园,有意向请发送简历到 wangdefu@baidu.com

关注我们

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

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

本期编辑

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

说明

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

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

老司机 iOS 周报 #18 | 2018-05-07

22 Dec 09:44
Compare
Choose a tag to compare

ios-weekly

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

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

新闻

知识小集推荐的值得关注的 iOS 博客

「 小集 」团队最近利用空余时间,整理了一些我们认为质量高的博客以及博主相关的信息,包括博客、微博、Github,后期我们会加上公众号和小专栏信息。博客的主题不限于移动开发,我们会持续收集各个领域的高质量内容。

文章

🐕 计算机系应届生求职指北

两点之间,直线最短,方向对了,你走的就是捷径。

文章分享了职业规划、校招、求职策略、技术职位选择、语言和技术栈的选择、技术栈的优化、简历的书写等经验,这些东西对于还在学校的计算机系的学生,非常有帮助,早点思考这些问题,未来能走的更顺利。

🐕 50 iOS Interview Questions And Answers Part 5

50 道 iOS 面试题,有一些不错的知识点,还有 part1-4。如果有换工作的打算,建议细看,查缺补漏,技术面试时一些基础知识掌握不全的话很减分的。

🐕 小程序iOS客户端框架——控件事件逻辑框架与控件原生化

作者在文中介绍了微信客户端如何为小程序的运行提供了框架支持,比如事件响应处理,页面缓存机制及控件原生化等。对于小程序实现原理感兴趣的同学可以看一下。

🐎 Delegation in Swift

在日常开发中,我们一直和委托模式打交道。本文介绍了在 Swift 中实现委托模式的几种方式与其优缺点。本文除了介绍老生常谈的 ProtocolClosures 外,还提出通过 Configuration types 来使闭包的集合更清晰。

🚧 🐕 Exploring Apps Without Jailbreaking

英文文章,作者介绍了如何不越狱来挖掘探索一些 App 的实现,来判断 App 是原生 Native 的,还是 Webview/Phonegap 的,还是 ReactNative 的。通过对比 Button Touch Move 的一些操作,通过对比 Navigation 的切换动画效果,通过系统自带的 VoiceOver 的支持度,通过改变 iOS 系统动态字体,通过断网看查看 App 无网处理方式。有很多种方式可以用于粗略的判断一些 App。通过文中的多处交互细节我们能感受到,不同开发框架的一些‘一般’差异,可以看出大部分的情况下,原生 Native 在细节中的体验是非常的细腻到位的。

但需要强调的是文中介绍的差异不足以做出 100% 肯定的结论,可以作为一个初步的判断与参考。这么多的细节并非是专属于某个框架的能力,其他框架就一定无法实现。只不过因为各个框架有他们常规的开发习惯与特点,有些细节不默认支持并不是做不到,而是出于跨平台的统一策略等原因。各个框架其实也有自己的定制与扩展能力去对这些细节进行定制化的开发。

🐎 Instagram的iOS原生代码热加载技术

当年 13 个人就做到 3000 万用户的 Instagram,一直都是通过技术提升效率的标杆。这次介绍了他们原生代码热加载技术的实践,着实是一项令 Native 开发的程序员脸红心跳的技术。

文章介绍了一种基于在模拟器上通过 dlopen 来动态加载新模块的技术,配合 ComponentKit 来使得 Native 代码也能像 Weex 和 H5 一样 watch 变更并实时刷新。虽然文中并没有提供能够手把手照做的细节,不过核心的思路都已经阐述,稍加研究应该可以落地。建议做业务较多但缺乏技术产出苦于没好轮子造的同学赶紧上手尝试,说不定今年的晋升就稳了呢?:D

🐎 iOS Springboard Security - Revisited

本文介绍了一种在 iOS 的 App 切换页面替换 / 隐藏 App 原始缩略图的方法,有类似安全需求的同学可以作为参考。类似地,可以实现“后台模糊”效果,比如蚂蚁金服旗下的 蚂蚁财富 就采用了类似的安全措施,感兴趣的同学可以参考这里的 示例代码

🐎 Facebook 工作体验小记(一)

这次 Peak 老师分享了他在 fb 的工作体验,划重点:“我现在认为加班对于企业生长必要性是个彻底的伪命题”。希望国内的老板们早日明白一个企业成功靠的不是加班文化。

工具

lobe.ai

Lobe 可以让开发者不需要撰写任何代码,即可为应用程式加入图像或是声音辨识等机器学习功能。开发者只需要将训练资料拖进 Lobe 工具视图中,Lobe 便能自动建立深度学习模型,并开始训练,训练结束之后,便能输出 TensorFlow 或 CoreML 格式,直接在程序上执行,或者模型存储于云端,使用 Lobe 提供的 API 将深度学习能力整合进程序中。

🚧 TeaCode

正在处于 Beta 的一个清新的代码段管理 + 文字生成器。相比其他文字生成器,它更懂代码。相比其他代码段管理器,它有灵活的生成规则。目前五折 12 刀,正式发布后的价格为 24 刀。

关注我们

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

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

本期编辑

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

说明

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

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

老司机 iOS 周报 #17 | 2018-05-02

22 Dec 09:44
Compare
Choose a tag to compare

ios-weekly
欢迎 @方秋枋 加入周报的编辑的队伍。

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

新闻

Swift for TensorFlow 正式发布

TensorFlow 社区在 TensorFlow Dev Summit 2018 上宣布将开源 Swift for TensorFlow 项目,现在终于正式发布了,这里是源码及示例 Models.

文章

🐢 🌟 iOS 新闻类 App 内容页技术探索

文章针对新闻类 App 内容页的技术实现进行了探索和分析。并将成果封装成三个框架:HybridPageKitReusableNestingScrollview 以及 WKWebViewExtension

文章不仅从技术方案选择,组件化架构,加载速度优化给我们高屋建瓴地展示了新闻类的 Hybrid 技术应该如何构建,更重要地是开启了我们的脑洞:Hybrid 应该怎么玩才有意思。不是简单地嵌入 WebView,使用一下 JSBridge 就是 Hybrid 了。而是取长补短,让 WebView 和 Native 技术携手构造更优秀的应用体验,创造属于自己的小程序框架和能力。

🐢 🌟 🚧 Code Review Best Practices

非常细致的介绍了 code review 的整个流程。

  • 为什么需要,是什么,什么时候需要 code review
  • 在 code review 前需要做哪些准备工作
  • 如何执行 code review
  • code review 的一些示例

🐕 Securing iOS Certificates using Modern Cryptography

文章的主题为使用现代加密技术保护 iOS 证书(certificates)。我们平时测试,提交应用到AppStore 都需要用到苹果给我们的开发证书。阅读本文,我们可以学习到如何通过 openSSL 对 iOS 开发证书进行加密。

🐕 Design Patterns by Tutorials: MVVM

MVVM 作为解决 MVC(Massive View Controller) 最有效的解决方案,已经成为 iOS 程序员的必学模式之一。Ray 的这篇文章抛开传统设计模式教学那种枯燥的说教,而是先手把手的使用 MVVM 的方式来实现一个小 Demo,简单易懂。值得一提的是,这是很少的纯 MVVM 教程,不像大多数 MVVM 教程都喜欢打包讲一些 reactive 和 data binding 的东西,适合萌新选手。

🐕 Blurring the Lines Between MVVM and VIPER

VIPER 是又一个移动开发中流行的设计模式,初看 VIPER 中各个模块的分工,总会觉得和 MVVM 其实是有几分神似。这篇文章通过仔细分析 MVVM 和 VIPER 中各个组件的责任划分,认为 MVVM 本质就是只有 V I 和 E 的 VIPER。当业务变得复杂时,VIPER 可以衍生出 Presenter 和 Router 来保证职责划分,所以一个动态调整的 VIPER 模式相比简单的 MVVM 应该是一个更优的实践。

本文讨论内容有趣,但其思路和论证方法,都值得借鉴。

🐎 Why you should not name your @IBActions didTapButton

我们有时会在代码中看到 @IBAction 方法被命名为 didTapCancelButtondidTapSaveButton 或是 didHitSendcancelButtonTapped 等类型的名称。但我认为这样是错误的,首先因为 Target-Action 是命令模式而不是委托模式,应该命名为 undodeleteBackwardlowercaseWordscrollToEndOfDocument 这样的名字。其次我们在编译时并不知道 sender 具体是谁,所以我们不应在方法名称中指定 sender 的类型。

🐢 SceneKit 与 ARKit 专题

SceneKit 系列文章是作者在学习 Ray Wenderlich 的 SceneKit 教程《3D Apple Games by Tutorials》时做的学习笔记与心得体会,共有26篇文章,内容翔实。ARKit 专题文章还在持续更新中,包括制作类似 AR Stack 游戏的教程、对官方 AR Demo 的解读以及对 ARKit 1.5 新增的图片识别功能的介绍等等。

🐢 Care and Feeding of Xcode Configurations

Xcode 默认的 build setting 机制在团队协作中经常会因误操作等原因导致编译问题,文章介绍了引入 xcconfig 文件来解决此类问题(如果你使用了 Cocoapods,那么你已经引入了),由此带来 share configurationschange history 等好处,最后还介绍了如何组织 xcconfig 文件以及一些 ProTips

设计

🐎 Custom Keyboard Extensions: Getting Started

自定义键盘扩展的入门教程,从 0 到 1 的讲解如何创建一个摩尔斯电码键盘,包括自定义键盘的界面,自适应键盘配色方案,自动纠正和建议,请求权限等内容。

🐢 A Better MVC

很多 iOS 开发不喜欢 MVC,因为 iOS 中的 MVC,往往违反封装原则,且容易形成臃肿的 ViewController。解决封装原则的问题,可以通过引入一个协调器(Coordinator),所有的子视图控制器或者视图,只负责显示,而如何显示它们,则委托给协调器去处理。 ViewController 臃肿的问题,需要知道,1 View Controller ≠ 1 screen of content, 可以将一个页面,分割成一个一个的子 ViewController,去负责页面元素的显示,而主 ViewController 只作为协调器存在。

该文作者近期参加了『App Builders 2018』,并也针对这个主题进行了分享,有兴趣的读者可以到 YouTube 上面观看这个分享视频——Dave DeLong - A Better MVC

🐕 iOS App 的加固保护原理

出自网易杭研的一篇对 iOS App 加固保护原理深度分析的好文。文中从如何对 App 破解出发,从以下 4 个大点阐述了 App 的加固原理:

  • 字符串混淆
  • 类名、方法名混淆
  • 程序结构混淆加密
  • 反调试、反注入等一些主动保护策略

🐢 🌟 🚧 Playground driven development in Swift

文章详细描述了如何去构建一个基于 Playground 的 App 开发环境,对于经常要开发 UI 界面的开发者来说,使用作者介绍的这一套流程,可以大大提高自己的开发效率。

🐎 Codable vs. ObjectMapper

作者分析了 Codable 和 ObjectMapper 的区别,Codable 相对来说比较简单易用,而 ObjectMapper 提供了更多高级功能,例如数据转换,数据验证,可读性更强的错误信息等等。并且作者也扩展了 Codable ,实现 ObjectMapper 的这几个主要的 feature,让我想起了之前看过的另一个项目 AnyCodable。想要扩展 Codable 但无从下手的同学可以考虑看看。

🐎 Inspect your app’s Documents directory in the Files.app

小技巧,如果我们在 Info.plist 中设置了 LSSupportsOpeningDocumentsInPlace=YESUIFileSharingEnabled=YES,就能够从苹果官方的文件管理器 Files 对 App 的 Documents 目录进行查看,更多信息可参考 苹果官方文档

🐕 网易HubbleData无埋点SDK在iOS端的设计与实现

这是一篇非常值得一看的文章,从代码埋点到可视化埋点再到无埋点,层层递进。更可贵的是,详细介绍了如何利用aop的方式实现无埋点的整个思路,和解决的一系列问题。从思想到方法都有了。

🐢 Reimplementation of Implicitly Unwrapped Optionals

为了提升类型检查的一致性,Swift 的下个版本计划对 ImplicitlyUnwrappedOptional 类型相关的一些操作进行重新实现,其实说到底所有的操作都是为了去掉 ImplicitlyUnwrappedOptional 类型,这样可选值类型就剩 Optional<T>! 则只是一个操作符而已,不包含 ImplicitlyUnwrappedOptional 这个特殊类型的含义。不过小编看了下所有的改动,目测应该都是可以用代码迁移器搞定的,大家不用特别担心下个版本需要做代码的大变动。

🐕 Swift, Plist and Two Smoking Scripts

有没有想过整个项目从前端到后端全部用 Swift 来开发?甚至包括脚本?本文介绍了怎样用 Swift 在十五分钟内开发一个能够帮助我们对项目设置进行检查的 Build Phase 脚本,值得一看。

工具

What's New in Swift 终极版

有人做了一个网站给 Swift,详细介绍每个版本的更新内容,你还可以选择具体的版本范围,然后就能看到这中间更新了什么。

音视频

🚧 App Builders 2018

App Builders Conference 是由来自欧洲各国的 Android 和 iOS 移动开发者一起举办的分享交流会。本次大会在瑞士举行,目前 YouTube 上已经收录有该大会的 26 个直播视频,平均每个视频约 30 mins,分享的内容从 Google AR 到 iOS 的 CoreML,从 Swift 到 App 架构,方方面面都有涉及。

其中本期周报中收录的『A Better MVC』一文也在该会上进行了分享。

关注我们

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

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

本期编辑

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

说明

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

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

老司机 iOS 周报 #16 | 2018-04-23

22 Dec 09:44
Compare
Choose a tag to compare

ios-weekly

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

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

专栏

钟颖的开发笔记

钟颖前后供职于腾讯、阿里巴巴、微软,同时也是业内知名的独立开发者,个人开发过 Pin,JSBox 等备受好评的高质量应用。『钟颖的开发笔记』记录了他的一些开发经验与技能,内容主要有:

  • 独立开发经验(Pin & JSBox)
  • 通用编程技能
  • 大公司面试与研发流程(BAT & 微软)
  • iOS 与 Mac 领域相关技能
  • 我的应用相关的故事

比如本期周报的『JavaScriptCore 与 Promise 那点事』就是出自他的小专栏,专栏内已产出 6 篇心得,目前仅需 ¥64 即可订阅。

新闻

非 Touch Bar 版 13 寸 MacBook Pro 存电池隐患,苹果将免费修理

Apple 已经确定,少数 13 英寸 MacBook Pro(无触控栏)电脑的某个组件可能会出现故障,导致内建电池发生膨胀。这并不是安全问题,Apple 会免费更换符合条件的电池。受影响的设备生产日期在 2016 年 10 月至 2017 年 10 月之间,根据产品序列号确定电池是不是符合更换条件。

文章

🐢 🌟 深入理解 iOS Rendering Process

文章深入的介绍了一下 iOS 的渲染机制,从整体的 iOS 渲染架构总览,到 OpenGLES 与 Core Graphics 的渲染管道,再到渲染提交前的 Layout Display Prepare Commit ,最后又介绍了一下 animation 的动画实现,更深刻的了解了渲染机制有助于在日常的开发工作中遇到渲染性能问题时,能够梳理归纳检测问题代码的思路。

🐕 JavaScriptCore 与 Promise 那点事

文章使用 JavaScriptCore 构建一个 JavaScript 和 Native 代码混合的环境。为了解决 JavaScript 里的 Callback Hell 引出 Promise 对象,并实现一个 Native 的 Thenable 对象,达到在 Native 环境下实现 Promise 的函数的效果。

🐕 🚧 Conditional conformances in Swift

介绍了 Swift 4.1 新引入的特性 Conditional Conformaces 的基本用法以及优势,并分析了两个实用场景:递推设计(Recursive design)和多重请求(Multipart request)。

🐢 Behavior-Driven Testing Tutorial for iOS with Quick & Nimble

相比于传统的 UI Testing,行为驱动测试(BDT,Behavior-Driven Testing,类似的概念还有用于软件工程开发领域的 BDD,Behavior-Driven Development)只专注于 App 在某一操作后的表现行为是否如预期,而不关心表现行为具体是怎么实现的。RW 这篇文章介绍了 BDT 的概念,并通过一个例子生动形象地教学了如何使用 Quick 和 Nimble 两个测试框架进行行为驱动测试。对于想通过优化测试流程来提高项目质量的同学,这篇文章的内容很值得阅读与尝试。

🐎 Video Depth Maps Tutorial for iOS: Getting Started

iOS 11 推出了一个全新的特性:针对双摄像头设备录制的视频可以提供深度信息。这对于视频处理而言是一个巨大的进步,在以前纯基于 2D 图像分析的基础上,结合深度信息可以更轻松的实现背景虚化、风格变换等很 fancy 的效果。

Raywenderlich 这篇文章介绍了这个特性的应用,文章秉承其一贯的优点:非常易读且结合实践,建议做音视频的同学可以阅读,尽早尝试在业务中应用这个新特性。

🐕 实现一个自定义检查规范的 Clang 插件

作者从 给OC代码添加类型检查 的需求入手,大致介绍了一下 Clang 插件能做什么Clang插件怎么去开发 两件事情。对于想尝试 Clang插件开发 的人来说,是一篇不错的参考文章。

🐕 What's New in Swift 4.2

Swift 4.2 马上要发布了,作者简单介绍了一下 4.2 已经落实的功能。

  • Enum 新增 CaseIterable 协议,支持 allCases 属性;
  • 新增编译标记 #warning#error
  • 动态成员变量查找 @dynamicMemberLookup, 这是一个比较有意思的改动,是 Chris Lattner 为了支持 Python 而加上的。推荐阅读 - 关于这个改动的讨论
  • 布尔值切换 toggle()
  • 集合移除支持过滤器。

中文版可以看一下 @知识小集 的这篇 文章

🐕 metalkit.org 全站翻译

推荐一个学习 Metal 的资源:metalkit.org 有一系列 MetalKit 教程,网友 @XanderXu 将其翻译成中文,推荐给对 Metal 有兴趣的同学。

🐢 深入剖析 JavaScriptCore

现在大前端的发展大潮下,JS 与客户端结合越来越紧密,大家都知道 JS 可以任意下发代码,在运行期动态执行,这一切都是通过 JavaScriptCore 这个 JS 引擎来实现的,本篇作者会带着大家深入剖析 JavaScriptCore 最底层的工作原理,去探索 JS 代码从编译到执行都是怎样运作的,内部都包含了哪些模块,最后还介绍了除了 JavaScriptCore 之外其他的 JS 引擎。

🐎 iOS 应用逆向工程资料汇总

逆向是一个神秘有趣的领域,很多需求借助逆向可以看看其他 App 怎么实现的,这两年也有若干常用工具发生了变化,产生了一些新的工具。这篇文章总结下基础的 App 逆向的方法,也全方位收集了多种资料包括工具 / 书籍 / 文章 / 论坛。

🐕 Making your iOS application easy to read with these simple steps.

优秀的程序员会用尽可能简单的方式来解释他们的代码,几个步骤,让你的 iOS 代码容易阅读。理解代码不应该是去理解“如何”实现的,而是要理解想要“达成”什么。

🐢 How to Make a Game Like Candy Crush with SpriteKit and Swift: Part 1

这个教程分为三个部分,教你如何使用 SpriteKit 和 Swift 制作一款类似 Candy Crush Saga(糖果传奇)的游戏。在这个教程中可以学习到与 Swift 有关的枚举、泛型、下标、闭包和扩展等知识,还可以学习到游戏的架构和最佳实践。

🐕 RTL 适配历程

RTL 语言(如阿拉伯语)的适配一直是一个比较令人头疼的问题,本文以 Apple 官方文档 为基础同时结合作者的自身实践,从布局、手势、图片等多个方面对 iOS 9 之后的 RTL 适配做了详细的归纳与总结,同时给出了具体的示例代码,有相应需求的同学绝对不要错过。

工具

谷歌开源 iOS 辅助功能自动测试框架 GTXiLib

GTXiLib 采用 Objective-C 编写,能与现存的 XCTests 测试框架整合。并在 XCTest 结束调用 tearDown 前,执行所有注册的可用性检查。当 GTXiLib 检测失败时,XCTest 的测试也会失败,两者相辅相成,能够帮助开发者更好的为每个人提供无障碍服务。

代码

JPVideoPlayer 3.0 使用介绍

JPVideoPlayer 是我使用过最棒的基于 AVPlayer 的封装库。曾经在某个在足球项目中深度使用过。当时除了下载这个功能还不完善其他使用体验接近完美。比如,一句话就可以把任何 View 当做播放容器。
现在作者重构了项目的边下边播功能和 Cell 中的内嵌播放器功能。只能说,如果你的项目中有这类需求,那么 JPVideoPlayer 是不二选择。
另外,代码的结构和风格也值得阅读。

Swift Tagged

同样都是 id,同样都可以用 Int 来表示,但用户的 id 和文章的 id 明显是不能混用在一起的,Swift Tagged 这个库就为我们提供了一种便利的类型声明方式 typealias Id = Tagged<User, Int>,能够让我们在编译期避免字段误传的问题。

BTW,这是 Kickstarter 两位前任工程师,创办的网站 Point Free 出品的一部分内容。

关注我们

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

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

本期编辑

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

说明

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

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

老司机 iOS 周报 #15 | 2018-04-16

22 Dec 09:43
Compare
Choose a tag to compare

ios-weekly

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

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

福利

周报读者专属 Reveal 50 元优惠券

我们和 Price Tag 的合作,给读者送一个小福利,点击上面链接可以领取 Reveal 14 优惠券。领取后到这里可以使用:购买链接

专栏

onevcat 的小专栏:开发笔记簿

记录了喵神日常开发时遇到的问题和解决方案,同时也会收藏一些学习时记录的笔记,随想等。定价 ¥99,因为至少会有一两年的长期更新,所以这个价格是非常良心的。而且目前已经更新了 9 篇,涉及的范围也比较广,值得订阅!

文章

🐢 🌟 深入浅出 GCD 系列文章

这是 cocoa-chen 阅读 GCD 源码后分享的系列文章。该系列文章以常用的 5 个 GCD API 为切入点,从『使用场景』到『原理深究』再到『总结』循序渐进十分细致地阐述了 GCD 是怎么实现这些 API 来管理维护线程池的。系列文章一共有 6 篇,大家可以各取所需:

🐢 深入理解 Swift 派发机制(英文原文)

2016 年的一篇文章,主要内容是讲关于 Swift 各种类型的方法派发机制,以及 NSObject 与 Swift 原生类型的差异等等,读完这篇文章我才第一次对于 Swift 的派发机制有了比较清晰全面的认识,虽然有一小部分内容已经过时了,但还是强烈推荐大家看一下。

🐎 iOS App 连续闪退时如何上报 crash 日志

如果是我们自己开发一套 crash 日志收集系统的话,可能就会发现在 App 启动阶段就连续闪退的场景下往往无法正确上报崩溃日志。Peak 从『如何检测连续闪退』和『如何在闪退后继续上传日志』两方面分析和解决了这个痛点。

另外,微信读书团队以前也分享过类似的方案——iOS 启动连续闪退保护方案,并且该方案额外集成了自修复系统。

🐎 How To Keep Learning After 50 and Other Ways to Hack Your Brain at any Age

这篇文章通过介绍了“神经可塑性”(Neuroplastcity)理论,论证了活到老、学到老是有科学依据的。不仅如此,该文还提出年龄逐渐变大之后如何“hack”自己的大脑来让自己更有效的学习的方法。有趣的是,文章为了讨论这个话题,还邀请了 25 名年长的艺术家、教练和程序员来参与调查,他们中几乎所有都在持续的学习,尤其是其中还有从 Fortran 一路写到 Swift 的程序员,可以说是相当资深了。

作为焦虑的准中年程序员,这篇文章对我的触动可谓是很大的。除了内容本身值得思考之外,文风读起来就像《老人与海》那样充满力量感。值得收藏!

🐢 Behind-the scenes improvements in Swift 4.1

掌握编程语言的设计与实现一直以来都处于技术圈鄙视链的顶端,相信绝大多数程序员都曾经跃跃欲试。如果你是对 Swift 语言的实现原理感兴趣的同学,一定不要错过这篇文章。

文章标题看上去好像也就是列举一下 Swift4.1 一些改进,但实际上是针对 Swift 语言设计上面临的诸多问题和解决方案进行了深入讨论,包括但不限于为什么 protocol 中默认实现的方法不能返回 self,OC 类桥接到 Swift 中都发生了什么,以及泛型参数支持中父子关系如何实现等等。看完后对于”为什么 4.1 的编译速度好像变快了?”以及”Swift 的 ABI 什么时候才能稳定?”这两个经典问题,你应该会有自己的答案。

🐕 工程师如何在工作中提升自己?

美团点评技术团队刘丁对工程师发展的一些思考和总结,写的很全面。文章第一部分阐述了一些学习的原则;二部分分析了作者在工作中碰到和看到的一些典型困惑;第三部分剖析架构师的能力模型,让大家对目标所需能力有一个比较清晰的认知。

🐎 如何快速成长为技术大牛

技术人员天天写业务代码还加班,如何才能成为技术大牛?,文章列出了一些典型的误区及正确做法:Do moreDo betterDo exercise

🐎 Swift Tip: Local Computed Variables

本文介绍了一种通过在函数体内部声明计算属性从而实现局部代码复用的编码方法,不过也仅仅是代码复用,性能方面木有任何提升,类似于一个局部函数,感兴趣的同学可以了解一下。

🐕 读 SnapKit 和 Masonry 自动布局框架源码

介绍了主流 AutoLayout 布局框架 SnapKit 和 Masonry 源码结构。SnapKit 的设计思路很好理解,也有值得学习的设计经验。如果自己先尝试读读源码再看这篇文章会比较好理解。

🐢 11 Tips for Working on the iPad

MacStories 整理了 11 条指南和小窍门,帮你提高 iPad 在 iOS 11 下的生产力。从外接键盘推荐和快捷键到手势和 Siri,全都是 Federico Viticci 日常使用 iPad Pro 的小技巧。

🐕 iOS 中制作原型动画的一些方式

介绍了两种动画原型的制作方式。利用 Xcode 的 playground 和 PaintCode。在我看来这两种方式其实都有缺点。playground 编译速度太慢并且调参还是用代码。效果基本靠蒙。PaintCode 适用范围太局限。基本都是绘制路径。现在最强的的原型工具应该是 Principle。

🐎 fastlane 发布 CI aplha 版本

alpha 版本发布了。其实关于公司的自动化也是老生常谈的问题了。
体验比较好的自动化配置在我看来是,Slack + Xcode server + Fastlane + Phabricator + Arcanist + Trello(jira)。有兴趣的同学可以研究一下。

工具

IBM Watson Services for Core ML

Watson Services 是 IBM 的人工智能实验室提供对外的 AI 服务,包含了聊天对话/视觉识别/语音处理/语言翻译等多方面能力,而 IBM Watson Services for Core ML 是 IBM 与苹果合作的,将 Watson Services 的 AI 能力与苹果的 CoreML 相结合移动端 AI 服务,以 SDK 的形式接入移动端,方便开发者快速构建具有 AI 能力的 App。

苹果产品购买时机建议

苹果更新其产品的时候往往是该产品的最佳购买时机,如果错过了,那么可以在这个网站上找到购买建议,网站会根据该产品距离上次更新的时长,以及历史以来的平均更新周期给出指导,并收集了产品相关的最新传闻给与你作为参考。

内推

奇志信息科技: 杭州/广州 iOS 工程师

我(@没故事的卓同学)现在的公司,Swift 开发,应用支持从 iOS 10 开始,杭州和广州都有研发团队,无人机应用方向。iOS、Android、前端、UI 都招,感兴趣的朋友欢迎简历投到 hr@kiwiinc.net

上海享物说网络科技有限公司:上海 iOS 工程师

我 (@EyreFree) 现在所在的公司,位于上海宜山路地铁站附近,主营内容为二手互送社区,Swift 开发,应用支持从 iOS 9 开始。除 iOS 职位以外,还有 Web 前端 / Android 工程师等岗位空缺,求三年左右经验的大佬,三餐供应,住宿补贴。感兴趣的朋友欢迎简历投到 eyrefree@eyrefree.org

关注我们

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

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

本期编辑

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

说明

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

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

老司机 iOS 周报 #14 | 2018-04-09

22 Dec 09:43
Compare
Choose a tag to compare

ios-weekly

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

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

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

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

老司机精选专栏

我们在小专栏上开通了一个收费专栏:SwiftOldDriver 精选专栏的收入会用于周报编辑部日常运营。平均每周专栏会更新一篇文章,持续更新至 18 年底。现在订阅的优惠价格为 49 元,下周价格会恢复为 59 元。如果愿意支持我们欢迎订阅,相信内容也不会让你失望。

专栏的第一篇文章 《[译] iOS Continuous Delivery 除了 Fastlane 我们还有另外五种选择》

新闻

允许用户管理存储在 iCloud 中的数据

为帮助开发者遵守欧盟即将推出的《通用数据保护条例》(GDPR),苹果提供相应原生 API 和 Web API,支持开发者帮助用户对 CloudKit 里的数据进行导出、限制或者删除。且当用户停用其 Apple ID 或者限制其数据时,开发者需要处理 CloudKit API 返回的错误信息。

CocoaPods 1.5 支持 Swift 静态库了

CocoaPods 这周更新到了 1.5,主要是加强了对于 Swift 静态库的支持,新增一个选项去自动处理 Module 头文件的搜索路径,给 Podfile.lock 增加了更多信息。正在维护开源库的同学建议仔细阅读这篇 Release Note。

文章

🐎 Swift Tip: Capture Lists

通常我们用 [unowned self] 这种方式解决引用循环。其实我们也可以通过捕捉列表直接声明使用的实例,这样就不会在闭包里引用到 self:

observation = viewModel.observe(\.navigationTitle, options: [.initial, .new]) { [navigationItem] _, change in
    guard let v = change.newValue else { return }
    navigationItem.title = v
}

🐕 追踪 Objective-C 方法中的 Block 参数对象

本文创新地提出了一种监控回调 block 是否有被正确执行的解决方案 — BlockTracker。通过将包含 block 参数的函数关联到特定的 tracker 对象上,就可以监听到该函数的所有 block 参数被调用、被销毁的时机甚至调用的次数。在协助我们 debug 问题的同时还能为我们分析一些黑盒函数提供参考。

值得点赞的是,本文毫不吝啬的花了很大的篇幅来讲其实现原理,对 OC Runtime,OC 与 C 交互等方面有兴趣的读者千万不可错过。(建议配合 BlockTracker 的前身:BlockHook 介绍 一起阅读)。

🐕 iOS 中的 Copying

本文对 iOS 开发中的拷贝做了较详实的介绍,对浅拷贝与深拷贝的概念进行了解释,并且对可变对象、不可变对象的 Copy 与 MutableCopy 操作进行了分析,同时也给出了如何进行深拷贝与为自定义类添加拷贝操作支持的方法。

🐢 Calling Go code from Swift on iOS and vice versa with Gomobile

本文详细介绍了作者在 iOS 工程中调用 Go 的踩坑过程,主要包括以下内容:

  • 一些常见错误或意外状况,以及针对它们的解决方案;
  • 怎样在 Swift 中调用一个 Go 的构造函数来创造一个 Go 的结构体实例;
  • 怎样在 Go 中定义一个需要用 Swift 代码来进行实现的接口;
  • 将 Swift 实现传递给 Go 的构造函数,并发起双向通信。

对 Go 在 iOS 端的应用感兴趣的同学可以看一下,应该能有不少收获。

🐕 在 iOS 中如何正确的实现行间距与行高

NSAttributedString 中的行间距 lineSpacing 并不是设计师和我们通常理解的行间距,要实现和设计稿完全一致的行间距需要结合使用 lineHeight 和 lineSpacing。而如果需要保证 iOS 和各种 Android 设备上的行间距完全相同,则不应使用 lineSpacing,而应该借助于 lineHeight 和 baselineOffset 来实现。

🐕 Swift 项目中涉及到 JSONDecoder,网络请求,泛型协议式编程的一些记录和想法

这篇文章很详细的描述了关于 JSONDecoder 的使用方法及内部实现原理。对于还没有上手使用 JSONDecoder 的各位来说,是一篇很好的教程。

🐎 iOS 程序员效率提升利器之 AppleScript

AppleScript 是苹果自家的脚本语言,Peak 利用这款脚本语言提高了自己工作效率,并分享了他的两个应用场景——『自动化跟踪查询 crash 流程』和『重构 Objective C 代码』。

🐎 SnapKit 最佳实践

四娘写的 SnapKit 最佳实践文章。主要分享了几个 SnapKit 的使用建议,可以让代码更加简洁和优雅。

🐢 Common iOS development mistakes

文章总结了一些常见的 iOS 开发中会犯的错误。涵盖的面比较广,涉及到程序设计、开发、调试和测试等各个阶段。同时还指出了几个提高质量的方向,值得一读。

🚧 越狱 iOS 全局开启 WebView 远程调试

iOS 7 之后,在移动设备和 mac 端的 Safari 上均开启开发者功能之后,可以打开 Mac Safari 的 WebInspector 从而进行 Web 页面调试。包括页面资源,Dom结构,JS调试,控制台等等,我们可以用 WebInspector 来观察调试自己 App 内部的 H5 页面运行状况。但是这个调试功能只对 Xcode 真机调试状态下的 App 和系统浏览器 Safari 开启,无法查看与调试别人的 App 中的网页,借助这款越狱插件,我们就可以做到全局开启 WebView 的远程调试了,文章中还有源码链接

工具

MerchantKit

现代 iOS 内购管理框架,极大地简化了独立开发者的工作,可以追踪被购买的项目、检索购买、管理订阅到期日期、恢复购买、验证购买等等。MerchantKit 为具有一系列内购项目的 app 而设计,是为应用增加 pro 版本的绝佳方式,不论是一次性购买还是采取订阅方式。

代码

VisualProgrammingLanguage

这是一个有趣的可视化编程开源库,只需要动动手指或者 Apple Pencil,即可新建语法节点,连接节点的输入与输出,然后生成目标代码。不过它现在只能算一个可行性证明,效率还很低,如果你有兴趣,可以帮助作者一起完善。(也许以后它能让编程教学变得更轻松简单,而且有趣。)

本期编辑

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

说明

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

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

老司机 iOS 周报 #13 | 2018-04-02

22 Dec 09:42
Compare
Choose a tag to compare

ios-weekly

欢迎第 12 位编辑 @aaaron7 加入。

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

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

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

新闻

苹果新品发布会

苹果进行了一场没有直播的发布会。发布了支持 Apple Pencil 的 9.7 寸 iPad,芯片升级为 A10 Fusion,较上代在 CPU 性能提升了 40%,在图形运算提升了 50%。32GB 价格由 2688 降至 2588。

除此之外,苹果还更新了一系列服务:iWork 三件套加入了「智能注解」功能、用于教学的 AR 应用以及免费的「人人能创造」课程和「课业」应用。为在校师生提供更好的授课和学习体验。

iOS 11.3 正式发布

iOS 11.3 正式发布,针对之前的「降频门」事件,11.3 可在 “设置”->“电池” 中查看电池效能并关闭「电源管理」功能。
One more thing, 北京、上海地区用户还有专有福利,可用 Apple Pay 绑定「交通卡」,此功能与广州、杭州等地目前的 Apple Pay 支付不同,使用 NFC,刷卡时候不用「刷脸」了。

iOS 11.3 支持 PWA

随着 iOS 11.3 的发布,苹果悄悄的支持了 PWA 理念背后的几种新技术:Service Worker,Web App Manifest。通过 PWA 现在可以不用通过 App Store 在 iOS 上安装应用了。但是 iOS 上的 PWA 还是有诸多额外的限制:最多 50Mb 的离线数据和文件;无法在后台执行代码;没有消息推送,没有 Siri 集成等。

PWA 在 iOS 上的能力还是差 Native app 很多,谈取代就想多了。看做 web 能力的延伸和扩展我想才是正确的认知。

区块链游戏,其实也没什么神秘的

Cocos2d-x 宣布开发基于区块链的游戏引擎,提供 SDK 供游戏厂商接入,给现在火爆的区块链圈子又多了一种应用形态。大部分游戏都有自己的金币货币与金融交易体系,发币与交易在游戏里是一个很自然并且有意义的事情,而区块链技术能给现在的游戏价值体系解决了一些问题。一,跨游戏之间的金币流通。二,玩家点对点去中心化的可信道具交易。三,智能合约防止游戏公司,增发减发随意调控游戏物价。

Swift for TensorFlow

TensorFlow 社区在 TensorFlow Dev Summit 2018 上宣布将于四月开源 Swift for TensorFlow 项目。

Integrating ClassKit into Your App

Xcode 9.3 带来了 ClassKit 框架,与全新的、强大的 iPad app Schoolwork 配合,帮助教师和学生追踪作业和进度。借助 ClassKit,教师可以轻易查看 app 中的特定学习活动,点击一下就可以直接带学生们进入该活动。此外还会与教师安全、私密地共享进度数据,以帮助教师进行个性化教学。

文章

🐕 Swift 4.1 新特性概览

这周 Swift 4.1 伴随着 Xcode 9.3 一起发布了,没有破坏性的 API 修改,大幅优化编译速度,并且还加入了几个实用的小功能,知识小集在这篇文章里给我们深入介绍了新增的特性,强烈推荐大家在代码迁移之前过一遍这篇文章!!!

🐢 🌟 🚧 Everything about public and private Swift attributes

经常写 Swift 你是不是都会有这样的感受,每次遇到一些不明所以的 warning 总是可以靠一些 @ 开头的修饰符搞定。比如可能是最常用的 @objc,或者是闭包伴侣 @escaping,这篇文章非常全面的介绍了 Swift 的这一类公有属性修饰符(public attribute)的用法,可以帮助你获得一个全面的认识。

不仅如此,文章后半部分还介绍了一些私有属性修饰符(private attribute),比如起到类似 pch 头文件作用的 @_exported 以及指定函数是否可以被看做是原子操作的 @_transparent。私有属性修饰符绝大多数都和编译过程中的优化策略选择有关,虽然可能日常开发中用不到,但很适合对 Swift 语言本身有兴趣的读者深入研究。

🐢 🌟 🚧 Best iOS hacks from Twitter: January & February Edition

1 月 和 2 月 twitter 上收集的各种小技巧。五花八门,总有几条击中你。

🐢 🌟 Pragmatic iOS app architecture

文章从多个角度评估一种架构是否适合你的项目,并从经典的 MVC 一路引申到 RXSwiftMVVMVIPER,值得细读。

🐕 What 2018 has in store for Swift

文如其名,本篇文章重点讲述了在2018年即将到来的 Swift 4.2 和 Swift 5.0 有哪些激动人心的新特性,比如精准删除 remove(where:) 和像 OC 一样支持 #warning#error 标签来让编译器协助自己管理代码,其中最好玩的还是可以通过 CaseIterable 协议来让 enumcase 可以被枚举,到时候 DSL Parser/Interpreter 之类的应用代码就更优雅了。

🐕 NSURLProtocol 拦截 NSURLSession 请求时body丢失问题解决方案探讨

NSURLProtocol 我们常用来拦截网络请求,但当使用 NSURLSession 发起 Post 网络请求的时候,用 NSURLProtocol 拦截就会发生无法获取 Post Body 的情况。为此本文给出来几种解决办法,并且给出了最佳实践方案。

🐎 UIView Auto Layout life cycle

Auto Layout 是苹果一直在大力推广的布局方式,现在在开发者中的使用也越来越多。这篇文章从『约束更新』、『布局计算』和『渲染显示』三个过程非常细致地分析了UIView 进行 Auto Layout 的生命周期,最后还讨论了 Intrinsic Content Size(如 UIButton 等可由内容自然决定大小)Alignment Rectangle(如添加阴影等可见区域与 Frame 不等的) 的使用。

🐕 🚧 Elegantly chaining UIViewPropertyAnimators

在 iOS 10 之前,如果想按顺序播放动画,会通过 UIView.animate() 里的 completed blok 嵌套起来,代码看起来并不优雅。iOS 10 引入了面向对象版本的 UIViewPropertyAnimator。它允许将每个动画的定义与它们连接方式区分开来,拥有更好的可读性,也方便解耦。

还可以将 UIViewPropertyAnimation 兼容 RxSwift,通过“流”将所有的动画连接起来。

然而更为巧妙的实现方式,是通过自定义操作符实现链式调用,最终效果:self.animator1 ~> self.animator2 ~> self.animator3 ~> self.animator4。

🐢 冰霜的 ML 入门笔记

冰霜的文章一直都是以深入全面、通俗易懂著称。《冰霜的 ML 入门笔记》包含了他在学习斯坦福机器学习入门视频课程的全部笔记。如果你没有足够的时间去看这些视频,或者听英文的能力没有那么强,这些笔记对你来说一定非常有用了,而且你也不用担心会错过视频中的一些内容,因为这些笔记和冰霜以往的风格一样,内容比视频只多不少。

🐢 Tips to become a better Swift (iOS) Developer

语法糖越多的语言,就越容易体现出简洁高效和啰嗦冗长之间有多大的差别。不幸又万幸的是,和 Ruby 类似,Swift 是一门语法糖很多的语言。文章介绍了很多 Swift 一些基础但又高效的写法,如果静下心来仔细阅读,相信你会写出不一样的 Swift 代码。

🐎 compactMap 了解一下?

Swift 4.1 里将 flatMap 的其中一个版本重命名为 compactMap,但无论全局替换或者是逐个编译警告消除都不是一个好办法,这篇文章就介绍了如何使用方法重载以及重构工具,精准快速地替换掉项目里弃用掉的 flatMap

🐎 教你如何反编译微信小程序

作者大致描述了如何将微信小程序编译之后的文件反编译成开发工具可读的源码的过程,文章描述了一个大概,建议阅读完文章之后,有兴趣的话可以进一步了解一下作者开源的 反编译工具

🐕 硅谷生活半年记

作者对自己最近半年在硅谷切身经历的小结,从医、食、住、行、环境、薪酬等方面对硅谷生活进行了介绍并与国内做了简单对比,同时配以大量图片,让我们了解了一种完全不同的生活方式的同时,也给我们对未来的规划提供了些许参考。

代码

SwiftSoup

SwiftSoup 是一个纯 Swift 的 HTML 解析库,支持跨平台(Linux、iOS、macOS、tvOS 和 watch OS)。它提供了提取并操作数据的 convenient API,充分利用了 DOM、CSS 和 类似 jquery 的方法。SwiftSoup 实现了 WHATWG HTML5 规范,将 HTML 解析为与现代浏览器相同的 DOM。

工具

函数响应式编程框架:ReactiveCocoa 和 RXSwift 速查表

近几年函数响应式编程在移动端的应用越来越多,其中『ReactiveObjC』和『RxSwift』分别是 ObjC 和 Swift 对这种编程思维实现的框架。ValiantCat 使用 XMind 将这两个框架的 API 和 小技巧整理成了脑图,作为速查表辅助自己学习记忆。

另外,shuaiwang007 也总结了一些 RAC + MVVM 在实际项目中用法

本期编辑

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

说明

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

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

老司机 iOS 周报 #12 | 2018-03-26

22 Dec 09:42
Compare
Choose a tag to compare

ios-weekly

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

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

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

新闻

快应用标准今日发布,开发者需要知道些什么?

9 大安卓厂商联手推出快应用标准。前有小程序,后来快应用,大前端的大潮之下,越来越多的新技术在冲击着移动端开发。"轻型"应用其实也代表着一种用户的诉求,限制大小,即装即用,简单有效。对这么多层出不穷的大前端技术,作为客户端原生开发的的朋友们有什么自己的想法么?来听听 Bang 对快应用的评价吧——『对快应用的看法 from Bang』。

揭秘苹果 HomePod 广告里会动的公寓

不久前,苹果专门为 HomePod 拍摄了一支视频广告《Welcome Home》,上线 2 天全球观看次数突破 600 万,社交媒体上好评如潮。这篇文章通过苹果发布的拍摄纪录片,揭秘了该广告特效是如何完成的,对于果粉来说看到这些花絮也会是很有趣的。

文章

🐢 🌟 iOS 中的 JS

本文详细的介绍了跨端开发中 JSCore 的使用。阐述了为什么要关注跨端开发,JS 如何与本地 OC 代码互相调用,以及 JSPatch 如何结合 JS、OC Runtime 做到修改 iOS 运行代码。作者有大量 Weex 开发经验,行文流畅,想要了解 JSCore 的同学请好好学习。

🐕 🌟 从 babel 讲到 AST

作者从 babel 转换的一个简单场景出发,引出了代码转换过程中核心的中间形式:AST(抽象语法树),并且用 JS 实现了要生成 AST 所需要进行的词法分析和语法分析过程。比较值得推荐的是阅读本文并不需要编译原理基础,非常适合这一块基础不好的同学阅读。再加上其 JS 写得也比较通俗易懂,建议大家可以参考其逻辑用自己熟悉的语言实现一下,加深理解的同时也有很大的可能提起对编译过程的兴趣。

如有兴趣,在实现 AST 的解析和生成后,可以考虑写一个简单的解释器,来执行该 AST。

🐢 🌟 使用 ASDK 性能调优

无论是 AsyncDisplayKit 亦或是微博客户端使用的 CoreText 渲染 TableViewCell。共同的思想都是如何在非主线程里解决 UI 渲染的问题。
阅读文章的时候需要把握住两个点:

  1. 如何在异步线程绘制 UI。
  2. 异步绘制 UI 结束之后选择什么时机刷新 UI。

这篇文章可以让你更细致的了解 iOS 底层绘制的过程。 强烈推荐。

🐢 Bestswifter 的 2017 年度总结

Bestswifter 的 2017 年度总结,回顾了作者近一年来的所学内容并且穿插了相应知识点的详细总结博文,主要包括以下几点:

  • 工作效率脚本和工具;
  • iOS 自动化测试之 Appium;
  • 与网络相关的实践技巧和底层原理;
  • Cocoapods 与 Xcode 工程配置;
  • 拓展 JS 方向的知识,探索自己的全栈化道路。

除此之外,作者还对自己工作方面的情况做了简单概述,并且制定了接下来的学习方向,对我们而言有一定的借鉴意义。

🐕 🚧 Five Options for iOS Continuous Delivery without Fastlane

使用 fastlane 作为 iOS 开发中的自动化工具已经是一个很主流的选择。然而 fastlane 也有不少问题:大多数开发者对 Ruby 环境都不熟悉;fastlane 基于苹果的 API 封装,如果苹果开发平台修改接口 fastlane 的使用就会受到影响;配置 lane 的脚本语言也需要不少时间;因为是 Ruby 写的虽然开源也很难贡献代码;fastlane 的 issue 维护也不太活跃,超时后的 issue 会自动关闭,会出现一个问题有好几个 issue 的情况。

基于以上的出发点,作者对于摆脱 fastlane 采用其他工具进行自动化进行了探索。选择有:苹果原生开发者工具;Xcode server;云端 CI 服务;Apple + BuddyBuild;基于 Swift 平台的选择。

🐕 iOS layoutMargins 的坑:一个活久见的 bug

作者通过实际开发中的调试惨案,介绍了 insetsLayoutMarginsFromSafeArea 这个大家不太熟悉的属性的作用。因为作者没有进行更深入的拓展,所以推荐大家看一下《iOS 成长之路 3 期·WWDC17 内参》中的《让你的 UI 适配 iOS 11 吧》这篇文章,文章对包括 Safe Area 在内的 Layout Margin 有很详细的介绍。

🐎 A helper for working with temporary files in Swift

相信大家在 App 中经常需要操作临时文件,但文件的维护是件麻烦事,Ole Begemann 对此进行了封装。

🐎 iOS 下如何一键调试 Push

Peak 分享了他如何通过脚本去定位在推送失败时,判断 Apple 服务器有没有发送 Push 的实践经验。他不但分享了一个挺实用的小工具,也给我们分享了一个他在 Facebook 工作时学到的一个习惯 -- 尽可能的用工具去提供效率。

代码

Tiercel

纯 Swift 的下载框架,文档清晰,代码整洁。支持多任务并发、大文件下载和断点续传等特点,满足下载的大部分需求。

音视频

🐎 App Store Product Page

Apple 邀请了概念画板、Grokker、TypeShift、War Dragons 和 codeSpark 学院等 App 的开发者,分享如何利用 App Store 产品介绍页面上的元素,以便吸引更多用户下载。包括 App 的名字和次标题、设计 App 图标、使用 App Preview 视频和截图、编写 App 描述和促销文案以及利用全新的 promoting in-app purchases。

本期编辑

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

说明

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

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

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

22 Dec 09:41
Compare
Choose a tag to compare

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)