2016年11月12日土曜日

Command Line Tools for Xcodeのもう一つの顔

以前、Command Line Tools for Xcodeのアンインストール方法という記事を書いた。
が、実は、この記事には見落としがあった。ただし、本稿は、その見落とし部分についてアンインストール方法を述べるものではない。

Command Line Tools for Xcodeのディスクイメージ、あるいはxcode-select --installコマンドによってインストールされるパッケージは2種類あったのだ。

ひとつはcom.apple.pkg.CLTools_Executablesで、これのアンインストールは、件の記事にある通り簡単だ。
もうひとつはcom.apple.pkg.DevSDK_OSX1012(macOS 10.12向けの場合)で、その名の通りSoftware Development Kitだ。こちらがインストールするものは多岐にわたるので、アンインストールは一筋縄ではいかない。

確認したところ、OS X Yosemite用のCommand Line Tools for Xcodeディスクイメージでも、SDKを含んでいた。それ以前のディスクイメージも入手可能だが、確認していない。

ここからは、アンインストールしたい人ではなく、使いたい人のための内容になる。

OS X El Capitanから、OSには/usr/includeディレクトリが含まれなくなった。もちろん、そこに入っているべきヘッダファイルも含まれなくなった。これらはSDKの形で、Command Line Tools for Xcodeに含まれるようになった。

つまり、UNIX資産のコンパイルを含めたソフトウェア開発または、それに準じたことをしたい人は、OS X El Capitan移行は、Xcodeだけでは不十分になったのだ。

このことは、ffmpegコンパイルガイドを改訂していて判明、検証した。

最後に、SDKを含めたアンインストールだが、インストーラパッケージがインストールする内容を知る方法というのはある。だから、応用すればアンインストールはできるはずである。
だが、リンクにある手順で生成したシェルスクリプトを管理者権限で実行しても、削除できるのは/usr/share/man以下にあるマニュアルだけであった。おそらくはSIP (System Integrity Protecton)のせいである。SIPを解除すれば消せるかも知れないが、筆者はSDKが必要なのでやる気はない。

参考までにSDKがファイルをインストールする場所(最上位のみ)を書いておく。並の神経では触る気にならない場所だと思うが、いかがだろうか?

/System/Library/Frameworks
/usr/include
/usr/lib
/usr/share/man

以上。

2016年11月11日金曜日

MacではGNU libiconvは必要ないみたいだ

これは、以前から経験していたことだが、今回ffmpegコンパイルガイドで同じ轍を踏んだので、戒めとして書く。

GNU libiconvは、例えばWindowsから受け取ったzipアーカイブを文字化けさせないunzipをコンパイルするために必要なライブラリだ。

だが、macOSには昔から標準でlibiconvが入っている。こちらを使わないとコンパイルできないものもあり、例えばrsyncなどはそうだ。(筆者はOS標準でないrsyncを使っている)

実はMacでffmpegをコンパイルする時もmacOS標準のlibiconvを使うべきだったのだ。今回メーリングリストでカールという偉い人に怒られて(笑)初めて気がついた。(Time Machineの記録を辿ると、仕様変更があったのかもしれない)

発端は2016年9月24日に発表されていたffmpegのSDL1からSDL2への移行であった。筆者は呑気にもこれに気づかず、ffmpegコンパイルガイドの更新を怠っていた。そして2016年11月8日になってガイドを更新し、ffplayがビルドされないことに気がついた。

SDL2をコンパイル、インストールしてみたものの、一向にffmpegのconfigureはそれを認識しない。大いにハマった。
ハマった中でどうもlibiconvが絡んでいるらしいことはなんとか把握した。ffmpegコンパイル環境を最初から作り直す過程でそれを確認し、メーリングリストで吠えついたら、逆に怒られた。「お前、どうしてOS標準じゃないlibiconvを入れるんだ!」と…。

恥をさらけ出してしまうのだが、筆者がffmpegコンパイル環境にGNU libiconvを入れていたのは、Windows版のffmpegコンパイルガイドを流用していたことと、OS標準のlibiconvが日本語に対応していないと信じていたのが理由だった。

2013年10月にガイドを書いて以来、最大の間違いが3年の時を経て修正された。筆者の乏しい経験に限るという条件はつくが、MacではGNU libiconvは必要ないみたいだ。

2016年11月8日火曜日

フォルダ階層構造を維持したまま、まとめて画像を見る

筆者はグラビアアイドルが好きだ。ただしおっぱい星人ではない。話がずれるのでこれ以上書かないが、とにかく、筆者のピクチャフォルダには、フォルダがいくつもの階層構造になった画像がたくさんある。

これらの画像をフォルダ階層構造を維持したまま、まとめて見ることができないか悩んできた。Finderは当然試した。ただし自分が普段使っているカラム表示とアイコン表示で。

図を見れば一目瞭然だが、すべての01.jpgという画像がフォルダ階層構造を無視して抽出されている。これでは、フォルダごとにあるストーリー(順番)が無視されてしまい、使いものにならない。

次に試したのはコマンドラインだ。次のコマンドはカレントディレクトリにあるjpg画像を、コマンドラインからQuickLookを呼び出して表示することができる。

find . -iname "*.jpg" -exec qlmanage -p "$@" >& /dev/null {} +;
find . -iname "*.jpg" -print0 | sort -n | xargs -0 qlmanage -p "$@" >& /dev/null

このコマンドの難点は

  1. ファイル名が桁揃えされていない場合、順番が狂ってしまう。(1.jpg、2.jpg、10.jpg…が1.jpg、10.jpg、2.jpg…になる)
  2. コマンドラインから呼び出すQuickLookはデバッグモードで、フルスクリーン表示ができない。

そこで筆者は一気に突っ走ってしまった。できないならアプリを作ろう…と。

紆余曲折の結果、できることはできた。アプリの名前は眼福である。グラビアアイドルを見るのは目の保養だから、そういう名前をつけた。

誰もダウンロードしてくれないので、せめて自身のブログで紹介しようと思い、この記事を書き始めた。

そして気づいた。

Finderでもリスト表示とカバーフロー表示では、フォルダの階層構造が維持されて抽出できることに!
(正確には、並び替え条件を設定しなければ、最後に開いた日順に表示される)

筆者は今慟哭している。なぜ11,800円(税込み12,744円)もの金を投じて、Apple Developer Programに加入してしまったのかと! アプリを作って公開する前にFinderの機能に気付けなかったのだろうかと!

来年の10/24(Apple Developer Program加入日)までに、何か他のアプリを作れるだろうか? いや作るしかない。取り返すんだ!

何の記事か分からなくなってきたので、このあたりで筆を置く。