iOS摸鱼周报 第十二期

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

整理编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值