ios - 动态类型和 iOS 模拟器 : How can I set the value?

标签 ios testing ios-simulator ui-testing dynamictype

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

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

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

我宁愿不创建一个 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 Server 上尝试过。

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

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

这一切都使用 Xcode 7.1 (7B91b) 进行了测试。

关于ios - 动态类型和 iOS 模拟器 : How can I set the value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33340587/

相关文章:

ios - Xcode - 将属性传递给 Storyboard 中的 View Controller

php - 使用 objective-c 执行 PHP 脚本

node.js - 测试 fastify 路由时如何修复 "not ok timeout!"?

ios - Xcode 中的存档按钮变灰

ios - 如何替换当前的 CALayer

ios - swift 3 : How to set up UINavigationBar setBackgroundImage in AppDelegate

ios - 存折自动化测试

android - API 级别 24 中不推荐使用 ApplicationTestCase

ios - 控制IOS位置模拟器的行驶速度

xcode6 - 如何重新安装IOS模拟器