Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Tree: 219db37ede
Fetching contributors…

Cannot retrieve contributors at this time

161 lines (133 sloc) 4.242 kB
# -*- mode:ruby; indent-tabs-mode:nil; coding:utf-8 -*-
# vim:ts=2:sw=2:expandtab:
require 'rubygems'
require 'rake'
require 'rake/clean'
require 'rake/testtask'
require 'pathname'
# Application own Settings
APPNAME = "GitNub"
TARGET = "#{APPNAME}.app"
#APPVERSION = "rev#{`svn info`[/Revision: (\d+)/, 1]}"
APPVERSION = Time.now.strftime("%Y-%m-%d")
PUBLISH = 'yourname@yourhost:path'
DEFAULT_TARGET = APPNAME
DEFAULT_CONFIGURATION = 'Release'
RELEASE_CONFIGURATION = 'Release'
# Tasks
task :default => [:run]
task :launch do
sh %{open "build/Release/#{APPNAME}.app"}
end
desc "Build the default and run it."
task :run => [:build] do
sh %{open "build/Release/#{APPNAME}.app"}
end
desc 'Build the default target using the default configuration'
task :build => "xcode:build:#{DEFAULT_TARGET}:#{DEFAULT_CONFIGURATION}"
desc 'Deep clean of everything'
task :clean do
puts %x{ xcodebuild -alltargets clean }
end
desc "Add files to Xcode project"
task :add do |t|
files = ARGV[1..-1]
project = %x{ xcodebuild -list }[/Information about project "([^"]+)":/, 1]
files << "#{project}.xcodeproj"
exec("rubycocoa", "add", *files)
end
desc "Create ruby skelton and add to Xcode project"
task :create do |t|
args = ARGV[1..-1]
if system("rubycocoa", "create", *args)
project = %x{ xcodebuild -list }[/Information about project "([^"]+)":/, 1]
exec("rubycocoa", "add", args.last + ".rb", "#{project}.xcodeproj")
end
end
desc "Update nib with ruby file"
task :update do |t|
args = ARGV[1..-1]
args.unshift("English.lproj/MainMenu.nib")
exec("rubycocoa", "update", *args)
end
desc "Package the application"
task :package => ["xcode:build:#{DEFAULT_TARGET}:#{RELEASE_CONFIGURATION}", "pkg"] do
name = "#{APPNAME}.#{APPVERSION}"
mkdir "image"
sh %{rubycocoa standaloneify "build/#{DEFAULT_CONFIGURATION}/#{APPNAME}.app" "image/#{APPNAME}.app"}
puts 'Creating Image...'
sh %{
hdiutil create -volname '#{name}' -srcfolder image '#{name}'.dmg
rm -rf image
mv '#{name}.dmg' pkg
}
end
directory 'pkg'
desc 'Make Localized nib from English.lproj and Lang.lproj/nib.strings'
rule(/.nib$/ => [proc {|tn| File.dirname(tn) + '/nib.strings' }]) do |t|
p t.name
lproj = File.dirname(t.name)
target = File.basename(t.name)
rm_rf t.name
sh %{
nibtool -d #{lproj}/nib.strings -w #{t.name} English.lproj/#{target}
}
end
# [Rubycocoa-devel 906] dynamically xcode rake tasks
# [Rubycocoa-devel 907]
#
def xcode_targets
out = %x{ xcodebuild -list }
out.scan(/.*Targets:\s+(.*)Build Configurations:.*/m)
targets = []
$1.each_line do |l|
l = l.strip.sub(' (Active)', '')
targets << l unless l.nil? or l.empty?
end
targets
end
def xcode_configurations
out = %x{ xcodebuild -list }
out.scan(/.*Build Configurations:\s+(.*)If no build configuration.*/m)
configurations = []
$1.each_line do |l|
l = l.strip.sub(' (Active)', '')
configurations << l unless l.nil? or l.empty?
end
configurations
end
namespace :xcode do
targets = xcode_targets
configs = xcode_configurations
%w{build clean}.each do |action|
namespace "#{action}" do
targets.each do |target|
desc "#{action} #{target}"
task "#{target}" do |t|
puts %x{ xcodebuild -target '#{target}' #{action} }
end
# alias the task above using a massaged name
massaged_target = target.downcase.gsub(/[\s*|\-]/, '_')
task "#{massaged_target}" => "xcode:#{action}:#{target}"
namespace "#{target}" do
configs.each do |config|
desc "#{action} #{target} #{config}"
task "#{config}" do |t|
puts %x{ xcodebuild -target '#{target}' -configuration '#{config}' #{action} }
end
end
end
# namespace+task aliases of the above using massaged names
namespace "#{massaged_target}" do
configs.each { |conf| task "#{conf.downcase.gsub(/[\s*|\-]/, '_')}" => "xcode:#{action}:#{target}:#{conf}" }
end
end
end
end
end
if ["update", "add", "create"].include? ARGV[0]
# dupe rake
ARGV.map! {|a| a.sub(/^\+/, "-") }
Rake.application[ARGV[0].to_sym].invoke
exit # will not reach
end
Jump to Line
Something went wrong with that request. Please try again.