【Swift】UIApplicationとは?使い方とプロパティやメソッド
この記事からわかること
- SwiftのUIKitフレームワークのUIApplicationのクラスとは?
- プロパティやメソッド
- シングルトンの意味とsharedプロパティの使い方
- connectedScenesやidleTimerDisabledプロパティの使い方
index
[open]
\ アプリをリリースしました /
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学習に使用した参考書





