я раньше высмеивал UIApplication
в моем приложении таким образом: How to mock UIApplication in Swift?Mock UIApplication открытой функция прошивки 10
Теперь мы хотим получить IOS 10 устройств использовать open(_ url: URL, options: [String : Any] = [:], completionHandler completion: ((Bool) -> Swift.Void)? = nil)
функцию openURL(_ url: URL) -> Bool
осуждаются. Но я, похоже, не могу издеваться над этим так же.
Текущий код
protocol BSApplicationProtocol {
func openURL(url: URL) -> Bool
@available(iOS 10.0, *)
func open(_ url: URL, options: [String : Any], completionHandler completion: ((Bool) -> Swift.Void)?)
}
extension UIApplication: BSApplicationProtocol {
internal func openURL(url: URL) -> Bool {
return openURL(url)
}
@available(iOS 10.0, *)
internal func open(_ url: URL, options: [String : Any], completionHandler completion: ((Bool) -> Swift.Void)?) {
open(url, options: options, completionHandler: completion)
}
}
func openAppSettings(application: BSApplicationProtocol = UIApplication.shared) {
if let settingsURL = URL(string: UIApplicationOpenSettingsURLString) {
if #available(iOS 10.0, *) {
application.open(settingsURL, options: [:], completionHandler: nil)
} else {
_ = application.openURL(url: settingsURL)
}
}
}
При работе на IOS 10 устройства, функция open(_ url: URL, options: [String : Any] = [:], completionHandler completion: ((Bool) -> Swift.Void)? = nil)
называется, но она заканчивается сбой в классе UIApplication
расширения с EXC_BAD_ACCESS
.
На скриншоте, приведенном ниже, вы можете видеть, что старая функция открытия находится в синем цвете, но новая зеленая. Это заставляет меня думать, что я как-то неправильно ссылаюсь на функцию.
Есть ли какие-либо советы о том, где я могу идти здесь не так?