Skip to content

lastobelus/MacRubyReload

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MacRubyReload: dynamic reloading of application source code without rebuilding

In my mind, one of the major promise of MacRuby as a development language for Mac application programming is to empower the developer to embrace an incremental, dynamic, interpreted workflow loop.

The common compile workflow is:

  1. Edit/Save
  2. Compile
  3. Run
  4. Exercize the application to the point under development
  5. Test
  6. Notice a bug
  7. Quit
  8. go to step 1

Very soon, this workflow loop becomes time-consuming: compile times increase as the application gets bigger, application startup time increase as the application does more, and exercizing the app to the point under development can sometimes take very long to do.

The interpreted workflow is:

  1. Run
  2. Exercize the application to the point under development
  3. Test
  4. Notice a bug
  5. Edit
  6. go to step 3

So you go from an 8 step loop which includes 3 time intensive steps to a 4 step loop with no time intensive loop.

Unfortunately, MacRuby as of version 0.10 doesn't propose this workflow. Instead, the Xcode template that it provides replicate the compile workflow even though there is no mandatory compile.

This project shows how to implement an interpreted workflow using MacRuby. Hopefully, MacRuby will eventually evolve to include a similar facility in its default Xcode templates.

How to use:

  • Download and run the project
  • Notice a new MacRuby menu, with two items: "Reload Ruby" and "Test"
  • Select "Test". You will get a nice greeting in the console.
  • Without quitting, switch back to Xcode, select the AppDelegate.rb file.
  • Modify the doTest method. You can for example uncomment the second greeting line. Don't forget to save.
  • Switch back the running MacRubyReload application
  • Select "Reload Ruby"
  • Select "Test" again. You will now see your modified greeting.

How it works:

  • a custom build rule for Ruby (.rb) files produces very simple text files (source.loc.txt) that contain the full path name of every Ruby source files for the current target. These location files are copied to the application main bundle resource directory.
  • a reloadMacRubySource function has been added to the main Ruby file (rb_main.rb). That function walks the app bundle resource directory looking for those location files. It then reads them and call "load" on each file listed in them.
  • the reloadMacRubySource is called in the Interface Builder Action method connected to the Reload Ruby menu item.

That's it

Dependencies

mrb-fsevents

  • https://github.com/ttilley/mrb-fsevent
  • not registered on rubyforge.org, so you will have to build it & install it from gemfile
  • to do that you will likely need to patch the macruby bundler gem to change references to the gem command in gem_helper.rb to macgem

About

dynamic reloading of application source code without rebuilding

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 92.4%
  • Objective-C 7.6%