SimulatorStatusMagic 2.7

SimulatorStatusMagic 2.7

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2022年8月

Dave VerwerChris VasselliNick Brook 维护。



  • Dave Verwer 和 Greg Spiers

Simulator Status Magic

修改 iOS 模拟器,使其拥有完美的状态栏,然后运行您的应用程序并每次都拍摄完美截图。所做的修改旨在与苹果网站上显示的图像相匹配,具体如下

  • 时间显示为 9:41 AM。
  • 电量满,显示 100%。
  • 显示 5 条蜂窝信号和满格的 WiFi。
  • 显示日期为 Tue Jan 9(仅限 iPad)

我只是使用 xcrun simctl status_bar 不可以吗?🚀

从 Xcode 11 开始,simctl 命令行工具包括了一个 status_bar 选项,它允许你覆盖模拟器中状态栏的显示外观。希望这最终会取代 SimulatorStatusMagic 的需要,但到目前为止,它仍然有漏洞使得这个项目仍然相关。特别是,simctl status_bar 目前无法在状态栏中添加本地化的日期和时间字符串。

如何使用它?

  • 克隆此仓库。
  • 使用 Xcode 6(或更高版本)打开 SimulatorStatusMagic.xcodeproj。
  • 在任何您想要修改的模拟器类型上运行应用程序目标 SimulatorStatusMagic(不是 SimulatorStatusMagiciOS)。
  • 启动应用后,请按屏幕上的唯一按钮 :)
  • 完成了!现在只需运行您的应用并截图。

如何移除自定义设置?

再次运行应用并点击“恢复默认状态栏”。使用正常菜单选项重置iOS模拟器也有效。

我有一个截图脚本,可以自动化这个过程吗?

当然!SimulatorStatusMagic可以通过CocoaPodsCarthage、Swift Package Manager以及单独的源发布获得。安装说明可用。

Cocoapods/Carthage建议仅将SDStatusBarManager包含在您的调试配置中,以确保代码永远不会包含在发布构建中。当您想应用完美的状态栏时,调用[[SDStatusBarManager sharedInstance] enableOverrides]。要恢复标准状态栏,调用[[SDStatusBarManager sharedInstance] disableOverrides]

Swift Package Manager SPM尚不支持根据构建配置条件链接包。使用SPM时的建议方法是仅将UI测试目标链接到您,并从该目标启用覆盖。

关于示例应用的自动化?

如果您希望自动启用或禁用覆盖,可以使用环境变量这样做。

运行

SIMULATOR_STATUS_MAGIC_OVERRIDES = enable

SIMULATOR_STATUS_MAGIC_OVERRIDES = disable

覆盖将在启动时自动启用或禁用。

这个功能在设备上也有效吗?

不。设备上阻止了状态栏服务器。然而,macOS包括使用QuickTime记录设备屏幕时包含完美状态栏的功能(了解更多)。

这是如何工作的?

最好的办法是查看源代码,这样你就可以了解它是如何工作的了 :)

更新以支持 iOS 的新版本

更新这个项目以支持 iOS 的新版本的通用模式,尽管如果苹果在未来做出改变,这可能需要变化。

准备新文件。

  1. 复制上一次发行的 SDStatusBarOverriderPostXX_Y.{h,m} 文件,并将它们更新到新版本。
  2. 更新 SDStatusBarManager.m,以便检测到新的操作系统版本时引用新的覆盖者。

在运行时头文件中查找更新的结构。

  1. 下载最新的 dsdump 工具版本。
  2. 运行 dsdump 对 UIKitCore 框架二进制文件进行操作,以生成私有的运行时代码头文件。
./dsdump --objc -a x86_64 --verbose=5 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore --defined > ~/Desktop/UIKitCore.txt
  1. 在输出中查找 UIStatusBarServerListener

更新新覆盖者中的结构。

有两个需要更新的结构,StatusBarRawData 和 StatusBarOverrideData,每个都对应于 UIStatusBarServerListener 运时代码头文件输出中的一行。如果你研究一下,应该不难找出映射。

  1. 将 StatusBarRawData 和 StatusBarOverrideData 更新为与运行时代码头中的结构更改相匹配。

检查是否正常工作

应该就是这样了!

  1. 运行示例应用程序,并验证状态栏是否更新正确。
  2. 如果状态栏中添加了任何需要调整的新内容,请对您的新的SDStatusBarOverrider进行进一步修改。

贡献

我们欢迎贡献!发现了错误?如果与拉取请求一起报告问题,那么您将获得一枚金牌 :)

然而,这个项目的范围是有意限制的。我们并没有计划添加选项来允许最终自定义状态栏。它的目的是做到擅长一件事情——将状态栏调整到与苹果的营销资料匹配。