MacRuby Deployment + Load Order


Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method CodeColorerLoader::CallBeforeHighlightCodeBlock() should not be called statically in /home/iloveitaly/mabblog.com/blog/wp-includes/plugin.php on line 170

Strict Standards: Non-static method CodeColorer::GetInstance() should not be called statically in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer.php on line 218

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-core.php on line 53

Deprecated: Non-static method CodeColorerOptions::ParseOptions() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-core.php on line 84

Deprecated: Non-static method CodeColorerOptions::PopulateDefaultValues() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 70

Deprecated: Non-static method CodeColorerOptions::FilterLanguage() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 106

Deprecated: Non-static method CodeColorerOptions::GetLanguageMappings() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 250

Deprecated: Non-static method CodeColorerOptions::ParseBoolean() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 161

Deprecated: Non-static method CodeColorerOptions::ParseBoolean() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 177

Deprecated: Non-static method CodeColorerOptions::ParseMode() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 73

Deprecated: Non-static method CodeColorerOptions::ParseMode() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 76

Deprecated: Non-static method CodeColorerOptions::ParseMode() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 79

Deprecated: Non-static method CodeColorerOptions::ParseMode() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 82

Deprecated: Non-static method CodeColorerOptions::ParseMode() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 85

Deprecated: Non-static method CodeColorerOptions::ParseMode() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 88

Deprecated: Non-static method CodeColorerOptions::ParseMode() should not be called statically, assuming $this from incompatible context in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-options.php on line 91

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer-core.php on line 54

Warning: shuffle() expects parameter 1 to be array, null given in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/wordpress-support/wordpress-support.php(10) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method CodeColorerLoader::CallAfterHighlightCodeBlock() should not be called statically in /home/iloveitaly/mabblog.com/blog/wp-includes/plugin.php on line 170

Strict Standards: Non-static method CodeColorer::GetInstance() should not be called statically in /home/iloveitaly/mabblog.com/blog/wp-content/plugins/codecolorer/codecolorer.php on line 226

After reading the official MacRuby docs on deployment, I read over this guide. Although the deployment build seemed to be working fine on my local machine when I dropped it on my laptop with a standard Lion install it crashed, claiming that there was an defined constant – but that constant was a class. How could it be undefined if it ran fine locally?

Looking into it a bit more the class that was undefined was being used as a superclass for another ruby class. Taking a look at rb_main.rb revealed that there is no specific load order. Since the load order was undefined, the class requiring the other ruby class as a superclass was being loaded before the superclass was loaded. I ended up tweaking the rb_main.rb file to allow for a manual load order, followed by the standard automatic load.

# Loading the Cocoa framework. If you need to load more frameworks, you can
# do that here too.
framework 'Cocoa'

# Loading all the Ruby project files.

# manual load allows up to specify the load order for some of the classes
manualLoad = ["VTiTunesHeader"]
for file in manualLoad
require file
end

manualLoad < < File.basename(__FILE__, File.extname(__FILE__))

# Auto load the direct of the files in the dir
dir_path = NSBundle.mainBundle.resourcePath
Dir.glob(File.join(dir_path, '*.{rb,rbo}')).map { |x| File.basename(x, File.extname(x)) }.uniq.each do |path|
if not manualLoad.include? path
require(path)
end
end

# Starting the Cocoa main loop.
NSApplicationMain(0, nil)

You can grab the gist here.

Cocoa Resources

Some Cocoa libraries / snippet repos that I found during my latest dev session.

Random Tidbits

  • Although old news to most, you can grab the the last n bytes of a file using tail -c. Very useful for cutting down on the size of large text log files.
  • I pulled the build versioning code out from a project I was working on. Take a look at this build numbering gist, provides source to pull version number from git or svn and write it in your Info.plist
  • The Ruby logging class is more robust than the Log4r class and the built in logger class.
  • attr_accessor :variable makes a instance variable Key Value Coding compliant. Just set @variable in your initializer.
  • Awesome side-by-side reference sheet for PHP, Ruby, Perl, and Python. Handy reference to python to ruby conversion.
  • Obj-c blocks in MacRuby
  • Although you can `macgem install json`, macruby comes with a json library built in that seems to have tweaks for deployment. Don’t install the json gem
  • The Open3 Ruby library does not return subprocess status correctly when using MacRuby
  • Online version of “MacRuby: The Definitive Guide”
  • PyObjc on Lion is dead. Although you might get an application to run, there are so many bugs it really isn’t usable for production
  • Although macrubyd exists, it doesn’t seem to work with full-fledged Cocoa + MacRuby apps. There isn’t any Xcode integration. Ruby-Debug also doesn’t seem to be compatible with MacRuby. Bottom line: no strong debugging tools for MacRuby… yet.
  • The “throw your dotfiles on github” trend has been an interested learning experience for me

0 Response to “MacRuby Deployment + Load Order”


  • No Comments

Leave a Reply





Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method K2::init_scripts() should not be called statically in /home/iloveitaly/mabblog.com/blog/wp-includes/plugin.php on line 405