iOS 摸鱼周报 #58 | 极客风听歌网站,纯文字音乐播放器

iOS成长之路

共 5866字,需浏览 12分钟

 · 2022-07-06


本期概要

  • 本期话题:在您的 App 中提供帐户删除选项
  • 本周学习:如何配置合适的 ATS
  • 内容推荐:WWDC22 推出的新技术和新内容(二番)
  • 摸一下鱼:开启真·摸鱼模式,在线养金鱼;极客风的听歌网站,纯文字的音乐播放器。

本期话题

在您的 App 中提供帐户删除选项[1]

@远恒之义:苹果要求,自 2022 年 6 月 30 日起,如果您的 App 支持帐户创建,提交到 App Store 审核,必须支持用户在 App 中发起帐户删除,以避免审核延迟。

⚠️ 注意事项:

  • 支持“通过 Apple 登录”的 App 应使用 Sign in with Apple REST API 来撤销用户令牌[2]
  • 如果 App 帐户删除流程是手动的(如在应用内申请删除账号,需要管理员后台审核),请告知用户删除帐户需要多长时间,并在删除完成时提供一条确认信息。
  • 如何避免拥有自动续期订阅的用户在删除帐户后意外被 Apple 继续扣款?可提供链接[3]来让用户管理取消自己的订阅。

本周学习

整理编辑:夏天

如何配置合适的 ATS(App Transport Security)配置

为了增强应用与网络交互的安全,从 iOS 9 开始,苹果开启了称为应用传输安全 (ATS) 的网络功能用于提高所有应用和应用扩展的隐私和数据完整性。

ATS 会阻止不符合最低安全规范的连接

Apps-Transport-Security~dark@2x
图片来源于开发者官网

为什么需要进行 ATS 配置

ATS 为我们的应用安全增加了保护,但是由于某些原因,我们不得不需要某些手段来规避 ATS 规则

info.plist 中提供了 ATS 配置信息允许用户自定义规则

最新完整的 ATS 配置键值如下:

NSAppTransportSecurity : Dictionary {
NSAllowsArbitraryLoads : Boolean
NSAllowsArbitraryLoadsForMedia : Boolean
NSAllowsArbitraryLoadsInWebContent : Boolean
NSAllowsLocalNetworking : Boolean
NSExceptionDomains : Dictionary {
<domain-name-string> : Dictionary {
NSIncludesSubdomains : Boolean
NSExceptionAllowsInsecureHTTPLoads : Boolean
NSExceptionMinimumTLSVersion : String
NSExceptionRequiresForwardSecrecy : Boolean
}
}
}

如果你现有的ATS 配置存在冗余的键值,证明其已被摒弃。你可以查看Document Revision History[4] 明确相关键值的信息

如何挑选合适的 ATS 配置

但是由于各种键值的组合分类繁杂,为了确保连通性,我们需要一个简单的方法,来寻找到我们最适合的 ATS 配置

nscurl --ats-diagnostics --verbose https://developer.apple.com

上述命令会模拟我们 ATS 中配置规则对项目中使用URLSession:task:didCompleteWithError:是否能够请求成功,也就是我们发起网络请求的结果。

受限于篇幅,我们就不展示命令运行的结果

从 ATS 默认的空字典开始,共计 16 种组合

  • Result : PASS 说明该配置可以连接到域名服务器成功

  • Result : FAIL 说明请求域名服务器失败,当前配置无法组合成功

注:虽然其列举的结果不包括    NSAllowsArbitraryLoadsForMedia ,NSAllowsArbitraryLoadsInWebContent , NSAllowsLocalNetworking ,但是这三个是针对特定的文件的,所以不会影响配置

基于最小最适用原则选择对应的 ATS 配置。

参考资料

NSAppTransportSecurity[5]

NSExceptionDomains[6]

Preventing Insecure Network Connections[7]

内容推荐

每年一度的苹果开发者盛会在不久前落幕了。今年的 WWDC 一如既往地精彩。我们将分几期将一些有关 WWDC 2022 上推出的新内容、新技术介绍给大家。

整理编辑:远恒之义,Mimosa

1、WWDC22: Wrap up and recommended talks[8] -- 来自:hackingwithswift

@远恒之义:WWDC22 精彩纷呈,本文作者回顾了他参与本次活动的过程,一些现场有趣的故事,10 个最喜欢的演讲主题,6 个推荐视频来了解刚推出的新内容,还有几个丰富的 WWDC22 周边社区活动。

2、在 SwiftUI 利用 Live Text API 從圖片中擷取文本[9] -- 来自:appcoda

@远恒之义:在新的 iOS 16,Apple 发布了 Live Text API,可以将图像转换为机器可读的文本格式。我们只需使用 VisionKit 中的一个新类别 DataScannerViewController,来启用有 Live Text 功能的相机,就能提取出图像中的文本。本文同时为你提供了一个 demo 来快速上手体验。

3、iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用[10] -- 来自:师大小海腾

@远恒之义:时隔 2 年,CarPlay 迎来了大更新。在 iOS16 中新增的两种支持 CarPlay 的 App 类型:Fueling App 和 Driving Task App。感兴趣的话,和作者一起来探索 Navigation App 如何在受支持车辆中的数字仪表盘上实时绘制地图。

