动态类型和iOS模拟器:我该如何设置值?

7
我希望编写UI测试用例,以便测试大小从最小到最大的动态类型的七种状态。我该如何做?
在我的方案中,我能否为模拟器设置环境变量,然后只需创建不同的方案?
或者我可以在我的测试中以编程方式设置动态类型变量吗?
我不想创建DynamicTypeController并让它显示其类型,因为我可能会忘记为某些元素使用它,然后无法正确测试行为。
谢谢,
Nik
1个回答

4

非常抱歉这个答案不是很完整,但它太长了不能放在评论区,也无法进行代码格式化。

简短的回答是不支持此功能: https://forums.developer.apple.com/thread/21503 ,但可能值得一个反馈。

更长的回答是,你可能可以通过一些方法来进行修改。模拟器中的动态类型设置可以在你的文件系统中找到:~/Library/Developer/CoreSimulator/Devices/<device identifier>/data/Library/Preferences/com.apple.UIKit.plist。你可以在XCTest中使用编程的方式获取到模拟器文件系统的路径:

    let environment = NSProcessInfo.processInfo().environment
    if let resourcesDir = environment[ "SIMULATOR_SHARED_RESOURCES_DIRECTORY" ]
    {
        print( "-- Simulator Shared Resources Directory: \(resourcesDir)" )
        let dictionary = NSMutableDictionary( contentsOfFile: "\(resourcesDir)/data/Library/Preferences/com.apple.UIKit.plist" )!
        print( "Dictionary: \(dictionary)" )
    }

然而,测试是从模拟器目录中隔离的,因此您无法实际打开或修改首选项。当尝试取消包装字典时,该代码片段会失败。我也从未在Xcode Server上尝试过这个。
您可以使用shell脚本修改plist,如下所示:plutil -replace UIPreferredContentSizeCategoryName -string UICTContentSizeCategoryAccessibilityXXXL com.apple.UIKit.plist。修改文件后需要重新启动模拟器,因此在共享构建环境中可能不可行。不幸的是,无法在Xcode的预操作脚本中获取模拟器文件系统的路径。您可以修改所有模拟器的设置,但同样,在共享构建环境中可能行不通。
最终,您最好创建自己的DynamicTypeController并添加一些流程以确保没有人使用UIApplication.preferredContentSizeCategory
这些都是在Xcode 7.1(7B91b)中进行测试的。

嗨,卡洛斯,不用道歉,我认为你的答案已经非常完整了。我原本的方法是制作不同的模拟器,但现在我绝对会转而编辑这个plist文件。Xcode服务器用于同一团队的同一项目,所以应该没有问题。非常感谢! :-) - niklassaers
我已经添加了RADAR#23459874。顺便说一句,很抱歉,我刚刚注意到赏金在我标记答案正确之前已经过期了。 :-( - niklassaers
棒极了。看起来你可以添加 -UIPreferredContentSizeCategoryName UICTContentSizeCategoryAccessibilityXXXL 作为启动参数(例如在 Xcode 方案中)。感谢这个回答,它真的帮了我很多。 - Clafou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接