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

Dynamic Type & iOS Simulator: How can I set the value?

我想编写我的 UI 测试,以便它们测试动态类型的所有七种状态,从最小到最大。我应该怎么做?

我可以在我的Scheme中为模拟器设置一个环境变量,然后再制作不同的方案吗?

或者我可以在测试中以编程方式设置动态类型变量吗?

我宁愿不制作 DynamicTypeController 然后让它说明它是什么类型,因为我可能会忘记将它用于某些元素,然后没有正确测试行为。

干杯

尼克

对于这个答案的不完整,我深表歉意,但是对于评论来说太长了,而且不会有任何代码格式。

简短的回答是,这不受支持: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 服务器上尝试过。

您可以使用 shell 脚本修改 plist,如下所示:plutil -replace UIPreferredContentSizeCategoryName -string UICTContentSizeCategoryAccessibilityXXXL com.apple.UIKit.plist。修改文件后模拟器需要重新启动,因此这可能无法在共享构建环境中运行。不幸的是,Xcode 中的 Pre-action 脚本无法使用模拟器文件系统的路径。您可以修改所有模拟器的设置,但同样,可能无法在共享构建环境中运行。

在一天结束时,您最好创建 DynamicTypeController 并添加一些流程以确保没有人使用 UIApplication.preferredContentSizeCategory.

这都是使用 Xcode 7.1 (7B91b) 测试的。