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

nik*_*ers 6 testing ui-testing ios dynamictype ios-simulator

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

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

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

我宁愿不做一个DynamicTypeController,然后让它说出它是什么类型,因为我冒险忘记将它用于某些元素,然后没有正确测试的行为.

干杯

Car*_*aet 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)" )
    }
Run Code Online (Sandbox Code Playgroud)

但是,测试是从模拟器目录沙箱中进行的,因此您无法实际打开或修改首选项。尝试打开字典时该代码片段失败。我也从未在 Xcode Server 上尝试过这个。

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

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

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