[Swift] 14 ファイルのUniform Type Identifier(UTI)を取得

[M1 Mac, Big Sur 11.6.8, Swift 5.5.2, NO IDE]

久々のSwiftネタです。

ファイルのUTIを取得するコードを紹介します。Core Foundationを使用します。コードは参考サイトから拝借しました。

printutiファイルは新設した/usr/local/bin2に置き、パスを通して使えるようにしました。

C++でも出来なくはないみたいですが、かなりややこしそうなので素直にSwiftを使う方がいいようです。

Swiftコードをライブラリ化してC++で使いたいものの、さくっと調べた感じでは情報はありませんでした。

import Foundation

if let argument = CommandLine.arguments.dropFirst().first {
    let url = URL(fileURLWithPath: argument)
    if let uti = (try? url.resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier {
        print(uti)
    }
    else {
        print("UTI取得に失敗しました: \(argument)")
    }
}
// 実行ファイル作成(ファイル名はprintuti)
swiftc -o printuti main.swift

// UTIの取得
printuti [filepath]

// 使用例
~ $ printuti test.png 
public.png

参考サイト