目前我可以找到的唯一方法是进入设置并使用UI更改值(编辑:partial solution描述如下).这很慢又麻烦我怀疑有一种方法可以使用私有的API动态地改变它,但是我无法弄明白如何.由于我的目标是只用于调试,私有API使用和swizzling是好的(这段代码将不会生产).
为了尝试找到一个私有的API来做这个,我看了一些逆向工程资源.我是最新的反汇编器,符号表,类转储和查找可以使用的私有API,但这是我迄今为止所尝试的:
>我成功的swizzled – [UIApplication preferredContentSizeCategory](其他帖子说这个工作过去),但这并不影响从[UIFont preferredFontForTextStyle:]返回的结果.
>使用反汇编IDA我发现[UIFont preferredFontForTextStyle:]在私有框架UIFoundation.framework中. ( – [UIApplication preferredContentSizeCategory]在UIKit.framework中,但是反汇编没有任何用处).
>正如我开始写这个问题(总是这样),我发现了一个partial solution.可以在该方案中设置一个启动参数来设置启动时的值.这是有用的,但不是我以后.
>通过上述答案,我found用户偏好的值显然存储在位于模拟器数据/库/首选项目录中的com.apple.UIKit.plist文件中.我们之后的值可以从命令行实用程序plutil设置.这也是一个改进!但是我想在运行时动态地改变它.
更多关于我IDA的结果:
我真的不知道如何阅读反汇编,但是[UIFont preferredFontForTextStyle:]似乎指向一个名为___UIFontForTextStyle的符号,它似乎指向一些有趣的声音符号,叫做_getUIContentSizeCategoryUnspecified和_getUIContentSizeCategoryPreferenceClass
我也使用UIFoundation.framework上的命令行实用程序nm
找到这些符号.他们用小写字母“s”表示,显然是“The symbol is in an uninitialized data section for small objects.”.我不知道这是什么意思(我所收集的都是他们不是一个类或方法).
在网页上搜索_getUIContentSizeCategory …符号不会产生任何内容,但附近还有另一个符号_getUIApplicationClass.我搜索了一个,因为它听起来更一般,在WebKit source年发现了类似的东西.可能没什么,但也许这是一个内部的苹果惯例.无论如何,这个例子并没有真正帮助我解决问题.
无论如何感谢阅读到目前为止.如果你还在这里,我的问题是:
我想要动态地模拟动态类型大小偏好的值.这些反汇编符号可能有所帮助,但也许我错了.感觉就像解决方案很接近,但我只是不能把所有的东西放在一起.
将此值设置为启动参数是很好的,但不能完全解决我的问题.同样,修改模拟器在plist中的值也对自动化也很好,但是并不能解决我的问题.
有没有办法在运行时动态地改变这个值?