kemchenj

Hackable life?

视频: WWDC 2017 - Session 242 - The Keys to a Better Text Input Experience
原文: 优化输入体验的关键:keyboard 技巧全介绍
作者: kemchenj

这一节主要会讲如何构建更好的输入体验:

  • 将键盘融入你的布局
  • 使用 Input Accessory View
  • 让你的 App 更好地应对多种语言输入
  • 使用 traits 让文字补齐更加智能
  • 支持实体键盘
  • 创建自定义的输入控件
  • Keyboard Extension 的一些建议和实践经验
阅读全文 »

视频: WWDC 2017 - Session 206 - Introducing Password AutoFill for Apps
原文: iOS 11 里 App 终于可以密码自动填充了
作者: kemchenj

密码自动填充

iOS 11 新增了密码自动填充的 API,可以让用户在 App 里使用保存在 Safari 以及 keychain 里的密码。

iOS 以及 macOS 上的 Safari 都内建了密码管理器,每次我们在网页里登录时,Safari 都会询问我们是否要保存密码,然后当我们下一次登录同一个网站的时候,Safari 就会为我们自动填充之前保存的密码。并且这些密码会通过 iCloud keychain 同步到用户所有设备上。

iOS 11 更进了一步,让这些已经保存在 keychain 的密码显示在 App 的虚拟键盘上,接下来让我们来看个 demo:

Screen Shot 2017-07-07 at 5.42.08 P

这里展示的是一个很常见的登录页面,当我们点击输入框的时候,键盘上的 QuickType bar 就会显示出我们之前保存过密码。

Screen Shot 2017-07-07 at 5.42.14 P

点击一下之后,就会把账户和密码自动填充上去。

阅读全文 »

这两天 Uber 的开发团队在一个大会上分享了用 Swift 3 重写客户端的过程, 视频里介绍了一个很黑科技的技巧, 可以极大地加快编译速度, 我自己试了一下之后发现确实有效, 但也有小坑, 在这里跟大家分享一下.

Uber 的开发团队偶然发现如果把所有 Model 文件全部合并到一个文件去编译, 那编译时间会从 1min 35s 减少到 17s, 那么我们如果把所有代码文件都合并到一起, 那就可以极大地优化编译速度了.

阅读全文 »

Screen Shot 2017-03-16 at 11.52.08 P

在上线之后发生了几次崩溃闪退, 需要紧急修复的情况之后, 我决定我要动手了…

分析了这几次情况之后, 发现其实大的逻辑都没有错, 但是一些小的东西特别容易出篓子, 例如说布尔条件写反了, 某个 @IBOutlet 的控件改名了, 删掉了, 忘了去 storyboard 里处理掉它, 就会发生 setValue: forUndefinedKey: 的错误, 本来我是想直接 swizzle 掉这个方法, 不让它抛出错误, 但是想想又觉得不值得. 难道终于要开始学一下怎么写测试了吗?

然后突然想起了之前好像看到过一个 UI 测试的框架, 可以自动帮忙测试 UI, 找到之后就开始用, 然后一发不可收拾.

仓库的位置在这里 GitHub - zalando/SwiftMonkey: A framework for doing randomised UI testing of iOS apps

阅读全文 »

大家有没有遇到过这种情况, 接手了一份代码, 然后发现里面闭包循环引用的问题很严重, 而所有代码都长成这个样子:

request(url).responseModel { response in
guard let model = response.result.value else {
return
}

self.int = model.int
self.label.text = self.string + model.string
...
...
}
阅读全文 »

原文: Method Dispatch in Swift
作者: Brain King
译者: kemchenj

注:之前看了很多关于 Swift 派发机制的内容, 但感觉没有一篇能够彻底讲清楚这件事情, 看完了这篇文章之后我对 Swift 的派发机制才建立起了初步的认知.

一张表总结引用类型, 修饰符和它们对于 Swift 函数派发方式的影响.

阅读全文 »

原文: Emptiness
作者: Soroush Khanlou
译者: kemchenj

如果 Swift 里的 array 数组不能为空?

仔细想想: 如果 Swift 已经设计了非空的数组了. 但这会让人很烦对吧? 什么语言有非空的数组?

然而, Swift 比起 C 语言已经修改了很多规则了. 例如, switch 里不需要 break 了, 甚至可以使用 fallthrough 来把几个 case 连接起来. 没有了 ++ 操作符, 它是那么的让人迷惑, 多余, 并且没了它语言会变得更好.

还有一点 Swift 跟 C 不一样, Swift 需要显式地声明可空性. Swift 让你使用 Optional 类型, 向类型系统指定某个值是否可能有空. 你可以说你有一个 controller, 或者可能有一个 controller 也可能没有. 类型系统可以在所有地方都检查一遍, 保证这个值在被需要使用时不会为空.

阅读全文 »

原文: Alamofire 4.0 Migration Guide
作者: cnoon
译者: kemchenj

注: 最近打算把公司项目迁移到 Swift 3.0, 顺手把 Alamofire 4.0 的迁移指南翻译了, 之前虽然读过一部分源码, 但还是看到了很多新东西, 新的 Adapter 和 Retrier 我都打算用到项目里, 希望大家看完也能够有收获.

Alamofire 4.0 是 Alamofire 最新的一个大版本更新, 一个基于 Swift 的 iOS, tvOS, macOS, watchOS 的 HTTP 网络库. 作为一个大版本更新, 就像语义上那样, 4.0 的 API 引入了一些破坏性修改.

这篇导引旨在帮助大家从 Alamofire 3.x 平滑过渡到最新版本, 同时也解释一下新的设计和结构, 以及功能上的更新.

阅读全文 »