Releases: SwiftOldDriver/iOS-Weekly
老司机 iOS 周报 #14 | 2018-04-09
老司机 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
欢迎第 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
一路引申到 RXSwift
、MVVM
、VIPER
,值得细读。
🐕 What 2018 has in store for Swift
文如其名,本篇文章重点讲述了在2018年即将到来的 Swift 4.2 和 Swift 5.0 有哪些激动人心的新特性,比如精准删除 remove(where:)
和像 OC 一样支持 #warning
和 #error
标签来让编译器协助自己管理代码,其中最好玩的还是可以通过 CaseIterable
协议来让 enum
的 case
可以被枚举,到时候 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
我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。
同时也支持了 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 渲染的问题。
阅读文章的时候需要把握住两个点:
- 如何在异步线程绘制 UI。
- 异步绘制 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
老司机 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)
老司机 iOS 周报 #10 | 2018-03-12
老司机 iOS 周报,只为你呈现有价值的信息。
新闻
3 月 7 日这一夜,黑客耍了所有人
币圈本周最佳!虽然只是币安 Binance 交易所被黑,并不是 BTC 本身的缺陷,但是比较讽刺的是:币圈和链圈都在一边吹捧去中心化,一边又通过中心化的交易所炒币。真可以说是嘴上笑嘻嘻,心里 MMP...
文章
Quick Guide To Property Animators
现在至少有三种方式来实现视图动画。从最早的 begin/commit,到 iOS 4 的 block API,以及从 iOS 10 开始的 property animators。如果你了解基于 block 的视图动画 API 但不熟悉更复杂的 property animators,这篇指南会为你介绍它们之间的异同。
🚧 Designing iOS architecture: Motivation
非常特别的一篇文章,文章在谈架构,但是文章里并不介绍具体架构。非常简洁的介绍了为什么需要设计架构,以及一个架构的设计过程应该是怎么样。
稀土掘金翻译计划 TensorFlow Docs 中文版
TensorFlow Docs 是由掘金翻译计划实时维护的 TensorFlow 官方文档中文版,维护者为全球各大公司开发人员和各著名高校研究者及学生。现已完成 TensorFlow V1.4 官方中文文档,译者团队正在向 TensorFlow V1.6 官方中文文档更新,掘金翻译计划欢迎大家的加入。
iOS 性能优化的探索
文章整理了常见的 UI 性能优化的方法。但是每一点都没有深入的展开略遗憾。
技术面试需要掌握的基础知识整理
这个项目对技术面试常会涉及到的基础知识进行了搜集整理。与网上零散的文章资料相比,它更系统与全面,每部分都是作者根据自己所得所思细心整理。相信在这个招聘热季大家都能从这里得到帮助。
The power of sets in Swift
本文对 Swift 中 Set 的一些鲜为人知但非常强大的特性进行了举例介绍,我们可以利用这些特性在某些情况下获得性能更好或可读性更高的代码。
代码
Repeat - Modern alternative to NSTimer in Swift
Swift 中的 Timer 需要提供 @objc 修饰的方法,这让人并不愉快,更别提 Timer 本身的诸多问题, 如 强引用 target,依赖 Runloop,不支持闭包等。
你需要一个更为优雅的计时器,Repeat 基于 GCD 的 DispatchSource,实现一个 Swift 风格的轻量级计时器。
原理:DispatchSource 用于监听系统底层事件的发生,DispatchSourceTimer 会创建 Timer 事件对应的 dispatch source,然后给这个 source 指定一个闭包,指定一个 Dispatch Queue。当 source 监听到 Timer 事件时,就会将该闭包自动加到 queue 中执行。
Resumable Assert
写代码的过程中或多或少都会遇到一些地方 assert
或者 fatalError
了,但我们却无法在当下马上修复它,这个时候可能我们只能先注释掉这些防御代码,重新编译运行,恢复到一个能继续当前任务的状态。
但我们真的无能为力吗?Google 团队给我们带来了这么一个工具,就像它的名字 Resumable Assert —— 可被恢复的断言,中断在断言的时候,我们可以在 debugger 里恢复运行,不需要修改任何代码。并且如果你是使用 Swift 的话,可以借助 Swift 的 Module 设计,直接在 module 内重写掉标准库里的 assert
方法,无需改动一行代码就可以把项目里的 assert
都变成可恢复的 😈。
书
Continuous Delivery for Mobile with Fastlane
你还在手动打包、上传 App 吗?是时候试试 Fastlane
了。本书将带你了解 Fastlane
的方方面面:如证书管理、TestFlight 管理、如何与现有的 CI
系统结合。另外,Fastlane
的 官方文档 也是非常好的快速上手资源。
本期编辑
@没故事的卓同学,@四娘,@mmoaay,@享耳先森,@EyreFree,@Damonwong,@折腾范儿_味精,@张嘉夫,@AidenRao,@Parsifal
说明
🚧 表示需翻墙,🌟 表示店长推荐
老司机 iOS 周报 #1 | 2018-01-01
老司机 iOS 周报,只为你呈现有价值的信息。
有建议或者有信息推荐可以到我们 github 下面提 issue。
新闻
致广大用户关于 iPhone 电池及性能的说明
苹果对电池老化会导致 iPhone 性能下降做的沟通说明。表示 从来没有、也永远不会通过任何手段,来有意缩短任何 Apple 产品的使用寿命,更不会降低用户体验来迫使大家升级设备。为了安抚大家的不满,苹果将更换电池的费用下调了 390 元,从 608 元降到 218 元。不过这个降价不是永久性的,只持续到 18 年 12 月。
Swift 快要可以和 Python 无缝交互了
这是 Chris Lattner 大神到 Google 之后的第一个提案,让 Swift 可以和 Python 无缝交互,Chris 每次提案基本上都会带上 Demo,这一次也不例外,只用了不到一千行代码就把交互逻辑给实现了出来🤷♂️,大家可以直接下载这个 playground 试一下用 Swift 写 Python 是什么感觉。
另外 Chris 还提出使用一套 DynamicMemberProtocol 去优化了 Python 交互的语法, 与 Python 的交互都是依赖于字符串,画风大概是这样的 let a = np.call(member: "arange", args: 15).call(member: "reshape", args: 3, 5)
,如果实现了 DynamicMemberProtocol 的话,就可以在 Swift 里像 Python 代码一样调用 Python 的方法 np.arange(15).reshape(3, 5)
,编译器不会给遵循了这个协议的对象做静态检查,但这本质上只是一个语法糖,编译时还是会转化为前者的格式去调用。
苹果宣布收购 Buddybuild
Buddybuild 是著名的自动化 CI 托管服务平台,苹果收购后 Buddybuild 公司将会加入 Xcode 团队。期待 Xcode 对 CI 的支持将会更进一步。
Swift Weekly Brief 宣布停更
Jesse Squires 宣布停止更新 Swift Weekly,一直以来这个 News Letter 都是我了解 Swift 开发进度最主要的途径,现在要停更了,确实很可惜。
Jesse 提到停止更新的理由,主要是因为当初开始 Swift Weekly 的时候,Swift 刚刚开源,对于功能和设计的讨论非常非常多,并且 Mailing List 这种形式让人很难找到有价值的内容,所以这样一个 News Letter 在当时是非常有意义的。但现在 Swift 已经逐渐成熟,社区里的讨论变得越来越深入,而且 Swift 最近还从 Mailing List 迁移到了论坛上,相关资讯的获取已经变得越来越方便了,Swift Weekly 的存在价值也已经大不如前了,所以才打算停止更新。
但停更只是个人意义上的停更,Jesse 欢迎社区的人接手过去继续更新,并且在原文介绍了一系列接手的注意事项。
Apple 更新 App Store Review Guidelines,增加 VPN 和 loot boxes 等条款
Apple 于 2017.12.21 更新了其 App Store Review Guidelines. 主要变化集中在以下几个方面:
- 新上架 App 引入 pre-order 机制
- 虚拟物品抽奖必须公布各项概率(loot boxes)
- VPN 类应用如需在特定地区发布,必须提供相应许可信息
- 符合特定前提下,允许通过模板生成的 App 上架发布
LiberiOS jailbreak for iOS 11 officially released, includes support for the iPhone X
LiberiOS 正式发布 iOS 11.0 - 11.1.2 的越狱工具,包括对 iPhone X 的支持。
文章
iOS 知识小集
国内知名开发者 @南峰子 把过去微博上发出来的 iOS 开发知识整理了出来,发在了 GitHub 上,据介绍这一系列的微博已经有 1000w 的阅读量了!!!
Swift Tips
跟前面 iOS Tips 小集类似的项目,不同的是这个项目里讲的是一些 Swift 的小 Tips,里面 #7,#22 等技巧我都有实际用于项目中,推荐大家看一下。
Weak Arrays
objc.io 在这篇博客里简单介绍了在 Swift 中自定义弱引用数组的一种实现方式。
When and how to use Value and Reference Types in Swift
全面介绍了 Swift 中的值类型和引用类型的使用区别。
Building an enum based analytics system in swift
使用 enum 和 protocol 构建安全、高效、灵活的 Swift 事件统计系统。
Measuring Swift compile times in Xcode 9
对 Xcode 进行一些配置看看哪些 Swift 代码拖慢了你的编译速度。
工具
App Host
一个轻量级的包托管网站,app-host 主要用于 iOS 和 Android 的包管理,作用类似于fir.im,不同之处是可以自由部署在内网,方便了公司项目保密。并且代码开源也可以方便根据各自需求进行定制化开发。
XcodeGen
XcodeGen 是一个根据已有的代码文件 / 目录和简单的配置文件来生成 Xcode project 的开源工具,快速生成模板工程、将 .xcodeproj 从 Git 追踪中忽略、方便地和他人分享自己的工程配置等,无限可能,等你尝试。
代码
WCDB Swift
WCDB 是微信团队开源的 SQLite 数据库,近日放出 WCDB Swift 的 1.0 正式版,WCDB Swift 使用纯 Swift 编写,几乎不包含 Cocoa 的代码,且与 ObjC 版保持完全一致的功能。其基于 Swift 4.0 的 Codable 协议实现模型绑定,通过建立 Swift 类型与数据库表之间的映射关系,使得开发者可以通过类对象直接操作数据库。
虽然项目没有实际使用于微信中,但这只是第一步嘛,并且文章最后还表示测试用例的代码覆盖率已经达到了 91.34% 了🤑,所以大家真的可以考虑在项目中使用。
Task automation in Swift with Sake
iOS 还没有使用 Swift 语言编写的自动化工具,目前流行的都是采用 bash、ruby 编写的。于是作者尝试利用 Swift 写了 Sake。这个项目目前还处于早期。
Fluid Slider
Ramotion 出品的滑动控件。
微信跳一跳可以直接更改分数,POST 请求没有校验
v2ex 上也有获得微信小游戏跳一跳源码的讨论。
书
Swift 进阶
Swift 经典书籍《Swift 进阶》更新了 Swift 4 的相关内容。