iOS摸鱼周报 第十二期

本文介绍了iOS开发中的一些实用技巧和常见问题解决方案,包括Xcode的编译耗时统计方法,解决iOS 14.5 UDP广播sendto返回-1的问题,以及编程概念如二进制、大端小端和缓存的解释。此外,还推荐了优质博客和学习资源,如SwiftFormat for Xcode和Notion等工具。
摘要由CSDN通过智能技术生成

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

开发Tips

Xcode统计耗时的几个小技巧

收集几个分析项目耗时的统计小技巧。

统计整体编译耗时

在命令行输入以下命令:

bash $ defaults write com.apple.dt.Xcode ShowBuildOperationDuration -bool YES

此步骤之后需要重启 Xcode 才能生效,之后我们可以在 Xcode 状态栏看到整个编译阶段的耗时。

关键阶段耗时统计

上面的耗时可能不够详细,Xcode 还提供了一个专门用于分析各阶段耗时的功能。

菜单栏:Product > Perform Action > Build with Timing Summary

此步骤会自动触发编译,耗时统计在编译日志导航的最底部。

其还对应一个 xcodebuild 参数-showBuildTimingSummary,使用该参数,编译日志里也会带上个阶段耗时的统计分析。

Swift 耗时阈值设置

Swift 编译器提供了以下两个参数:

  • -Xfrontend -warn-long-function-bodies=<millisecond>
  • -Xfrontend -warn-long-expression-type-checking=<millisecond>

配置位置如下:

分别对应了长函数体编译耗时警告和长类型检查耗时警告。

一般这里输入 100 即可,表示对应类型耗时超过 100ms 将会提供警告。

Include of non-modular header inside framework module

在组件 Framework 化的时候,如果在 public 头文件引入了另一个未 Framework 化的组件(.a静态库)时就会触发该问题。报错日志提示 Framework 里包含了非 modular 的头文件,也就是说如果我们要做 Framework 化的话,其依赖的内容也都应该是 Framework 化的,所以这个过程应该是一个从底层库到高层逐步进行的过程。如果底层依赖无法轻易修改,可以使用一些别的手段绕过这个编译错误。

Build Settings 里搜索 non-modular,将以下Allow Non-modular Includes In Framework Modules选项设置为 Yes。

该选项进对 OC 模块代码有作用,对于 Swift 的引用还需要加另外一个编译参数:-Xcc -Wno-error=non-modular-include-in-framework-module。添加位置为:

注意这两处设置均是对项目的设置,而非组件库。另外这些方案均是临时方案,最好还是要将所有依赖库全部 modular 化。

那些Bug

解决 iOS 14.5 UDP 广播 sendto 返回 -1

整理编辑:FBY展菲

1. 问题背景

  1. 手机系统升级到 iOS 14.5 之后,UDP 广播发送失败
  2. 项目中老版本使用到 socket
  3. 项目中新版本使用 CocoaAsyncSocket
  4. 两种 UDP 发包方式都会报错 No route to host

报错具体内容如下:

sendto: -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值