rcmdnk's blog
Last update

Applescript: The Definitive Guide

使っているAppleScriptのうちの一つがMavericksにアップデートして 使えなくなってたので調べてみたらRubyでのcocoaの呼び出しエラーが出てたのでその対処法。

Sponsored Links

Yosemiteのアップデートに関する追記

追記: 2014/10/19

Yosemiteのアップデートで下で書いてるRuby 1.8が完全に削除されたので 別の方法が必要です。

YosemiteからRuby1.8が削除されたのでAppleScriptでのウィンドウのサインズ変更の取り扱いを変更した

追記ここまで

require ‘osx/cocoa’

AppleSCriptを使ってウィンドウサイズを変更するスクリプトを作って使ってるんですが、 その中でディスプレイの大きさを取ってくるのにruby+cocoaで行っています。

実際に使ってるスクリプトはこれ

この中で

require 'osx/cocoa';
...

というスクリプトを

set ret to do shell script "/usr/bin/ruby -e " & quoted form of cocoaScript & " '' " & " " & x & " " & y

こんな感じで実行していました。

このスクリプトを実行した所

error "/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- osx/cocoa (LoadError)
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
    from -e:1:in `<main>'" number 1

こんな感じのエラーが。ここで気付いたんですが、 Macのデフォルトのrubyが1.8から2.0にバージョンアップされています。

$ ls -l /usr/bin/ruby
lrwxr-xr-x  1 root  wheel  76 23 Oct 00:28 /usr/bin/ruby -> ../../System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby
$ /usr/bin/ruby --version
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]

ただ、上のRuby.frameworksのところを除いてみると

$ ls -l /System/Library/Frameworks/Ruby.framework/Versions
total 8
drwxr-xr-x  6 root  wheel  204 23 Oct 00:27 1.8
drwxr-xr-x  6 root  wheel  204 23 Oct 00:27 2.0
lrwxr-xr-x  1 root  wheel    3 23 Oct 00:27 Current -> 2.0

と1.8も残っています。 試しに、

set ret to do shell script "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -e " & quoted form of cocoaScript & " '' " & " " & x & " " & y

と1.8の方のrubyを使ってみると動きました。

Rubyのスクリプトでもshebangを

#!/usr/bin/ruby

から

#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

に変えれば行けます。

根本的には

/System/Library/Frameworks/Ruby.framework/Versions/Current

の指し示す先を1.8に変えてしまえば他を変更せずに行けます。

osx/cocoaについてもよく知らないのですが、何か他の物に変わったんでしょうか? もしくはただまだ対応してないだけ?

まあ、差し当たりこのrubyを使ってるのは上のスクリプトだけなので これで良いかと。

デフォルトのrubyがアップデートされてるので、 Octopress用にrvmでインストールしたrubyを消して デフォルトのを使っても良いのかな、とも。

Sponsored Links
Sponsored Links

« Mavericksへアップデート Mavericksでのキーボード設定 »