【Swift】UIApplicationとは?使い方とプロパティやメソッド

この記事からわかること

  • SwiftUIKitフレームワークUIApplicationクラスとは?
  • プロパティメソッド
  • シングルトン意味sharedプロパティの使い方
  • connectedScenesidleTimerDisabledプロパティの使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Swiftの主要なフレームワークの1つ「UIKit」に組み込まれているUIApplicationクラスの使い方をまとめていきます。

UIApplicationとは?

UIApplicationとはSwiftのフレームワーク「UIKit」に含まれているクラスの1つです。その中でもアプリケーションを制御、管理するクラスで実行されているiOSアプリには必ず1つのUIApplicationのインスタンスが生成されています。

このUIApplicationインスタンスが実際にiOSとアプリのやり取りを行ってくれており、アプリが起動されたタイミングやメモリ状況などを検知しデリゲートメソッド(UIApplicationDelegateプロトコルに準拠)を呼び出します。

クラス階層はNSObjectUIResponderUIApplicationとなっています。

@MainActor  class UIApplication : UIResponder

  @MainActor  class UIResponder : NSObject 

    class NSObject

UIApplicationクラスが保持している主要なプロパティ

UIApplicationクラスが保持している主要なプロパティ

プロパティ 概要
shared シングルトンインスタンスを保持
delegate アプリ オブジェクトのデリゲート
applicationState アプリの現在の状態、または最もアクティブなシーンの状態
connectedScenes アプリの現在接続されているシーン
supportsMultipleScenes アプリが複数のシーンを同時に表示できるかどうかを示すBool値
backgroundRefreshStatus バックグラウンドでの実行時にアプリがコンテンツを更新できるかどうか
isIdleTimerDisabled アプリのアイドルタイマーを無効にするかどうかを制御するBool値
applicationIconBadgeNumber ホーム画面のアプリアイコンのバッジ
alternateIconName システムがアプリに対して表示するアイコンの名前
upportsAlternateIcons アプリがアイコンを変更できるかどうかを示すBool値
preferredContentSizeCategory ユーザーごとのフォントサイズオプション
userDidTakeScreenshotNotification ユーザーがホームボタンとロックボタンを押してスクリーンショットを撮ったときに投稿される通知

UIApplicationクラスが保持している主要なメソッド

メソッド 概要
open(
_ url: URL,
options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:],
completionHandler completion: ((Bool) -> Void)? = nil
)
指定されたURLのサイトを非同期で呼び出す
setAlternateIconName(
_ alternateIconName: String?,
completionHandler: ((Error?) -> Void)? = nil
)
システムが表示するアプリのアイコンを変更

sharedプロパティ

class var shared: UIApplication { get }

sharedプロパティはシングルトンパターンのためのインスタンスを保持します。

シングルトンとはオブジェクト指向におけるデザインパターンの1つです。その中でも生成したインスタンスが必ず1つであることが保証されている状態のインスタンスのことを指します。

つまりどこからアクセスされてもインスタンスは1つしか定義していないので同一の値を常に参照できるようになります。

自動で生成されているUIApplicationのインスタンスを参照する際にこのsharedプロパティを使います。これでUIApplicationオブジェクトを操作することができるようになります。

UIApplication.shared // シングルトンのインスタンスにアクセス

applicationIconBadgeNumberプロパティ

 var applicationIconBadgeNumber: Int { get set }

applicationIconBadgeNumberプロパティはホーム画面のアプリアイコンにバッジを設定できるプロパティです。

このプロパティに数値渡すだけで以下のようにバッジを渡すことができます。数値に0を指定すると非表示になります。

applicationIconBadgeNumberプロパティを使ってアイコンにバッジをつけている様子
UIApplication.shared.applicationIconBadgeNumber = 5

バッジを実際に付与するためのコード

UNUserNotificationCenter.current().requestAuthorization(options: .badge) { (granted, err) in
  // バッジの付与をリクエスト通知
}
let application = UIApplication.shared
application.applicationIconBadgeNumber = 5

idleTimerDisabledプロパティ

@property(nonatomic, getter=isIdleTimerDisabled) BOOL idleTimerDisabled;

idleTimerDisabledアプリ起動中の自動スリーブモードのON/OFFの設定を保持するプロパティです。

値はYES/NOで指定します。YESに指定するとアプリ起動中に時間が経過してもスリープモード(画面が暗くなる)に切り替わらないようになります。ですがバッテリー消費が激しいので注意が必要。

connectedScenesプロパティ

var connectedScenes: Set { get }

connectedScenesプロパティはメモリ内でアクティブになっているシーンを保持するプロパティです。フォアグラウンドだけでなすバックグラウンドで作業が行われているシーンも格納されます。マルチウィンドウにも対応できるように保持する形式はSet形式UI Scene型となっています。

UIScene.activationState

UISceneactivationStateでシーンの状態を取得することができます。

public enum ActivationState : Int {
    case unattached = -1
    case foregroundActive = 0
    case foregroundInactive = 1
    case background = 2
}

sendAction(_:to:from:for:)メソッド

公式リファレンス:sendAction(_:to:from:for:)メソッド

sendAction(_:to:from:for:)メソッドは指定したターゲットに対してselectorで指定したアクションを送信するメソッドです。例えば以下のようにUIResponder.resignFirstResponderメソッドをアクションとして渡すことで現在アクティブになっているフォーカスを解除することができます、

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
memberArray.removeLast()

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

私がSwift UI学習に使用した参考書

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index