【Swift】UIApplicationとは?使い方とプロパティやメソッド
この記事からわかること
- SwiftのUIKitフレームワークのUIApplicationのクラスとは?
- プロパティやメソッド
- シングルトンの意味とsharedプロパティの使い方
- connectedScenesやidleTimerDisabledプロパティの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
Swiftの主要なフレームワークの1つ「UIKit」に組み込まれているUIApplication
クラスの使い方をまとめていきます。
UIApplicationとは?
UIApplication
とはSwiftのフレームワーク「UIKit」に含まれているクラスの1つです。その中でもアプリケーションを制御、管理するクラスで実行されているiOSアプリには必ず1つのUIApplication
のインスタンスが生成されています。
このUIApplication
インスタンスが実際にiOSとアプリのやり取りを行ってくれており、アプリが起動されたタイミングやメモリ状況などを検知しデリゲートメソッド(UIApplicationDelegateプロトコルに準拠)を呼び出します。
クラス階層はNSObject
>UIResponder
>UIApplication
となっています。
@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
を指定すると非表示になります。
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
UIScene
はactivationState
でシーンの状態を取得することができます。
public enum ActivationState : Int {
case unattached = -1
case foregroundActive = 0
case foregroundInactive = 1
case background = 2
}
- unattached:シーンが現在アプリに接続されていないことを示す状態
- foregroundActive:シーンがフォアグラウンドで実行され、現在イベントを受信していることを示す状態
- foregroundInactive:シーンがフォアグラウンドで実行されているが、イベントを受信していないことを示す状態
- background:シーンがバックグラウンドで実行されており、画面に表示されていないことを示す状態
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学習に使用した参考書