此外,Apple 今年给我们带来了 CarPlay Simulator,它是一个 Mac App,可以帮助你在不离开办公桌的情况下连接 iPhone Device 来开发和测试 CarPlay App,模拟真实环境,而无需经常来回跑到你的车上或购买售后市场主机进行测试。这大幅度提升了开发者的开发测试体验。

4、用 Table 在 SwiftUI 下创建表格[11] -- 来自:东坡肘子

@远恒之义:Table 是 SwiftUI 3.0 中为 macOS 平台提供的表格控件,开发者通过它可以快捷地创建可交互的多列表格。在 WWDC 2022 中,Table 被拓展到 iPadOS 平台,让其拥有了更大的施展空间。本文将介绍 Table 的用法、分析 Table 的特点以及如何在其他的平台上实现类似的功能。

5、What’s the difference between any and some in Swift 5.7?[12] -- 来自:Donny Wals

@Mimosa:作者通过举例来说明了在 Swift 5.7 中你该如何选择 some 还是 any 关键词,阐述了他们之间的不同,同时谈了一下该如何正确的使用它们,以及未来可能在 Swift 6 中的表现。在作者的另一篇文章 What are primary associated types in Swift 5.7? 中它也谈到了,在实际使用场景,例如关联类型的使用中,some 和 any 关键词对程序的影响。

6、深入理解 Git 底层实现原理[13] -- 来自:楚权

@Mimosa:大家平时都在使用 Git,但是其中的底层实现原理大家了解么?该文章作者从 Git 整体的架构出发,分层讲解了各层作用,主要谈了对象数据库的设计等。同时也给出了基于其原理的一个设计案例 —— CocoaPods Source 管理机制。文章整体写的通俗易懂,配图也简洁大方。

摸一下鱼

整理编辑:东坡肘子、师大小海腾

1、Goldfishies[14]:开启真·摸鱼模式,在线养金鱼,有 5 种皮肤的鱼可选。对程序员来说刚刚好,不幼稚。

2、MusicForProgramming[15]:极客风的听歌网站,纯文字的音乐播放器,作者说里面都是适合编程的音乐。

3、网页设计博物馆[16]:该网站收录了从 1996 开始至今的一些主流网站的页面样式,从这里能清晰的感受网站设计这几十年的变化趋势。看一下 Apple 在 1999 年发布 Power Mac G4 的页面,突出重点,结构清晰。再说 Power Mac G4,用现在的眼光来看,它依然像是一款未来项的产品,Apple 的设计真的很超强。

4、Stackoverflow 的年度调查[17]:调查结果来源于 70000 多个开发者的问卷分析,看两个比较有意思的结果吧。

参与调查的开发者的身份,全栈和后端所占比例非常高,移动开发相比就少很多了。

薪水和使用开发语言、工作年限之间的关系,这一批调查者占总人数的一半以上,工作年限从 9 年到 22 年,所以至少在国外大龄程序员是一个很常见的现象。

关于我们

iOS 摸鱼周报,主要分享开发过程中遇到的经验教训、优质的博客、高质量的学习资料、实用的开发工具等。周报仓库在这里:https://github.com/zhangferry/iOSWeeklyLearning ,如果你有好的的内容推荐可以通过 issue 的方式进行提交。另外也可以申请成为我们的常驻编辑,一起维护这份周报。另可关注公众号:iOS成长之路,后台点击进群交流,联系我们,获取更多内容。

往期推荐

iOS 摸鱼周报 #57 | 周报改版,WWDC22 讲座集锦

iOS 摸鱼周报 #56 | WWDC 进行时

iOS 摸鱼周报 #55 | WWDC 码上就位

iOS 摸鱼周报 #54 | Apple 辅助功能持续创新

引用资料

[1]

在您的 App 中提供帐户删除选项: https://developer.apple.com/cn/support/offering-account-deletion-in-your-app

[2]

撤销用户令牌: https://www.yuque.com/eternaljust/rpmt31/bxmc3d#khpAl

[3]

打开用户管理订阅链接: https://apps.apple.com/account/subscriptions

[4]

Document Revision History: https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/RevisionHistory.html#//apple_ref/doc/uid/TP40016535-SW1

[5]

NSAppTransportSecurity: https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity?language=objc

[6]

NSExceptionDomains: https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity/nsexceptiondomains?language=objc

[7]

Preventing Insecure Network Connections: https://developer.apple.com/documentation/security/preventing_insecure_network_connections?language=objc

[8]

WWDC22: Wrap up and recommended talks: https://www.hackingwithswift.com/articles/254/wwdc22-wrap-up-and-recommended-talks

[9]

在 SwiftUI 利用 Live Text API 從圖片中擷取文本: https://www.appcoda.com.tw/live-text-api/

[10]

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用: https://juejin.cn/post/7114239495360233479

[11]

用 Table 在 SwiftUI 下创建表格: https://www.fatbobman.com/posts/table_in_SwiftUI/

[12]

What’s the difference between any and some in Swift 5.7?: https://www.donnywals.com/whats-the-difference-between-any-and-some-in-swift-5-7/

[13]

深入理解 Git 底层实现原理: http://chuquan.me/2022/05/21/understand-principle-of-git/

[14]

Goldfishies: https://goldfishies.com

[15]

MusicForProgramming: https://musicforprogramming.net/fortyone

[16]

网页设计博物管: https://www.webdesignmuseum.org/

[17]

Stackoverflow 的年度调查: https://survey.stackoverflow.co/2022/


浏览 58
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报