2018-09-01 mdls を使うのがいい方法みたいなので、別の記事にしました。
Macのアプリケーションの識別
BundleIdentifier を使って Identifier ( 識別子)を取り出す。
kMDItemCFBundleIdentifier = "com.microsoft.rdc.mac"
bundle identifier をとりだして、アプリ名と com.evernote のような ドメイン名的な名前を探す。
CFBundleIdentifierを探す
Karabiner の設定をするのに、UTI文字列が必要なのでね。com.vivaldi.Vivaldi
のような文字列が必要になるので。
plutil -extract CFBundleIdentifier xml1 path/to/Info.plist -o - | xmllint - --xpath "//string/text()"
Bundle identifier ( CFBundleIdentifier ) は UTI文字列 を入れている。
UTI 文字列を identifier (識別子)として使うので、例えば、次のようになる。
takuya@~$ plutil -extract CFBundleIdentifier xml1 /Applications/PhpStorm.app/Contents/Info.plist -o - | xmllint - --xpath "//string/text()" <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <string>com.jetbrains.PhpStorm</string> </plist>
/Applications からすべてのIDを探すなら、bash で簡単
ループで回せば結構簡単にわかってくる。
for i in /Applications/*/Contents/Info.plist; do plutil -extract CFBundleIdentifier xml1 "$i" -o - | xmllint - --xpath "//string/text()"; done \ | grep string
ruby も書いた
#!/usr/bin/env ruby require 'mechanize' require 'fileutils' require 'pp' list = Dir.glob('/Applications/*/Contents/Info.plist') len = list.map{|e| e.match(%r|(?<name>[^/]+app)|)[:name].size}.max() list.each{|e| begin appname = e.match(%r|[^/]+app|) xml = `plutil -extract CFBundleIdentifier xml1 "#{e}" -o -` xmldoc = Nokogiri::XML( xml ) identifier = xmldoc.search('//string[1]/text()')[0].text rescue => e appname ||= '' identifier ||= '' ensure puts "%-#{len}s\t%s" % [appname, identifier] end }
参考資料
http://www15.plala.or.jp/NovemberKou/documentBasedProject/setCFBundleIdentifier.html
http://harafuji0613.hatenablog.com/entry/2015/03/22/002953
http://qiita.com/trakwkbys/items/a94c4d43342e96352bde
2017-07-21 追記
セルフ検索に引っかからないので、キーワード追加した
2018-05-10
ぱぱっと使いたいのでrubyのコマンドにした。