Blog スタッフブログ

iOS Mac Swift システム開発

[iOS/Mac]謎のプロパティ、UIAlertControllerSeverityの正体

Swift

こんにちは、株式会社MIXシステム開発担当のBloomです。

今回はiOS16から追加されているUIAlertControllerのプロパティ、UIAlertController型のseverityプロパティについて調べてみようと思います。

さて、このUIAlertControllerSeverityは列挙型であり、次の列挙子が定義されています。

@available(iOS 16.0, *)
public enum UIAlertControllerSeverity : Int, @unchecked Sendable {
    case `default` = 0
    case critical = 1
}

ドキュメントによるとそのままdefaultは標準のアラートスタイル、criticalは重要な・警告としてのアラートスタイルになるようです。早速実行してみましょう!

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        if #available(iOS 16.0, *) {
            let alert = UIAlertController(title: "タイトル", message: "severity: default", preferredStyle: .alert)
            alert.severity = .default
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
                print("OK")
            }))
            alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { action in
                print("Cancel")
            }))
            alert.addAction(UIAlertAction(title: "Destructive", style: .destructive, handler: { action in
                print("Destructive")
            }))
            self.present(alert, animated: true)
        }
    }

実行結果

なんということでしょう、何も変わりがありません。ChatGPTに少し聞いてみましょう。

どうやら存在しないプロパティを操作していたようです。良かったですね。

Mac Catalystについて

さて、真面目に調査しましょう。まず公式ドキュメントにはこの通りの記載があります。

This enumeration defines the severity options used by the severity property of UIAlertController. In apps built with Mac Catalyst, the severity determines the style of the presented alert. A UIAlertControllerSeverity.critical alert appears with a caution icon, and an alert with a UIAlertControllerSeverity.default severity doesn’t. UIKit ignores the alert severity on iOS.

You should only use the UIAlertControllerSeverity.critical severity if an alert truly requires special attention from the user. For more information, see the Human Interface Guidelines on alerts.

そう、このプロパティは2019年末に発表された、iPadのソースでMacアプリを構築するための仕組みであるMac CatalystでビルドしたMacアプリにおいてのみ表示制御の動作をするようです。早速Mac Catalystを利用してみましょう!

Xcode15系でMac Catalystを利用する場合、[General] -> [Supported Destinations]で[Mac Catalyst]を選択して追加する必要があります。

追加が完了したらRun DestinationをMy Macなどに指定し早速ビルドしてみましょう。

実行結果

しっかり見た目でわかる変化が現れました。NSAlertにおけるalertStyleの指定と同じ効果があるようですね。

これでいつの間にか追加されていた謎のプロパティ、UIAlertControllerSeverityの正体を捉えることができました。良かったですね。

参考文献

severity – Apple Developer Documentation