-
SwiftUI 的一些初步探索 (二)
我已经计划写一本关于 SwiftUI 和 Combine 编程的书籍,希望能通过一些实践案例帮助您快速上手 SwiftUI 及 Combine 响应式编程框架,掌握下一代客户端 UI 开发技术。现在这本书已经开始预售,预计能在 10 月左右完成。如果您对此有兴趣,可以查看 ObjC 中国的产品页面了解详情及购买。十分感谢!接上一篇继续对 SwiftUI 的教程进行一些解读。教程 2 - Building Lists and NavigationSection 4 - Step 2: 静...…
-
SwiftUI 的一些初步探索 (一)
我已经计划写一本关于 SwiftUI 和 Combine 编程的书籍,希望能通过一些实践案例帮助您快速上手 SwiftUI 及 Combine 响应式编程框架,掌握下一代客户端 UI 开发技术。现在这本书已经开始预售,预计能在 10 月左右完成。如果您对此有兴趣,可以查看 ObjC 中国的产品页面了解详情及购买。十分感谢!总览如果你想要入门 SwiftUI 的使用,那 Apple 这次给出的官方教程绝对给力。这个教程提供了非常详尽的步骤和说明,网页的交互也是一流,是觉得值得看和动手学习...…
-
Swift ABI 稳定对我们到底意味着什么
Swift 社区最近最重大的新闻应该就是 ABI 稳定了。这个话题虽然已经讨论了有一阵子了,但随着 Xcode 10.2 beta 的迭代和 Swift 5 的 release 被提上日程,最终 Swift ABI 稳定能做到什么程度,我们开发者能做些什么,需要做些什么,就变成了一个重要的话题。Apple 在这个月接连发布了 ABI Stability and More 和 Evolving Swift On Apple Platforms After ABI Stability 两篇文章...…
-
与 JOSE 战斗的日子 - 写给 iOS 开发者的密码学入门手册 (实践)
概述这是关于 JOSE 和密码学的三篇系列文章中的最后一篇,你可以在下面的链接中找到其他部分: 基础 - 什么是 JWT 以及 JOSE 理论 - JOSE 中的签名和验证流程 实践 - 如何使用 Security.framework 处理 JOSE 中的验证 (本文)这一篇中,我们会在 JOSE 基础篇和理论篇的知识架构上,使用 iOS (或者说 Cocoa) 的相关框架来完成对 JWT 的解析,并利用 JWK 对它的签名进行验证。在最后,我会给出一些我自己在实现和学习这些内容时的...…
-
与 JOSE 战斗的日子 - 写给 iOS 开发者的密码学入门手册 (理论)
概述这是关于 JOSE 和密码学的三篇系列文章中的第二篇,你可以在下面的链接中找到其他部分: 基础 - 什么是 JWT 以及 JOSE 理论 - JOSE 中的签名和验证流程 (本文) 实践 - 如何使用 Security.framework 处理 JOSE 中的验证这一篇中,主要介绍网络传输的密钥的编码和处理方法,以及进行数字签名和验证的基本流程。我们在之后实践一篇里,会使用到这些知识。密钥的表现形式显然 JWK 是一种密钥的表现形式,它使用 JSON 的方式,遵守 JWA 的参数...…
-
与 JOSE 战斗的日子 - 写给 iOS 开发者的密码学入门手册 (基础)
概述事情的缘由很简单,工作上在做 LINE SDK 的开发,在拿 token 的时候有一步额外的验证:从 Server 会发回一个 JWT (JSON Web Token),客户端需要对这个 JWT 进行签名和内容的验证,以确保信息没有被人篡改。Server 在签名中使用的算法类型会在 JWT 中写明,验证签名所需要的公钥 ID 也可以在 JWT 中找到。这个公钥是以 JWK (JSON Web Key) 的形式公开,客户端拿到 JWK 后即可在本地对收到的 JWT 进行验证。用一张图的话...…
-
关于 Swift defer 的正确使用
其实这篇文章的缘起是由于在对 Kingfisher 做重构的时候,因为自己对 defer 的理解不够准确,导致了一个 bug。所以想藉由这篇文章探索一下 defer 这个关键字的一些 edge case。典型用法Swift 里的 defer 大家应该都很熟悉了,defer 所声明的 block 会在当前代码执行退出后被调用。正因为它提供了一种延时调用的方式,所以一般会被用来做资源释放或者销毁,这在某个函数有多个返回出口的时候特别有用。比如下面的通过 FileHandle 打开文件进行操作的...…
-
Result<T> 还是 Result<T, E: Error>
我之前在专栏文章里曾经发布这篇文章,由于这个话题其实还是挺重要的,可以说代表了 Swift 今后发展的方向流派,所以即使和专栏文章内容有些重复,我还是想把它再贴到博客来。经过半年以后,自己对于这个问题也有了更多的实践和想法,所以同时也更新了一下。我没有直接改动原文,而是把新的想法和需要补充的说明,用类似这段话的引用的方式写在合适的上下文里。开始先打个广告我个人经常会在数码荔枝用优惠价格购买面向中国用户的一些软件,相比于花美金直接购买,价格非常实惠。近年来国内的正版风气和对知识知识产权的...…
-
十年前的日记们
假如我有时光机最近把工作上的事情忙完了,也把主机从美国换到了日本的机房,解决了国内的访问问题,所以准备开始好好重新拾掇一下,恢复定期更新 blog。其实我从大学时就有开始写 blog 的习惯了。不过不像最近的独立博客,那时候更多地是用新浪或者搜狐这样的平台,所以也就在那些地方也留下了不少“足迹”。既然是自己“存在过的证明”,我想可能还是把它们汇总一下,留个存档为好。于是就有了这篇和“技术”没什么关系的文章。这里面是我从 2006 年底到 2010 年三月期间的一些碎碎念,时间跨越从大二上半...…
-
开发者所需要知道的 WWDC 2018 新特性
一直阅读我的博客的朋友可能知道,我在每年 WWDC 之后都会写 (水) 一篇关于新 SDK 和开发工具的文章。之前这个系列叫做《开发者所需要知道的 iOS SDK 新特性》,但是最近虽然 Craig 嘴上说着不要,身体却很诚实地将 iOS 和 macOS 带到一起,所以今年我觉得可以改一改题目,就总览一下作为 Apple 生态圈的开发者,在今年 WWDC 上我个人的一些观察,以及可能应该注意的有趣的地方。在会前,Apple 就已经放出消息要放慢增加新功能的脚步,转而提升软件稳定性和可靠性。...…
-
关于 MVC 的一个常见的误用
写在前面:ObjC 中国 (或者说我个人) 现在正和 objc.io 合作打造一本关于 app 架构的书籍。英文版本已经提前预售,书本身也进入了最后的 review 阶段。我们也将在第一时间进行本书中文版的工作,还请大家关注。 本文的内容也是有关 app 架构的一些思考,如果你对架构方面的话题有兴趣的话,我之前还写过一篇利用 reducer 的单向数据流动的函数式 View Controller 的文章可供参考。如何避免把 Model View Controller 写成 Massi...…
-
不同角度看问题 - 从 Codable 到 Swift 元编程
最近开设了一个小专栏,用来记录日常开发时遇到的问题和解决方案,同时也会收藏一些学习时记录的笔记,随想等。其中一些长文 (包括本文) 会首发于专栏,之后再同步到博客这边。虽然现在的文章还不多,但是因为计划更新比较勤快,所以适当进行收费,也算是对自己写作的一种鼓励和鞭笞。欢迎感兴趣的同学进行订阅,谢谢~起源前几天看到同事的一个 P-R,里面有将一个类型转换为字典的方法。在我们所使用的 API 中,某些方法需要接受 JSON 兼容的字典 (也就是说,字典中键值对的 value 只能是数字,字...…
-
关于 Swift Error 的分类
在去年我应 IBM 编辑的邀请写过一篇关于 Swift 2 中 throws 的文章。现在回头看,Swift 2 其实是 Swift 语言发展的一个挺重要的节点:如果说 Swift 1 是一个更偏向于验证阶段的产品的话,Swift 2 中加入的特性为这门语言的基石进行了补足。在那篇文章里我们主要深入探索了新的 throw 关键字背后的事情,而同一时期其实 Swift 官方有过一次关于错误处理的讨论。随着 Swift 3 的开源,这些原始文档也被一同公开,展示了 Swift 设计的过程和轨迹...…
-
单向数据流动的函数式 View Controller
View Controller 向来是 MVC (Model-View-View Controller) 中最让人头疼的一环,MVC 架构本身并不复杂,但开发者很容易将大量代码扔到用于协调 View 和 Model 的 Controller 中。你不能说这是一种错误,因为 View Controller 所承担的本来就是胶水代码和业务逻辑的部分。但是,持续这样做必定将导致 Model View Controller 变成 Massive View Controller,代码也就一天天烂下去...…
-
开发者所需要知道的 iOS 11 SDK 新特性
年纪大了过了能熬夜看 WWDC 的时代了,但是还是在小小宝的哭闹和妈妈大人换尿布的催促中起了个大早。于是算趁着“热乎”把 WWDC 2017 的 Keynote 看完了。和往年差不多,虽然 WWDC 是一个开发者会议,但是 Keynote 并不是专门针对我们开发者的,它还承担了公司状况说明,新品发布等功能。作为技术人员,可能接下来的 session 会更有意义。要用一句话来评价今年 Keynote 所展现出来的内容的话,就是小步革新。大的技术方面可以说只有 ARKit 可堪研究,但是我们还...…
-
再看关于 Storyboard 的一些争论
从 iOS 5 的时代 Apple 推出 Storyboard (以下简称 SB) 后,关于使用这种方式构建 UI 的争论就在 Cocoa 开发者社区里一直发生着。我在 2013 年写过一篇关于代码手写 UI,xib 和 SB 之间的取舍的文章。在四五年后的今天,SB 得到了多次进化,大家也积攒了很多关于使用 SB 进行开发的经验,我们不妨再回头看看当初的忧虑,并结合 SB 开发的现状,来提取一些现阶段被认为比较好的实践。这篇文章缘起为对使用 SB 的方式一文 (及其英文原文) 的回应,我...…
-
所有权宣言 - Swift 官方文章 Ownership Manifesto 译文评注版
Swift 团队最近在邮件列表里向社区发了一封邮件,讲述了关于内存所有权方面的一些未来的改变方向。作为上层 API 的使用者来说,我们可能并不需要了解背后所有的事实,但是 Apple 的这封邮件中对 Swift 的值和对象的内存管理进行了很全面的表述,一步步说明了前因后果。如果你想深入学习和了解 Swift 的话,这篇文章是非常棒的参考资料。我尝试翻译了一下全文,并且加上了一些自己的注解。虽然这篇文章比较长,但是如果你想要进阶 Swift 的话,不妨花时间通读全文 (甚至通读全文若干遍)。...…
-
使用邮件来进行信息管理,顺便介绍最近写的一个小 app - Mail Me
距离上一次自己在 App Store 发布个人 app 已经过去了两年多了。这段时间里把精力主要都放在了公司项目和继续进一步的学习中,倒也在日常工作和出书等方面取得了一些进展。个人 app 这块近两年虽然有写一些便捷的效率类应用,但是几次审核都被 Apple 无情拒掉以后,也就安心弄成自用的小工具了。看着自己逐渐发霉的开发者证书,果然觉得还是找时间倒腾点什么比较好。于是就有了现在想要介绍给大家的这个工具,Mail Me - 一个可以帮助你快速给自己发送邮件的小 app。基于邮件的信息管理方...…
-
Swift 并行编程现状和展望 - async/await 和参与者模式
这篇文章不是针对当前版本 Swift 3 的,而是对预计于 2018 年发布的 Swift 5 的一些特性的猜想。如果两年后我还记得这篇文章,可能会回来更新一波。在此之前,请当作一篇对现代语言并行编程特性的不太严谨科普文来看待。CPU 速度已经很多年没有大的突破了,硬件行业更多地将重点放在多核心技术上,而与之对应,软件中并行编程的概念也越来越重要。如何利用多核心 CPU,以及拥有密集计算单元的 GPU,来进行快速的处理和计算,是很多开发者十分感兴趣的事情。在今年年初 Swift 4 的...…
-
面向协议编程与 Cocoa 的邂逅 (下)
本文是笔者在 MDCC 16 (移动开发者大会) 上 iOS 专场中的主题演讲的文字整理。您可以在这里找到演讲使用的 Keynote,部分示例代码可以在 MDCC 2016 的官方 repo 中找到。在上半部分主要介绍了一些理论方面的内容,包括面向对象编程存在的问题,面向协议的基本概念和决策模型等。本文 (下) 主要展示了一些笔者日常使用面向协议思想和 Cocoa 开发结合的示例代码,并对其进行了一些解说。转・热恋 - 在日常开发中使用协议WWDC 2015 在 POP 方面有一个非常优秀...…