阅读 1799

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

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

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

新闻

Apple 举办编程一小时活动

在 12 月 1 日至 14 日期间,Apple 将在全国的 Apple Store 零售店举办「编程一小时」活动,现在已开放报名。你将有机会从编程基础知识入手,用 Swift 语言写代码,为机器人编程。也许这一小时的课程,将开启你对编程一生的热爱。

App Store Connect Holiday Schedule

因圣诞假期,App Store 将在 12 月 23 日至 27 日停止应用审核。

文章

🐕 Animations are assets: using Core Animation archives on iOS

作者在逆向过程中发现了 Animations 也可以作为资源归档,并且在2016年的时候已经上线了一款使用该技术的 APP。 简单而言,就是将 Core Animation 添加完动画效果的 layer 利用 NSKeyedArchiver/NSKeyedUnarchiver 进行归档,然后在 APP 需要动画的时候进行加载,文中附有 Demo

  • 使用 Kite软件 进行方便动画的制作,并且导出 CAAR 文件(也可以自行代码 archiver 后导出)。
  • 因为导出的文件是一个 CoreAnimation layer tree,你可以实现颜色改变,形变等 CoreAnimation layer 的动画效果。
  • CAAR 文件独立,意味着你可以放在 Asset CatalogBundle,甚至服务器下发。
  • 不需要依赖另外的第三方动画框架。

延展阅读:

🐢 iOS 12 Password Tools: Improving User Security and Experience

在本教程中,您将使用这些 iOS 12 安全工具,使您的用户能够:

  • 在您的网站和您的应用之间共享和同步密码。
  • 保存并更新iOS密码。
  • 自动生成安全密码。
  • 访问通过短信发送的验证安全代码,无需离开应用。

🐕 Extending optionals in Swift

Swift 中的可选值实际是定义了一个 Optional<Wrapped> 枚举,所以我们可以通过扩展枚举,让我们以一种更好的方式处理可选值。

我们可以给枚举添加一个扩展方法,当值为 nil 的时候抛出 error,直接将方法接入到调用末尾,则能轻松将缺失值转换为一个错误。

当然你也可以发挥更多想象力,添加扩展将值的逻辑判断代码、类型匹配代码等等操作封装起来,最终得到一个更好,更容易阅读的调用链。

🐎 When to use UserDefaults, Keychain, or Core Data

本文总结了我们开发过程中常用的几种数据存储方式的使用场景,以及它们的使用方法和注意点。都是比较初级的知识,但作者写得很详细,总结的也很到位。

  • UserDefaults

    用来存储不敏感的少量数据,比如需要持久化的用户设置、游戏分数、播放的歌曲名等。

  • Keychain

    用来存储相对敏感的少量数据,比如用户密码、内购状态、令牌密钥等。

  • Core Data

    用来存储数据量大的列表、关系型数据,以及需要查询和筛选的数据,比如 Todo 列表、文章评论等。

🐢 A Comparison of Swift and Kotlin Languages

尽管 Swift 和 Kotlin 在语法上有太多相似的地方,但也仍然有很多核心特性上的差异。本文重点介绍了 Swift 和 Kotlin 之间的异同。

从代码风格和语法层面详细对比了属性,数据结构,方法,闭包,可选类型,流程控制,类,扩展,协议,功能性语法等重要语言特性的相似点和不同点。同时推荐了许多其他对比 Swift 和 Kotlin 的文章。

🐢 手把手教你给企业微信 Mac 客户端去除水印

目前,许多公司使用了企业微信作为内部聊天工具,既然是企业级的,免不了界面会有水印,这可以使公司的内部信息被员工截图散播出去时候可以有效的溯源等等。

水印有两种情况,一种是在客户端合成的,另一种是 server 下发的图片就带有水印。前者通过反编译客户端进行去除,而后者相对较难,只能通过图像技术去做。企业微信 Mac 的客户端水印就属于前者。

所以,文中笔者就尝试反编译的手段成功去除了水印。不过,本文更适合作为反编译的实战教学文章来观看,一方面是截图公司的信息散布出去本事也并不好,另一方面是不能保证微信企业客户端没有暗水印。

🐕 Evaluating SwiftSyntax for use in SwiftLint

之前 SwiftLint 是基于 SourceKit 封装了一套 API 去处理语法规则的。现在 SwiftSyntax 出来之后,本来打算使用它去简化之前的语法规则,结果发现运行效率竟然变低了。文中笔者给出了具体原因:SwiftSyntax 对于每个文件解析都新开一个 Swift 编译器实例拖慢了整体速度。

🐕 解读 App Store 审核黑箱政策 —— 远没有你想象的那么邪恶

作者在 App Store 上架了 15 款应用,与 App Store 审核的往来超过几百次,在这篇文章里,作者分享了他对 App Store 的理解和看法,具体包括 App Store 采用黑箱审核的原因、为何难以得到清楚的答复、双标情况以及对于 App Store 审核的几点建议。

工具

ReadyForBAT - iOS 面试准备之思维导图

作者在学习完慕课网 iOS 面试实战项目后利用思维导图做了总结。这套导图覆盖面较广,可以给正在跳槽或者准备年后跳槽的各位同行用作参考,好好梳理一遍自己的知识体系。

Komondor - Git Hooks for Swift projects

Komondor 是一款帮助简化 Git Hook 设置的工具,它依赖于 Swift Package Manager 的运行,只要在 Package.swift 里加上依赖,然后像这样去指定 hook 就可以完成设置:

import PackageConfig

let config = PackageConfig([
    "komondor": [
        "pre-push": "swift test",
        "pre-commit": [
            "swift test",
            "swift run swiftFormat .",
            "swift run swiftlint autocorrect --path Sources/",
            "git add .",
        ],
    ],
])
复制代码

代码

appstoreconnect-swift-sdk

上个月苹果终于将 WWDC 2018 里提到的 App Store Connect API 开放给广大开发者。这是一个基于 Swift 编写的 SDK,可以让开发者方便地使用苹果开放的这些接口。

音视频

ggtalk | 聊聊 Swift 这四年(上)

Swift 自第一次推出到现在,已经有了四年的时间。这四年语言本身经过了很多发展,很多改变,而国内的 iOS 开发行业,Swift 开发者的生活和工作,也发生了很多变化。从 14,15年的黄金时代到16年的 ‘iOS 没人要了’,再到18年的 ‘iOS 又有人要了’,今年,Swift 5.0 终于提出要把 ABI 稳定放在首位,这应该算一个 Swift 重要的一个里程碑。在这样一个时间点,ggtalk 请了几个使用 Swift 的程序员,一起聊了聊 Swift 的这四年(ggtalk 是国内 Swift 社区 SwiftGG 推出的程序员闲聊节目)。有空的时候可以听听,相信同样写 Swift 的你,会有共鸣。

内推

关注我们

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

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

本期编辑

@四娘@享耳先森@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal@aaaron7@方秋枋@kyo@tom510230@anotheren@水水@looping@老老老老老老老驴@小非86@邦ben@红纸@含笑饮砒霜@JimQ

说明

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

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