SwiftでiOSのバージョン番号を取得するには

Swiftを使ってiOSデバイスのバージョン番号を取得するには、主にUIDeviceクラスのcurrent.systemVersionプロパティと、ProcessInfoクラスのoperatingSystemVersionプロパティの2つの方法があります。

UIDeviceクラスのcurrent.systemVersionプロパティを使用する方法

UIDeviceクラスのcurrent.systemVersionプロパティは、デバイスのOSバージョンを表す文字列を返します。

以下のコードは、iOSのバージョン番号を取得してコンソールに出力します。

let iosVersion = UIDevice.current.systemVersion
print("iOSバージョン: \(iosVersion)") // => iOSバージョン: 17.4

以下は、SwiftUIでiOSのバージョン番号を取得する例です。

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("iOSバージョン: \(UIDevice.current.systemVersion)") // => iOSバージョン: 17.4
    }
}

ProcessInfoクラスのoperatingSystemVersionプロパティを使用する方法

ProcessInfoのoperatingSystemVersionプロパティは、OSバージョンをmajorVersion、minorVersion、patchVersionの3つの数値で提供します。
これにより、バージョンの各部分を個別に扱うことが可能になります。

以下のコードは、iOSのバージョン番号を取得してコンソールに出力します。

import Foundation

let osVersion = ProcessInfo().operatingSystemVersion
print("Major version: \(osVersion.majorVersion)") // => Major version: 17
print("Minor version: \(osVersion.minorVersion)") // => Minor version: 4
print("Patch version: \(osVersion.patchVersion)") // => Patch version: 0

以下は、SwiftUIでiOSのバージョン番号を取得する例です。

import SwiftUI

struct ContentView: View {
    var body: some View {
        let osVersion = ProcessInfo().operatingSystemVersion
        VStack {
            Text("Major version: \(osVersion.majorVersion)") // => Major version: 17
            Text("Minor version: \(osVersion.minorVersion)") // => Minor version: 4
            Text("Patch version: \(osVersion.patchVersion)") // => Patch version: 0
        }
    }
}

KotlinでAndroidのバージョン番号を取得するには

Androidのバージョン番号やビルドIDなどの情報は、Buildクラスを通じて取得できます。

以下のコードは、Androidのバージョン番号を取得してログに出力します。

import android.os.Build
import android.util.Log

val releaseVersion = Build.VERSION.RELEASE
val apiLevel = Build.VERSION.SDK_INT
val buildDisplay = Build.DISPLAY
val buildId = Build.ID
val incrementalVersion = Build.VERSION.INCREMENTAL

Log.d("AndroidVersionInfo", "Release Version: $releaseVersion") // => Release Version: 14
Log.d("AndroidVersionInfo", "API Level: $apiLevel") // => API Level: 34
Log.d("AndroidVersionInfo", "Build Display: $buildDisplay") // => Build Display: UE1A.230829.036.A1
Log.d("AndroidVersionInfo", "Build ID: $buildId") // => Build ID: UE1A.230829.036.A1
Log.d("AndroidVersionInfo", "Incremental Version: $incrementalVersion") // => Incremental Version: 11228894

以下は、Jetpack ComposeでAndroidのバージョン番号を取得する例です。

import androidx.compose.foundation.layout.Column
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import android.os.Build

@Composable
fun DisplayAndroidVersion() {
    Column {
        Text("Release Version: ${Build.VERSION.RELEASE}")
        Text("API Level: ${Build.VERSION.SDK_INT}")
        Text("Build Display: ${Build.DISPLAY}")
        Text("Build ID: ${Build.ID}")
        Text("Incremental Version: ${Build.VERSION.INCREMENTAL}")
    }
}

JavaScriptでカウントダウン付き自動リダイレクト

JavaScriptを使用して、10秒間のカウントダウン後に自動的にトップページへリダイレクトする方法を紹介します。

この処理は、例えば404 Not Foundエラーページなどで利用すると効果的です。

HTMLコード

まず、HTMLではカウントダウンタイマーの残り時間を表示する部分を設置します。以下のように書きます。

<p><span id="countdown">10</span>秒後に自動的にトップページに移動します。</p>

JavaScriptコード

次に、JavaScriptを使用してカウントダウン機能を実装します。
以下のスクリプトをページの末尾に配置します。

<script type="text/javascript">
    document.addEventListener('DOMContentLoaded', function () {
        let seconds = 10;
        const countdownElement = document.getElementById('countdown');

        const intervalId = setInterval(function () {
            countdownElement.textContent = seconds;
            if (seconds <= 0) {
                clearInterval(intervalId);
                window.location.href = "/";
            }
            seconds--;
        }, 1000);
    });
</script>

このスクリプトでは、DOMContentLoaded イベントが発生した後、カウントダウンを開始します。

各秒ごとにカウントダウン要素のテキストを更新し、秒数が0以下になったらインターバルをクリアし、トップページにリダイレクトします。

mysqldumpでエクスポートしたデータをインポート時のAccess deniedエラーの解決方法

問題

mysqldumpでエクスポートしたデータをインポートすると次のエラーメッセージが表示されました。

Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation

原因

エラーメッセージには「SUPER」または「SET_USER_ID」権限がこの操作に必要であると述べられています。

対策

エクスポートされたSQLファイルからDEFINER=という文字を含む行を探して削除します。

巨大なファイルをテキストエディタで開くと編集に時間がかかります。

sedを使う方法を紹介します。以下のコマンドを実行して、backup.dmpファイルからDEFINER=という文字を含む行を削除します。

Linuxの場合

Linux系のシステムでは、以下のコマンドを使用します。このコマンドはファイルを直接変更します。

sed -i '/^\/\*![0-9]* DEFINER=/d' backup.dmp

macOSの場合

macOSやBSD系のシステムでは、-iオプションの使用法が異なります。
以下のコマンドを使用します。
このコマンドは、ファイルを直接変更し、バックアップファイルを作成しません。

sed -i '' '/^\/\*![0-9]* DEFINER=/d' backup.dmp