UIApplication.shared.isIdleTimerDisabled を trueに設定すれば、スリープに入らなくなります。
試しに、かつてつくった WKWebViewを設置しただけのiOSアプリ に組み込んでみましょう。
ソースコード
ContentView.swift
import SwiftUI var urlString = "https://google.co.jp" struct ContentView: View { var body: some View { WebView(urlString: urlString).onAppear { print("appear") UIApplication.shared.isIdleTimerDisabled = true // 追加 }.onDisappear { print("disapper") UIApplication.shared.isIdleTimerDisabled = false // 追加 } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
WebView.swift(前回から変更なし)
import SwiftUI import WebKit struct WebView: UIViewRepresentable { var urlString: String func makeUIView(context: Context) -> WKWebView { let config = WKWebViewConfiguration() config.allowsInlineMediaPlayback = true return WKWebView(frame: .zero, configuration: config) } func updateUIView(_ uiView: WKWebView, context: Context) { guard let url = URL(string: urlString) else { return } uiView.load(URLRequest(url: url)) } }
コードとしてはContentView.swiftに2行追加したのみです。
一応、Viewが非表示になった際に、UIApplication.shared.isIdleTimerDisabledをfalseに戻しています。
これだけで、アプリ起動時は本体がスリープしなくなります。
この書き方だと画面遷移した場合その限りではない気がするのですが、WebViewを表示するだけの画面遷移なしのアプリで使うこと前提なので、いまのところ困っていません。
ウェブサイトからだとスリープの設定はできないので、ネイティブアプリでラップした意味が出てきますね。