small medium large xlarge

Steve_50p_pragsmall
18 Jun 2008, 16:22
Stephyn G W Butcher (2 posts)

I typed the following code from the book:

require 'osx/cocoa'

include OSX

class AppDelegate < NSObject
	def applicationDidFinishLaunching( aNotification)
		puts "#{aNotification.name} makes me say: Hello, world!"
		puts "#{aNotification.object} is the object notifying"
	end
end
NSApplication.sharedApplication
NSApp.setDelegate( AppDelegate.alloc.init)
NSApp.run

and received the following error when I ran it:

$ ruby basic.rb 
2008-06-18 12:01:36.728 ruby[5702:10b] WARNING: multiple libruby.dylib found: '/usr/local/lib/libruby.dylib' and '/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib'
2008-06-18 12:01:36.730 ruby[5702:10b] RBCocoaInstallRubyThreadSchedulerHooks: warning: rb_set_cocoa_thread_hooks is linked from a different library (/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib) than ruby_init (/usr/local/lib/libruby.dylib)
Segmentation fault

This occurs basically because I have two different Ruby installations.

$ which ruby
/usr/local/bin/ruby

and the one that is pointed to by /usr/bin/ruby in /System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/.

I’m still trying to work out what the “right” thing to do is. I use the /usr/local/bin/ruby version for work.

For now, I’m just prepending:

#!/usr/bin/ruby

to my scripts, making them executable with chmod 755 and viola:

$ ./basic.rb 
NSApplicationWillFinishLaunchingNotification says that the application will finish launching.
NSApplicationDidFinishLaunchingNotification makes me say: Hello, world!
<NSApplication: 0x510dd0> is the object notifying

everything works as expected.

It isn’t an ideal solution but works and might help someone who runs into the same problem.

Cheers, Steve

England-small_pragsmall
19 Jun 2008, 16:58
Brian Marick (56 posts)

Most of the Ruby in the book is run as part of a OSX app, not an independent script, so your solution probably suffices. I believe a regular app will pick up the right Ruby. If not, mail me at marick@exampler.com

It’s possible you might also have problems with multiple RubyCocoa installations. Here’s some text from the upcoming beta2 that might help:

<p>
  I also have many of the examples log RubyCocoa's
  version to the console (visible via the Console
  app). If you manually installed a version of
  RubyCocoa before you installed Leopard, that old
  version may be loaded in preference to Leopard's
  (by an application, but not
  by <commandname>irb</commandname>). See
  <pref linkend="id.gotchas"/> if samples behave
  oddly, you check the console, and the version is old.
</p>

If your application logs version to the console and the version is older than that gotten from IRB, probably installed version before leopard. If there’s a version in /Library/Frameworks/RubyCocoal.framework, delete it.

England-small_pragsmall
19 Jun 2008, 16:59
Brian Marick (56 posts)

Whoops - didn’t copy the important bit, which comes before the last para above:

<p>
  To see what version of RubyCocoa you're running,
  type this to <commandname>irb</commandname>:
</p>

<code language="irb"> irb(main):001:0> require 'osx/cocoa' => false irb(main):002:0> OSX::RUBYCOCOA_VERSION => "0.13.1"
</code>
Generic-user-small
01 Feb 2009, 16:45
Tommy Sundström (11 posts)

How can I control what RubyCocoa-version Xcode will be using?

Currently, when i do OSX::RUBYCOCOA_VERSION in irb I get “0.13.1”, while when I do it in an application that I do it from Xcode I get “0.12.0”.

Both in irb and Xcode I can do require ‘osx/cocoa’. Gems installed from irb is however not accessible from Xcode.

(As far as I know I have not installed different versions of RubyCocoa, but I have installed and experimented with MacRuby.)

Generic-user-small
02 Feb 2009, 00:57
Tommy Sundström (11 posts)

By dragging “RubyCocoa.framework” folder out /Library/Frameworks and restarting, I got Xcode to change version. Now when I do

puts OSX::RUBYCOCOA_VERSION

I get “0.13.1”.

However, I still suspect that it is two different instances, since a gem that is available via irb, is not available via Xcode.

England-small_pragsmall
02 Feb 2009, 22:28
Brian Marick (56 posts)

Your app’s environment is set up so that it doesn’t include anything outside the app bundle other than what Apple delivers. If you want to use a gem in your app, you should put it inside your app’s source directory. See chapter 9.

Alternately, if you want to mess with paths, see the file “path-setting.rb” inside the Fenestra source.

  You must be logged in to comment