使用Fastlane快照阅读UserDefaults时遇到困难

时间:2016-10-24 02:19:48

标签: ios swift snapshot xcode-ui-testing fastlane

我正在使用Fastlane's snapshot为我即将提交到App Store的应用创建屏幕截图。

它起作用"正如所宣传的那样#34;在大多数情况下,但它似乎不喜欢我在我的应用程序中访问UserDefaults的方式。在一次测试中,它会生成退出状态:65 错误。

UI Testing Failure - com.me.MyApp crashed in (extension in MyApp):__ObjC.NSObject.defaultTime () -> Swift.Float

我发现UserDefaults.standard.value(forKey: "defaultTime")有语法错误的邀请,因此我创建了一个访问UserDefaults的扩展程序。这是扩展程序的样子:

class CustomExtensions: NSObject {
    /*
     This is blank. Nothing else in here. No really...nothing else
     */
}

extension NSObject {
    // User Defaults    
    func defaultTime() -> Float {
        return UserDefaults.standard.value(forKey: "defaultTime") as! Float
    }

    // a bunch of other UserDefaults    
}

只要我需要defaultTime,我就可以点击defaultTime()。使用此方法访问UserDefaults值可在模拟器和我测试的设备上正常工作。我只遇到snapshot的问题。

我尝试在测试中添加sleep(1),但似乎没有做任何事情。我欢迎建议:访问UserDefaults的其他方法,使我能够在整个MyApp中轻松访问它们。

1 个答案:

答案 0 :(得分:3)

可能发生的事情是,在您的模拟器和设备上,您在读取密钥defaultTime之前,正在为用户默认值写入值。 value(forKey:返回一个可选项,如果你强制解包它(或者像你在这里那样强制向下转换),如果值为nil,你将崩溃。尝试返回一个可选的:

func defaultTime() -> Float? {
    return UserDefaults.standard.value(forKey: "defaultTime") as? Float
}

或使用默认值:

func defaultTime() -> Float {
    return UserDefaults.standard.value(forKey: "defaultTime") as? Float ?? 0.0
}