10

iOS 摸鱼周报 #74 | 抖音 iOS 基础技术大揭秘 Vol.02 周六见

 1 year ago
source link: https://zhangferry.com/2022/11/10/iOSWeeklyLearning_74/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
moyu_weekly_cover.jpeg
  • 本期话题:抖音 iOS 基础技术大揭秘 Vol.02 本周六见;11 月 14 日,参与新一周的 Ask Apple 活动
  • 本周学习:iOS NSDateFormatter 设置问题 & iOS 16 部分 pods 库签名问题
  • 内容推荐:SPM 工程实践以及性能优化好文推荐
  • 摸一下鱼:本期推荐一款跨平台的摸鱼网站、和两款坐姿监控 APP,摸鱼的时候也不要忘记保持正确坐姿;一个根据年历、地图、人物等生成文学图谱的网站;帮助从 intel 平缓过渡到苹果自研 M 系列芯片的软件检测 app。

抖音 iOS 基础技术大揭秘 Vol.02

@zhanferry:抖音 iOS 基础技术在年初的时候办过一次技术分享,分享主题为:

  • 大型 App 开发架构演进及挑战
  • 抖音 iOS 自动化服务:容器化和规模化探索
  • 超级 App 构建效能提升 40%!JOJO,字节自研 iOS 构建系统
  • 抖音 iOS 体验优化:流程性优化探索
  • 抖音 iOS 稳定性优化与探索

这期内容介绍及回放视频可以在这里获取:超全回顾 | 5位抖音工程师揭秘抖音iOS基础技术(附PPT和回放视频)

本次分享是第二期,时间是 11 月 12 日下午 2 点,也就是本周六下午两点。分享主题为:

  • 抖音 iOS 从静态分析到准入体系:进击的「钟馗」
  • 抖音 iOS 视频播放品质优化实践
  • 抖音 iOS 首页 Feed 重构探索与实践
  • 抖音 iOS 自动化服务:工具链演进与优化实践
  • 机器学习技术在抖音 iOS 的探索与实践
20221110232112.png

11 月 14 日,参与新一周的 Ask Apple 活动

weekly74_topic.jpeg

@师大小海腾:欢迎继续参与新一周激动人心的 Ask Apple 开发者系列活动,与 Apple 专家直接交流沟通。针对如何将最新技术集成到您的 App 中、设计直观的 UI,以及测试最新软件等主题大胆提问。

活动将于 11 月 14 日至 18 日举行,届时将提供多种语言和多个时区的在线一对一咨询和小组 Q&A。现已面向 Apple Developer Program 和 Apple Developer Enterprise Program 的当前成员开放注册。

Ask Apple 开发者系列活动终场周将在 12 月推出,敬请关注详情。

整理编辑:Hello World

iOS NSDateFormatter 设置问题

最近在项目里遇到了一些时间格式的问题,场景是用户在关闭了系统时间 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 the locale property to a POSIX locale ("en_US_POSIX"), and set the timeZone property to UTC.

当需要设置自定义格式时,除了需要设置 dateFormat属性,还需要设置时区 timeZone和环境 locale属性。locale属性可以强制指定环境变量,避免用户自定义的系统设置对时间格式造成影响。

另外 qa1480-apple 中也明确说明了,自定义格式会被用户设置影响,诸如日历、小时制等本地环境。

该 QA 中还明确指导了NSDateFormatter的使用场景:

  • 用于用户可见的时间显示
  • 用于配置和解析固定格式的时间数据

对于前者,苹果不建议自定义 dateFormat,因为不同的地区用户,时间格式习惯是不同的,建议使用系统的预留格式,例如setDateStylesetTimeStyle等。

如果是后者,则建议明确指定 locale属性,并且还就 en_USen_US_POSIX两个 LocaleIdentifier 的区别做了解释。

最终解决方案也就确定了,指定 locale属性即可。


  dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

总结:该类问题都是对 API 使用不规范导致的,类似前几年的yyyy YYYY的问题。大部分场景结果是一致的,特定 case 才会触发不一样的结论,导致日常很难发现这类问题。

iOS 16 部分 pods 库提示签名问题

在最近通过 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 类的便捷方法、语法糖和性能改进。

SwifterSwift.png

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,如何治理内存成了开发中的重要一环。本文从基础原理出发讲述了如何监控内存。并从源码角度分析了应该如何选取内存指标作为衡量的阈值。

整理编辑:夏天

  1. 知识图谱:一个根据年历、地图、人物等生成文学图谱。关于本月的相关文献,关于本地的相关诗词,关于某地的相关文档。

没事的时候准备准备,有可能用的上。

%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1.png

  1. Thief: 作者说这是一款真正的创新摸鱼神器。一款创新跨平台摸鱼神器,支持小说、股票、网页、视频、直播、PDF、游戏等摸鱼模式,为上班族打造的上班必备神器,使用此软件可以让上班倍感轻松,远离 ICU。
  2. iMobie M1 App Checker: 这款应用由专注于 Apple 领域 10 年的 iMobie 团队打造,旨在为所有需要平稳过渡到苹果自研 Mx 芯片的用户提供帮助,可以实现对所有已安装 App 的 CPU 类型检测,同时提供检查 iOS 应用是否可以安装到 Mac 端。
  3. pose-monitor: 国内开发者在 GitHub 开源的一款 Android 应用:「PoseMon 让爷康康」,可借助 AI 技术,实时监测不良坐姿,并及时给出语音提示。应用不需要联网使用,所有 AI 特性均在手机本地运行,不需要将视频画面传输至外部服务器,仅需要摄像头权限用于获取姿态画面。
  4. 顶瓜瓜:顶瓜瓜是一款检测头部位置、帮助保持坐姿的 App。将设备放在桌上,打开摄像头,即可开始坐姿守护。你会化身为一只头顶西瓜的动物,当你低头、歪头时,西瓜会掉下来。功能通过设备的原深感相机(True Depth Camera)实现,无需购买其他智能硬件,无需穿戴、无接触。无需联网,全部本地计算,保护您的隐私!

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

iOS 摸鱼周报 #73 | macOS Ventura 初体验

iOS 摸鱼周报 #72 | 1024 开始预热

iOS 摸鱼周报 #71 | iOS / One More Thing?

iOS 摸鱼周报 #70 | iOS / iPadOS 16.1 公测版 Beta 3 发布,支持老款 iPad 台前调度

WechatIMG384.jpeg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK