iOSで使用可能なストレージサイズを取得する
ストレージサイズを取得する
設定アプリの情報>使用可能に表示されているストレージサイズを取得したい場合がある。
以前は実際より小さい値しか取得できなかった
Swift 3.0の時代には下記のようなコードが紹介されていたが、設定アプリの表示されている値よりも小さい値が返却される。
var systemFreeSize: NSNumber? {
guard let documents = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else {
return nil
}
guard let attributes = try? FileManager.default.attributesOfFileSystem(forPath: documents) else {
return nil
}
guard let systemFreeSize = attributes[.systemFreeSize] as? NSNumber else {
return nil
}
return NSNumber(value: round(systemFreeSize.doubleValue / Double(1000 * 1000 * 1000) * 100) / 100)
}
iOS 11以降では正しい値が取得できる
iOS 11以降でURLResourceKey
に追加されたvolumeAvailableCapacityForImportantUsageKey
を使用すると設定アプリと一致する値が取得できる。
var systemFreeSize: NSNumber? {
guard let documents = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else {
return nil
}
do {
let values = try URL(fileURLWithPath: documents).resourceValues(forKeys: [.volumeAvailableCapacityForImportantUsageKey])
guard let capacity = values.volumeAvailableCapacityForImportantUsage else {
return nil
}
return NSNumber(value: round(Double(capacity) / Double(1000 * 1000 * 1000) * 100) / 100)
} catch {
return nil
}
}