Показываем индикатор загрузки файла в Finder


Ты наверное замечал, что при загрузке файлов, например в Chrome, в Finder рядом с файлом показывается некий круговой индикатор загрузки.

Отображение индикактора загрузки файла в Finder

Для этого используется специальный атрибут файла com.apple.progress.fractionCompleted, а также есть небольшая (но неочевидная) хитрость: нужно выставить дату создания файла равной 1984-01-24 08:00:00 +0000 а соотвественно, чтобы скрыть индикатор вернуть файлу актуальную дату и убрать атрибут.

Метод на Swift будет выглядеть следующим образом:

func setProgress(value: Double, forFile path: String) throws {
    var fileAttributes = try FileManager.default.attributesOfItem(atPath: path)
    let extendedAttributesKey = FileAttributeKey(rawValue: "NSFileExtendedAttributes")
    var extendedAttributes = fileAttributes[extendedAttributesKey] as? Dictionary ?? [:]
    let progressData = "\(value)".data(using: .ascii)
    extendedAttributes["com.apple.progress.fractionCompleted"] = progressData
    fileAttributes[extendedAttributesKey] = extendedAttributes
    
    let dateString = "1984-01-24 08:00:00 +0000"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "YYYY-MM-dd HH:mm:ss Z"
    let date = dateFormatter.date(from: dateString)
    fileAttributes[FileAttributeKey.creationDate] = date

    try FileManager.default.setAttributes(fileAttributes, ofItemAtPath: path)
}

Пример использования:

try! setProgress(value: 0.6, forFile: "/Users/michael/1.txt")

Скачать пример