我想编写我的 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/