コードでアプリからホーム画面に戻る方法を調べたついでに絶対にクリア出来ないゲームを作ってみた

コードでアプリからホーム画面に戻る方法を調べたついでに絶対にクリア出来ないゲームを作ってみた

Clock Icon2023.03.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

アプリからホーム画面に戻る方法があるのか知りたかったので調べてみました。

環境

  • Xcode 14.2
  • iOS 16.2

ホーム画面に戻る方法

下記のコードでデバイスのホーム画面に戻ります。

UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)

アプリを制御するUIApplication.sharedに対して、URLSessionTask.suspendのアクションを実行することでアプリがsuspended状態になり、バックグラウンドに移行(ホーム画面に遷移)します。

絶対にクリア出来ないゲームを作ってみた

こんな面白いAPIあるなら、何か作るしかないという思いでゲームを作ってみました。

題して、絶対にクリア出来ないゲーム2

スタートボタンを押すと、デバイスのホーム画面に遷移するシンプルなゲームです。

デモ

unbeatableGame

コード

import SwiftUI

struct ContentView: View {

    private let bestScore = 0

    var body: some View {
        VStack(spacing: 40) {

            Spacer()

            Text("絶対にクリア出来ない\nゲーム2")
                .multilineTextAlignment(.center)
                .font(.title)
                .bold()

            VStack {

                Text("今すぐ始める")
                    .multilineTextAlignment(.center)
                    .font(.caption)

                Button("スタート",
                       action: backToHomeScreenOfDevice)
                    .foregroundColor(.white)
                    .padding(.vertical)
                    .padding(.horizontal, 24)
                    .background {
                        RoundedRectangle(cornerRadius: 24)
                            .fill(.tint)
                    }
            }

            Spacer()

            Text("BEST SCORE: \(bestScore)")
                .multilineTextAlignment(.center)
                .font(.caption)
        }
        .padding()
    }

    private func backToHomeScreenOfDevice() {

        UIControl().sendAction(#selector(URLSessionTask.suspend),
                               to: UIApplication.shared,
                               for: nil)
    }
}

GitHubに上げていますのでよかったらクリア目指してチャレンジしてみてください。

おわりに

ホーム画面に戻るAPIの存在を知らなかった為、とても感動しました。 出来れば長くアプリに滞在してほしいと言うのが開発者の想いと思いますので中々使う機会はないと思いますが、もし必要な時があれば使ってあげてください。

この記事が誰かの助けになれば嬉しいです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.