dynamic模拟iOSdynamictypes系统文本大小(UIContentSizeCategory)

我想用系统文本大小的不同select轻松地testing我的应用程序,包括可访问性大小。 这些可以在设置应用程序(显示和亮度=>文本大小或一般=>辅助function=>较大文本)中设置。

目前我能find的唯一方法是进入设置并使用UI更改值(编辑: 部分解决scheme如下所述)。 这是缓慢和繁琐的。 我怀疑有一种方法来dynamic改变它使用私人的API,但我不知道如何。 由于我的目标是只用于debugging,私人API的使用和调整是好的(这个代码将不会进入生产的方式)。

为了试图find一个私人的API来做到这一点,我看了一些逆向工程资源。 我是新的反汇编,符号表,类转储,并find我可以使用的私有API,但这是我迄今为止尝试过的:

  • 我成功地调整了-[UIApplication preferredContentSizeCategory] (其他post说这工作在过去),但是这并不影响从+[UIFont preferredFontForTextStyle:]返回的结果。

  • 使用反汇编程序IDA,我发现+[UIFont preferredFontForTextStyle:]是在私有框架UIFoundation.framework 。 ( -[UIApplication preferredContentSizeCategory]UIKit.framework但反汇编看起来没有用处)。

  • 正如我开始写这个问题(总是这样),我发现了一个部分的解决scheme 。 可以在scheme中设置启动参数来设置启动时的值。 这是有用的,但不是我所追求的。

  • 通过上面的答案,我发现用户偏好的值明显存储在“模拟器的data/Library/Preferences目录下的com.apple.UIKit.plist文件”中。 我们之后的值可以从命令行实用程序plutil 。 这也是一个改进! 但是我想在运行时dynamic修改它。

来自IDA的更多结果:

我真的不知道如何阅读反汇编,但+[UIFont preferredFontForTextStyle:]似乎指向一个名为___UIFontForTextStyle的符号,这似乎指向一些有趣的冠冕堂皇的符号,称为_getUIContentSizeCategoryUnspecified_getUIContentSizeCategoryPreferenceClass

反编译___ UIFontForTextStyle </ code>

我还使用UIFoundation.framework上的命令行工具nmfind了这些符号。 它们被标记为小写字母“s”,显然, “符号位于未初始化的小数据对象的数据部分”。 。 我不知道这意味着什么(我所收集的是他们不是一个class级或方法)。

在networking上search_getUIContentSizeCategory...符号不会产生任何结果,但附近有另一个符号_getUIApplicationClass 。 我search了那个,因为它听起来更普遍一些,并且在一些WebKit源代码中发现了类似的东西。 可能是没有,但也许这是一个内部的苹果公约。 无论如何,这个例子并不能真正帮助我解决问题。

无论如何感谢阅读至今。 如果你还在这里,我的问题是:

我希望能够dynamic模拟dynamictypes大小首选项的值。 这些反汇编符号可能有帮助,但也许我在错误的轨道上。 感觉就像解决scheme很接近,但我不能把所有的东西放在一起。

将此值设置为启动参数很好,但并不能完全解决我的问题。 同样,在plist修改模拟器的值也是很好的自动化,但不能解决我的问题。

有没有办法在运行时dynamic地改变这个值?

多么尴尬! 我正在查看一些过时的iOS 9.x文档,并错过了var preferredContentSizeCategory: UIContentSizeCategory在iOS 10中获得了init(preferredContentSizeCategory: UIContentSizeCategory)var preferredContentSizeCategory: UIContentSizeCategory , Brandon Williams对我有帮助。 这完美地满足了我的需求。