- 本期话题:抖音 iOS 基础技术大揭秘 Vol.02 本周六见;11 月 14 日,参与新一周的 Ask Apple 活动
- 本周学习:iOS NSDateFormatter 设置问题 & iOS 16 部分 pods 库签名问题
- 内容推荐:SPM 工程实践以及性能优化好文推荐
- 摸一下鱼:本期推荐一款跨平台的摸鱼网站、和两款坐姿监控 APP,摸鱼的时候也不要忘记保持正确坐姿;一个根据年历、地图、人物等生成文学图谱的网站;帮助从 intel 平缓过渡到苹果自研 M 系列芯片的软件检测 app。
@zhanferry:抖音 iOS 基础技术在年初的时候办过一次技术分享,分享主题为:
- 大型 App 开发架构演进及挑战
- 抖音 iOS 自动化服务:容器化和规模化探索
- 超级 App 构建效能提升 40%!JOJO,字节自研 iOS 构建系统
- 抖音 iOS 体验优化:流程性优化探索
- 抖音 iOS 稳定性优化与探索
这期内容介绍及回放视频可以在这里获取:超全回顾 | 5位抖音工程师揭秘抖音iOS基础技术(附PPT和回放视频)。
本次分享是第二期,时间是 11 月 12 日下午 2 点,也就是本周六下午两点。分享主题为:
- 抖音 iOS 从静态分析到准入体系:进击的「钟馗」
- 抖音 iOS 视频播放品质优化实践
- 抖音 iOS 首页 Feed 重构探索与实践
- 抖音 iOS 自动化服务:工具链演进与优化实践
- 机器学习技术在抖音 iOS 的探索与实践
@师大小海腾:欢迎继续参与新一周激动人心的 Ask Apple 开发者系列活动,与 Apple 专家直接交流沟通。针对如何将最新技术集成到您的 App 中、设计直观的 UI,以及测试最新软件等主题大胆提问。
活动将于 11 月 14 日至 18 日举行,届时将提供多种语言和多个时区的在线一对一咨询和小组 Q&A。现已面向 Apple Developer Program 和 Apple Developer Enterprise Program 的当前成员开放注册。
Ask Apple 开发者系列活动终场周将在 12 月推出,敬请关注详情。
整理编辑:Hello World
最近在项目里遇到了一些时间格式的问题,场景是用户在关闭了系统时间 24 小时制的时候,以下代码会表现出不一样的执行结果:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyyMMddHH";
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
// 开启 24 : 2022110123
// 关闭 24: 2022110111 PM
即使 Formatter
设置了 HH
格式,仍然按照 12 小时制打印结果。并没有强制 24 时间制输出。
问题原因总结为:用户的时间设置对 Formatter
格式产生了影响。
通过查阅资料 NSDateFormatter-Apple Developer 有这样一段描述:
When working with fixed format dates, such as RFC 3339, you set the
dateFormat
property to specify a format string. For most fixed formats, you should also set thelocale
property to a POSIX locale ("en_US_POSIX"
), and set thetimeZone
property to UTC.
当需要设置自定义格式时,除了需要设置 dateFormat
属性,还需要设置时区 timeZone
和环境 locale
属性。locale
属性可以强制指定环境变量,避免用户自定义的系统设置对时间格式造成影响。
另外 qa1480-apple 中也明确说明了,自定义格式会被用户设置影响,诸如日历、小时制等本地环境。
该 QA 中还明确指导了NSDateFormatter
的使用场景:
- 用于用户可见的时间显示
- 用于配置和解析固定格式的时间数据
对于前者,苹果不建议自定义 dateFormat
,因为不同的地区用户,时间格式习惯是不同的,建议使用系统的预留格式,例如setDateStyle
和 setTimeStyle
等。
如果是后者,则建议明确指定 locale
属性,并且还就 en_US
和 en_US_POSIX
两个 LocaleIdentifier 的区别做了解释。
最终解决方案也就确定了,指定 locale
属性即可。
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
总结:该类问题都是对 API 使用不规范导致的,类似前几年的yyyy
和 YYYY
的问题。大部分场景结果是一致的,特定 case 才会触发不一样的结论,导致日常很难发现这类问题。
在最近通过 cocoapods
导入部分库的时候,会提示签名的 error,以我业务中使用的 Google SDK 为例:
xxx/Pods/Pods.xcodeproj: error: Signing for "GoogleSignIn-GoogleSignIn" requires a development team. Select a development team in the Signing & Capabilities editor. (in target 'GoogleSignIn-GoogleSignIn' from project 'Pods')
解决方案也很简单,可以手动选择一下签名证书,这种需要每次 install 后手动更改,比较繁琐,另外一种方式是通过 pod hook
关闭该签名配置项:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CODE_SIGNING_ALLOWED'] = "NO"
end
end
end
目前该问题只出现在Xcode 14及以上的版本中,最新的 Xcode 14.1 release 仍未解决该问题。
整理编辑:Mimosa
1、SwifterSwift -- github
@夏天: SwifterSwift 是 500 多个原生 Swift 扩展的集合,为 iOS、macOS、tvOS、watchOS 和 Linux 提供了(超过 500 个)适用于各种原生数据类型、UIKit 和 Cocoa 类的便捷方法、语法糖和性能改进。
2、货拉拉用户 iOS 端卡顿优化实践 -- 货拉拉技术
@Mimosa:卡顿优化一直是客户端性能治理的重要方向之一,优化卡顿,将 APP 的用户体验做到极致,在一定程度上能够提升用户的忠诚度和 APP 的市场占有率。本文是货拉拉技术通过检测卡顿以及对卡顿的治理实践的记录,同时也总结了一些在编码阶段就规避卡顿的方法。
3、云音乐 iOS 端代码静态检测实践 -- 网易云音乐技术团队
@Mimosa:本文是网易云音乐技术团队保障代码质量、防止代码劣化的一套静态代码检测实践,文中代码详尽,步骤也很清晰地记录了通过定制 OCLint 并自定义规则、优化静态检测耗时的过程。
4、Swift Package Manager 工程实践 -- 狐友技术团队
@Mimosa:本文将详细介绍狐友团队在引入 Swift Package Manager 进行工程实践中,探索和累积的相关知识和实践经验,我们将从结构设计、资源处理、链接方式的选择、编译与链接参数设置、异常处理,这五个方面展开详细介绍,每个小部分结尾都提供了最佳实践的总结。
5、5-Second Test -- Nick Babich
@Mimosa:5 秒测试是一个简单的练习,可以帮助衡量用户对您的设计的第一印象。本文是有关如何使用此类测试的快速指南,对于 app 开发来说,对我们的产品设计有点作用。
6、百度APP iOS端内存优化实践-内存管控方案 -- 百度App技术
@Hello World:内存问题是业务开发中经常被忽视的问题,恰恰它又是很多 Crash 的罪魁祸首。例如 OOM,如何治理内存成了开发中的重要一环。本文从基础原理出发讲述了如何监控内存。并从源码角度分析了应该如何选取内存指标作为衡量的阈值。
整理编辑:夏天
- 知识图谱:一个根据年历、地图、人物等生成文学图谱。关于本月的相关文献,关于本地的相关诗词,关于某地的相关文档。
没事的时候准备准备,有可能用的上。
- Thief: 作者说这是一款真正的创新摸鱼神器。一款创新跨平台摸鱼神器,支持小说、股票、网页、视频、直播、PDF、游戏等摸鱼模式,为上班族打造的上班必备神器,使用此软件可以让上班倍感轻松,远离 ICU。
- iMobie M1 App Checker: 这款应用由专注于 Apple 领域 10 年的 iMobie 团队打造,旨在为所有需要平稳过渡到苹果自研 Mx 芯片的用户提供帮助,可以实现对所有已安装 App 的 CPU 类型检测,同时提供检查 iOS 应用是否可以安装到 Mac 端。
- pose-monitor: 国内开发者在 GitHub 开源的一款 Android 应用:「PoseMon 让爷康康」,可借助 AI 技术,实时监测不良坐姿,并及时给出语音提示。应用不需要联网使用,所有 AI 特性均在手机本地运行,不需要将视频画面传输至外部服务器,仅需要摄像头权限用于获取姿态画面。
- 顶瓜瓜:顶瓜瓜是一款检测头部位置、帮助保持坐姿的 App。将设备放在桌上,打开摄像头,即可开始坐姿守护。你会化身为一只头顶西瓜的动物,当你低头、歪头时,西瓜会掉下来。功能通过设备的原深感相机(True Depth Camera)实现,无需购买其他智能硬件,无需穿戴、无接触。无需联网,全部本地计算,保护您的隐私!
iOS 摸鱼周报,主要分享开发过程中遇到的经验教训、优质的博客、高质量的学习资料、实用的开发工具等。周报仓库在这里:https://github.com/zhangferry/iOSWeeklyLearning ,如果你有好的的内容推荐可以通过 issue 的方式进行提交。另外也可以申请成为我们的常驻编辑,一起维护这份周报。另可关注公众号:iOS成长之路,后台点击进群交流,联系我们,获取更多内容。
iOS 摸鱼周报 #73 | macOS Ventura 初体验
iOS 摸鱼周报 #71 | iOS / One More Thing?
iOS 摸鱼周报 #70 | iOS / iPadOS 16.1 公测版 Beta 3 发布,支持老款 iPad 台前调度