Xcode 11 でビルドしたWebViewのUserAgentのデバイスごとの比較です。
注目したいのは iOS 13.0 iPad 9.7 インチ以上のUserAgentで、iPadではなくMacintoshとなっています。
UserAgent
iOS 13.0 iPhone
Mozilla/5.0 (iPhone; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
iOS 13.0 iPad mini 5
Mozilla/5.0 (iPad; CPU OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
iOS 13.0 iPad 9.7 インチ以上
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko)
iOS 12.4 iPhone
Mozilla/5.0 (iPhone; CPU iPhone OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
iOS 12.4 iPad mini
Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
iOS 12.4 iPad 9.7 インチ以上
Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
問題
このMacintosh UserAgentを2020年5月時点でいまだに認識していないサイトがあります。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko)
YouTube
一応、iPad版SafariのUserAgentで上書きすると上記の警告を消すことができます。
webView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15"
原因
iPad mini以外のiPadがMacintoshのUserAgentとなる原因がiOS 13から追加された WKWebpagePreferences
です。
@available(iOS 13.0, *)
open class WKWebpagePreferences : NSObject {
@available(iOS 13.0, *)
open var preferredContentMode: WKWebpagePreferences.ContentMode
}
extension WKWebpagePreferences {
@available(iOS 13.0, *)
public enum ContentMode : Int {
case recommended = 0
case mobile = 1
case desktop = 2
}
}
WKWebpagePreferences.ContentModeの
recommended
はiPad mini以外のiPadを desktop
として認識し、それ以外のデバイスを mobile
として扱うようです。
対策
もしiPad mini以外のiPadを mobile
として認識させたい場合は以下のようにします。
@available(iOS 13.0, *)
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, preferences: WKWebpagePreferences, decisionHandler: @escaping (WKNavigationActionPolicy, WKWebpagePreferences) -> Void) {
// preferences.preferredContentMode デフォルト値は .recommended
preferences.preferredContentMode = .mobile
//decisionHandler(.cancel, preferences)
decisionHandler(.allow, preferences)
}
iOS 13.0 iPad 9.7 インチ以上
preferences.preferredContentMode = .mobile
Mozilla/5.0 (iPad; CPU OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
iOS 13.0 iPhone
preferences.preferredContentMode = .desktop
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko)
早くTwitterとYouTubeがサポートしてくれるといいな。