5 Easy Steps To Your First RubyCocoa Application: Difference between revisions

From Wurst-Wasser.net
Jump to navigation Jump to search
Line 22: Line 22:


=== Step 02: Adding an AppController ===
=== Step 02: Adding an AppController ===
# There is still the Objective-C WikipediaAppDelegate class. Let's loose that files...<br>[[Image:RubyCocoaTutorialAppController01.png|Notice that the WikipediaAppDelegate.h and WikiAppDelegate.m are gone!]]
# There is still the Objective-C WikipediaAppDelegate class. Let's loose the class files (<tt>WikipediaAppDelegate.h</tt> and <tt>WikiAppDelegate.m</tt>)...<br>[[Image:RubyCocoaTutorialAppController01.png|Notice that the WikipediaAppDelegate.h and WikiAppDelegate.m are gone!]]
# ...and create a new file <tt>WikipediaAppController.rb</tt>...<br>[[Image:RubyCocoaTutorialAppController02.png|WikipediaAppController.rb is new!]]
# ...and create a new file <tt>WikipediaAppController.rb</tt>...<br>[[Image:RubyCocoaTutorialAppController02.png|WikipediaAppController.rb is new!]]
# ...which we fill with:
# ...which we fill with:

Revision as of 20:21, 16 June 2010

This is my preparation for the Cetik Event 2010. 2009 I promised to hold a lecture about creating an simple RubyCocoa application.

What you need

  • Macintosh of your choice
  • MacOS X 10.5 oder 10.6 (10.4 users have to install RubyCocoa theirselves)
  • XCode 2.4 or higher[1]
  • some time

Step 01: Creating the project

  1. Click Create a new XCode project...
    RubyCocoaTutorialStep1CreatingTheProject01.png
  2. ...choose Application on the left and Cocoa Application on the right and click Choose......
    RubyCocoaTutorialStep1CreatingTheProject02.png
  3. ...choose a cosy[2] place and a name for your project, I named it Wikipedia...
    RubyCocoaTutorialStep1CreatingTheProject03.png
  4. ...this is your newly created project...
    RubyCocoaTutorialStep1CreatingTheProject04.png
  5. ...edit main.m and paste the following...
    #import <RubyCocoa/RBRuntime.h>
    int main(int argc, const char* argv[])
    {
    return RBApplicationMain("rb_main.rb", argc, argv);
    }

    RubyCocoaTutorialStep1CreatingTheProject06.png
  6. ...choose File New File......
    RubyCocoaTutorialStep1CreatingTheProject06a.png
  7. ...choose Empty File and click Next...
    RubyCocoaTutorialStep1CreatingTheProject07.png
  8. ...name it rb_main.rb and save it to your project...
    RubyCocoaTutorialStep1CreatingTheProject08.png
  9. ...now paste
    require 'osx/cocoa'
    def rb_main_init
    path = OSX::NSBundle.mainBundle.resourcePath.fileSystemRepresentation
    rbfiles = Dir.entries(path).select {|x|
    /\.rb\z/ =~ x}
    rbfiles -= [ File.basename(__FILE__) ]
    rbfiles.each do |path|
    require( File.basename(path) )
    end
    end
    if $0 == __FILE__ then
    rb_main_init
    OSX.NSApplicationMain(0, nil)
    end

    RubyCocoaTutorialStep1CreatingTheProject09.png
  10. ...add to the existing Frameworks...
    RubyCocoaTutorialStep1CreatingTheProject10.png
  11. ...the RubyCocoa.framework...
    RubyCocoaTutorialStep1CreatingTheProject11.png
  12. Done! At this time you can already run your application by pressing ⌘-R. It will show an empty window, can be quit and even has an about box. Not bad for zero programming. If you're too lazy to do the above steps, you might want to download this.

Step 02: Adding an AppController

  1. There is still the Objective-C WikipediaAppDelegate class. Let's loose the class files (WikipediaAppDelegate.h and WikiAppDelegate.m)...
    Notice that the WikipediaAppDelegate.h and WikiAppDelegate.m are gone!
  2. ...and create a new file WikipediaAppController.rb...
    WikipediaAppController.rb is new!
  3. ...which we fill with:
####################################
#
#  WikipediaAppController.rb
#
#  Created by Heiko Kretschmer on 2010.
#  Copyright (c) 2010 Heiko Kretschmer. All rights reserved.
#

####################################
# Requirements
require 'osx/cocoa'

############################################################################################################
# DEBUG Settings!				   #                                                                       #
DEBUGAPPCONTROLLER			= TRUE  # -> Set this before deployment to FALSE! <-						   #
############################################################################################################

####################################
# Class "WikipediaAppController"   # 
class WikipediaAppController < OSX::NSObject

####################################
# Includes						   #
include		OSX

####################################
# Outlets                          #
ib_outlets :window
 
####################################
# Globals                          #
$globals = Hash.new

####################################
# Methoden                         #

# AwakeFromNib
def awakeFromNib
 Say("AppCrt: Awaking from nib.")

 # Preferences lesen
 #	Say("AppCrt: Reading preferences...")
 #	preferencesRead()
	
 # Preferences in window anzeigen
 #	Say("AppCrt: Applying preferences...")
 #	preferencesApply()
end # of awakeFromNib

def applicationDidBecomeActive(aNotification)
 Say("didActivate!")
 @window.makeKeyAndOrderFront_(self)
end # didActivate

def applicationWillResignActive(aNotification)
 Say("willDeactivate!")
end # didDeactivate
	
# About Window
#def aboutApp (sender)
#    thisBundle = OSX::NSBundle.mainBundle
#	copyrightString = thisBundle.objectForInfoDictionaryKey("CFBundleGetInfoString")
#	versionString   = thisBundle.objectForInfoDictionaryKey("VersionString")
#	NSApp.orderFrontStandardAboutPanelWithOptions("Copyright" => copyrightString, "ApplicationVersion" => versionString)
#end # aboutApp 
#ib_action :aboutApp

def applicationDidFinishLaunching(notification)
 Say("Application finished launching")
end

# If sent to foreground
def sendToForeground(sender)
 Say("Application coming to front")
 OSX::NSApp.activateIgnoringOtherApps:YES # Verfahren aus Schick geklaut
end

# Will Terminate
def applicationWillTerminate (notification)
 Say("Will terminate.")
end

# Should Terminate
def applicationShouldTerminate (notification)
 Say("Should terminate.")
 #	preferencesWrite()
 return NSTerminateNow
end


###############################################################################
# Private API #################################################################
private
def Say(*args)
 if (DEBUGAPPCONTROLLER==0) then return # Debugging ist aus -> raus hier
 else
  OSX::NSLog(*args)
 end # else !debug
end # Say
 
end # AppController

Step XX: Adding a Webview

Step 03: Setting version infos

Step 04: Application icon


  1. I used XCode 3.2.1 on Mac OS X 10.6 to create this tutorial
  2. As you might have guessed, I prefer british english :-)