juretta-ipt 1.0.7 → 1.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +7 -12
- data/lib/ipt/plist.rb +18 -0
- data/lib/ipt/rake_helper.rb +30 -0
- data/lib/ipt/readme.rb +110 -0
- data/lib/ipt/tag_extraction.rb +60 -0
- data/lib/ipt/version.rb +59 -0
- data/lib/ipt.rb +9 -0
- data/tasks/iphone_tools.rake +82 -180
- data/{Rakefile → tasks/rakefile.tmpl} +1 -5
- metadata +19 -11
- data/ipt.gemspec +0 -19
data/README.md
CHANGED
@@ -16,7 +16,7 @@ Installation
|
|
16
16
|
2. Adde the following lines to your Rakefile:
|
17
17
|
|
18
18
|
require 'rubygems'
|
19
|
-
gem 'ipt'
|
19
|
+
gem 'juretta-ipt'
|
20
20
|
load 'iphone_tools.rake'
|
21
21
|
|
22
22
|
CLANG
|
@@ -52,10 +52,7 @@ to show the available tasks:
|
|
52
52
|
rake ipt:clean # Clean build artifacts
|
53
53
|
rake ipt:dist:info # Info
|
54
54
|
rake ipt:dist:show # Show all bundle identifier
|
55
|
-
|
56
|
-
rake ipt:optimize_images # Reduce image filesize using pngcrush
|
57
|
-
rake ipt:readme # Create README.html from existing README.* text file (markdown, textile, rdoc support).
|
58
|
-
rake ipt:todo # List TODO|FIXME|IMPROVE tags
|
55
|
+
[...]
|
59
56
|
|
60
57
|
|
61
58
|
Static code analysis
|
@@ -100,7 +97,7 @@ Unit testing with rbiphonetest
|
|
100
97
|
------------------------------
|
101
98
|
|
102
99
|
This is not included in this Rakefile. Have a look at [rbiphonetest][6] if you want to easily test your Foundation classes.
|
103
|
-
The rbiphonetest git repository lives here: (http://github.com/drnic/rbiphonetest/tree/master)
|
100
|
+
The rbiphonetest git repository lives here: [http://github.com/drnic/rbiphonetest/tree/master](http://github.com/drnic/rbiphonetest/tree/master)
|
104
101
|
|
105
102
|
[6]: http://drnicwilliams.com/2008/07/04/unit-testing-iphone-apps-with-ruby-rbiphonetest/
|
106
103
|
|
@@ -151,7 +148,7 @@ I use the following workflow to set version numbers for my Xcode project:
|
|
151
148
|
|
152
149
|
1. tag the current release snapshot using
|
153
150
|
|
154
|
-
git tag 1.0.1
|
151
|
+
git tag -a -m "Tagging current version as 1.0.1" 1.0.1
|
155
152
|
|
156
153
|
You can list all you tags using:
|
157
154
|
|
@@ -159,14 +156,12 @@ I use the following workflow to set version numbers for my Xcode project:
|
|
159
156
|
|
160
157
|
To check which tag is going to be used as you version numer use:
|
161
158
|
|
162
|
-
git describe --tags
|
163
|
-
2. run Xcode build with the script that follows (which basically uses 'git describe --tags' to determine the most recent tag that is reachable from a commit)
|
159
|
+
git describe --tags --always
|
160
|
+
2. run Xcode build with the script that follows (which basically uses 'git describe --tags --always' to determine the most recent tag that is reachable from a commit)
|
164
161
|
3. check CFBundleVersion value in all build artifacts using the rake task 'dist:show'
|
165
162
|
|
166
163
|
rake ipt:dist:show
|
167
164
|
|
168
|
-
|
169
|
-
|
170
165
|
In Xcode add a new script build phase:
|
171
166
|
Targets > Add > New Build Phase > New Run Script Build Phase
|
172
167
|
|
@@ -193,7 +188,7 @@ executable.
|
|
193
188
|
if File.file?(PLIST_FILE)
|
194
189
|
pl = Plist::parse_xml(PLIST_FILE)
|
195
190
|
if pl
|
196
|
-
pl["CFBundleVersion"] = `#{GIT}
|
191
|
+
pl["CFBundleVersion"] = `#{GIT} describe --tags --always`.to_s
|
197
192
|
pl.save_plist(PLIST_FILE)
|
198
193
|
end
|
199
194
|
end
|
data/lib/ipt/plist.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module IPT
|
2
|
+
|
3
|
+
module Plist
|
4
|
+
class Parser
|
5
|
+
def initialize(path)
|
6
|
+
if File.file?(path)
|
7
|
+
type = `file '#{path}'`
|
8
|
+
@xml = type =~ /Apple binary property list/ ? `plutil -convert xml1 -o - '#{path}'` : path
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse
|
13
|
+
Plist::parse_xml(@xml) if @xml
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module RakeHelper
|
4
|
+
# Tries to determine the absolute path to the given binary.
|
5
|
+
def find_binary(name)
|
6
|
+
ENV["PATH"].split(":").each do |dir| # we are on a mac anyway
|
7
|
+
path = File.join(dir, name)
|
8
|
+
if File.executable?(path)
|
9
|
+
puts "Found '#{name}' in #{dir}" if $DEBUG
|
10
|
+
return File.expand_path(path)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
raise "Unable to find #{name} in the system PATH. Add /path/to/#{name} to your $PATH"
|
14
|
+
end
|
15
|
+
|
16
|
+
def find_current_project_name
|
17
|
+
# Run xcodebuile in the current directory
|
18
|
+
info = `xcodebuild -list`
|
19
|
+
if info =~ /Targets:(.*?)Build Configurations/m
|
20
|
+
return $1.dup.gsub(/\(Active\)/, '').strip
|
21
|
+
end
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def resolve_tag
|
26
|
+
last_tag = `#{GIT} describe --tags --always`
|
27
|
+
last_tag = last_tag.split('-').first if last_tag =~ /-/
|
28
|
+
IPT::Version.parse(last_tag)
|
29
|
+
end
|
30
|
+
end
|
data/lib/ipt/readme.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
module IPT
|
2
|
+
|
3
|
+
|
4
|
+
module README
|
5
|
+
|
6
|
+
class AbstractFormatter
|
7
|
+
def self.supports(ext)
|
8
|
+
return supported_formats.include?(ext)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class PlainFormatter < AbstractFormatter
|
13
|
+
def self.supported_formats
|
14
|
+
%w(txt)
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_html(input)
|
18
|
+
input
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class MarkdownFormatter < AbstractFormatter
|
23
|
+
def self.supported_formats
|
24
|
+
%w(md markdown)
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
begin
|
29
|
+
require 'bluecloth'
|
30
|
+
rescue LoadError => e
|
31
|
+
puts "The bluecloth gem is required if you want to create HTML Readme files."
|
32
|
+
puts "Install using: sudo gem install BlueCloth"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_html(input)
|
37
|
+
BlueCloth.new(input).to_html
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class TextileFormatter < AbstractFormatter
|
42
|
+
def self.supported_formats
|
43
|
+
%w(text textile)
|
44
|
+
end
|
45
|
+
|
46
|
+
def initialize
|
47
|
+
begin
|
48
|
+
require 'RedCloth'
|
49
|
+
rescue LoadError => e
|
50
|
+
puts "The RedCloth gem is required if you want to create HTML Readme files."
|
51
|
+
puts "Install using: sudo gem install RedCloth"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_html(input)
|
56
|
+
RedCloth.new(input).to_html
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class RdocFormatter < AbstractFormatter
|
61
|
+
def self.supported_formats
|
62
|
+
%w(rdoc)
|
63
|
+
end
|
64
|
+
|
65
|
+
def initialize
|
66
|
+
require 'rdoc/markup/simple_markup'
|
67
|
+
require 'rdoc/markup/simple_markup/to_html'
|
68
|
+
end
|
69
|
+
|
70
|
+
def to_html(input)
|
71
|
+
p = SM::SimpleMarkup.new
|
72
|
+
h = SM::ToHtml.new
|
73
|
+
p.convert(input, h)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class Formatter
|
78
|
+
PATTERN = "README.{text,textile,rdoc,md,markdown}"
|
79
|
+
FORMATTER = [MarkdownFormatter, TextileFormatter, RdocFormatter]
|
80
|
+
def initialize(root_dir)
|
81
|
+
@dir = root_dir
|
82
|
+
end
|
83
|
+
|
84
|
+
def find_readme
|
85
|
+
Dir["#{@dir}/#{PATTERN}"].first
|
86
|
+
end
|
87
|
+
|
88
|
+
def find_formatter(file)
|
89
|
+
ext = file.split(/\./).last
|
90
|
+
FORMATTER.each do |f|
|
91
|
+
if f.supports(ext)
|
92
|
+
return f
|
93
|
+
end
|
94
|
+
end
|
95
|
+
PlainFormatter # Default formatter
|
96
|
+
end
|
97
|
+
|
98
|
+
def to_html
|
99
|
+
readme_file = find_readme
|
100
|
+
if readme_file && File.file?(readme_file)
|
101
|
+
File.open("readme.html", "w") do |f|
|
102
|
+
f << find_formatter(readme_file).new.to_html(IO.readlines(readme_file).join)
|
103
|
+
end
|
104
|
+
else
|
105
|
+
puts "No #{PATTERN}s file could be found."
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end # class Formatter
|
109
|
+
end # module README
|
110
|
+
end # module IPT
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module IPT
|
2
|
+
|
3
|
+
class TagExtraction
|
4
|
+
def grep(pattern, ignore = /Auto-generated/)
|
5
|
+
output = []
|
6
|
+
formatter = Formatter.new
|
7
|
+
traverse do |file|
|
8
|
+
count, match, buffer = 0, false, []
|
9
|
+
open(file) do |f|
|
10
|
+
while line = f.gets
|
11
|
+
count += 1
|
12
|
+
if line =~ pattern && line !~ ignore
|
13
|
+
match = true
|
14
|
+
buffer << "#{count.to_s.rjust(8)}: #{line.strip}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
if match
|
18
|
+
output << "\n#{formatter.yellow(file)}"
|
19
|
+
output << buffer.join("\n")
|
20
|
+
output << "\n"
|
21
|
+
formatter.reset!
|
22
|
+
end
|
23
|
+
match = false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
output.join("\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
def traverse
|
30
|
+
Dir['**/*.{m,h,txt,md,markdown,rdoc,text}'].each do |fn|
|
31
|
+
yield fn
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end # TagExtraction
|
35
|
+
|
36
|
+
class Formatter
|
37
|
+
def initialize
|
38
|
+
reset!
|
39
|
+
end
|
40
|
+
|
41
|
+
def yellow(txt)
|
42
|
+
@buffer << "\033[33m#{txt}\033[0m"
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
def clear(txt)
|
47
|
+
@buffer << txt
|
48
|
+
self
|
49
|
+
end
|
50
|
+
|
51
|
+
def reset!
|
52
|
+
@buffer = []
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_s
|
56
|
+
@buffer.join('')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
data/lib/ipt/version.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
module IPT
|
2
|
+
# Basic version implementation
|
3
|
+
#
|
4
|
+
# A version has one of the following forms:
|
5
|
+
#
|
6
|
+
# * MAJOR
|
7
|
+
# * MAJOR.MINOR
|
8
|
+
# * MAJOR.MINOR.PATCH
|
9
|
+
# * MAJOR.MINOR.PATCH.BUILD
|
10
|
+
#
|
11
|
+
# = Usage
|
12
|
+
#
|
13
|
+
# version = Version.parse("2.3.9")
|
14
|
+
# version.major # => 2
|
15
|
+
#
|
16
|
+
# puts version # => "2.3.9"
|
17
|
+
class Version
|
18
|
+
class << self
|
19
|
+
def parse(str)
|
20
|
+
raise ArgumentError.new("Invalid version string: #{str}") unless str && str =~ /[0-9]+(\.[0-9]+)?/
|
21
|
+
Version.new(*str.split("."))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
PARTS = [:major, :minor, :patch, :build]
|
26
|
+
|
27
|
+
PARTS.each {|p| attr_accessor p}
|
28
|
+
|
29
|
+
def initialize(major, minor = nil, patch = nil, build = nil)
|
30
|
+
@major, @minor, @patch, @build = major.to_i, minor ? minor.to_i : nil, patch ? patch.to_i : nil, build ? build.to_i : nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def increase!(what = nil)
|
34
|
+
change(what){|old| old + 1}
|
35
|
+
end
|
36
|
+
|
37
|
+
def decrease!(what = nil)
|
38
|
+
change(what){|old| old - 1}
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_s
|
42
|
+
PARTS.map{|part| self.send(part)}.join('.')
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
def change(what, &op)
|
47
|
+
unless what
|
48
|
+
what = :major if @major
|
49
|
+
what = :minor if @minor
|
50
|
+
what = :patch if @patch
|
51
|
+
what = :build if @build
|
52
|
+
end
|
53
|
+
raise ArgumentError("Invalid version part") unless PARTS.include?(what)
|
54
|
+
self.send("#{what}=", yield(self.send(what)))
|
55
|
+
self
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
data/lib/ipt.rb
ADDED
data/tasks/iphone_tools.rake
CHANGED
@@ -1,22 +1,20 @@
|
|
1
1
|
# Author Stefan Saasen (coravy.com)
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
|
+
require 'rubygems'
|
5
|
+
require 'ipt'
|
4
6
|
include FileUtils
|
5
7
|
|
6
8
|
BUILD_DIR = "./build"
|
9
|
+
API_DOC_DIR = "./docs"
|
7
10
|
|
11
|
+
# Name of the AdHoc configuration in Xcode
|
12
|
+
ADHOC_CONFIGURATION_NAME = 'Distribution (AdHoc)'
|
8
13
|
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
if File.executable?(path)
|
14
|
-
puts "Found '#{name}' in #{dir}" if $DEBUG
|
15
|
-
return File.expand_path(path)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
raise "Unable to find #{name} in the system PATH. Add /path/to/#{name} to your $PATH"
|
19
|
-
end
|
14
|
+
# Directory for release archive files (tar.gz)
|
15
|
+
RELEASES_DIR = "../releases"
|
16
|
+
|
17
|
+
ADHOC_PROVISION_FILE = "fail"
|
20
18
|
|
21
19
|
module Kernel
|
22
20
|
def with(binary)
|
@@ -28,191 +26,90 @@ module Kernel
|
|
28
26
|
end
|
29
27
|
end
|
30
28
|
|
31
|
-
|
29
|
+
include RakeHelper
|
32
30
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def parse
|
43
|
-
Plist::parse_xml(@xml) if @xml
|
44
|
-
end
|
31
|
+
namespace :ipt do
|
32
|
+
|
33
|
+
namespace :doc do
|
34
|
+
desc "Generate api docs (using headerdoc) in #{API_DOC_DIR}"
|
35
|
+
task :app do
|
36
|
+
sh "headerdoc2html -u -t -o #{API_DOC_DIR} ./Classes"
|
37
|
+
sh "gatherheaderdoc #{API_DOC_DIR} index.html"
|
45
38
|
end
|
46
39
|
end
|
47
|
-
|
48
|
-
module README
|
49
40
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
41
|
+
namespace :adhoc do
|
42
|
+
#desc "Create an AdHoc distriution build"
|
43
|
+
task :build => :prepare do
|
44
|
+
rm_r BUILD_DIR if File.directory?(BUILD_DIR)
|
45
|
+
target = find_current_project_name
|
46
|
+
sh "xcodebuild -target '#{target}' -configuration '#{ADHOC_CONFIGURATION_NAME}'"
|
54
47
|
end
|
55
48
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
def to_html(input)
|
62
|
-
input
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
class MarkdownFormatter < AbstractFormatter
|
67
|
-
def self.supported_formats
|
68
|
-
%w(md markdown)
|
69
|
-
end
|
70
|
-
|
71
|
-
def initialize
|
72
|
-
begin
|
73
|
-
require 'bluecloth'
|
74
|
-
rescue LoadError => e
|
75
|
-
puts "The bluecloth gem is required if you want to create HTML Readme files."
|
76
|
-
puts "Install using: sudo gem install BlueCloth"
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def to_html(input)
|
81
|
-
BlueCloth.new(input).to_html
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
class TextileFormatter < AbstractFormatter
|
86
|
-
def self.supported_formats
|
87
|
-
%w(text textile)
|
88
|
-
end
|
89
|
-
|
90
|
-
def initialize
|
91
|
-
begin
|
92
|
-
require 'RedCloth'
|
93
|
-
rescue LoadError => e
|
94
|
-
puts "The RedCloth gem is required if you want to create HTML Readme files."
|
95
|
-
puts "Install using: sudo gem install RedCloth"
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def to_html(input)
|
100
|
-
RedCloth.new(input).to_html
|
101
|
-
end
|
49
|
+
#desc "Inject version into source"
|
50
|
+
task :inject do
|
51
|
+
# NOOP - can be overriden
|
102
52
|
end
|
53
|
+
|
54
|
+
# The Adhoc build depends on git
|
55
|
+
with('git') do
|
56
|
+
#desc "Prepare a release"
|
57
|
+
task :prepare => :inject do
|
58
|
+
last_tag = resolve_tag
|
59
|
+
puts "Previous tag: #{last_tag}"
|
60
|
+
NEW_TAG = last_tag.increase!.to_s
|
61
|
+
puts "New tag/version: #{NEW_TAG}"
|
62
|
+
|
63
|
+
# Info.plist
|
64
|
+
PLIST_FILE = File.join(Dir.pwd, "Info.plist")
|
65
|
+
if File.file?(PLIST_FILE)
|
66
|
+
pl = Plist::parse_xml(PLIST_FILE)
|
67
|
+
if pl
|
68
|
+
pl["CFBundleVersion"] = NEW_TAG
|
69
|
+
pl.save_plist(PLIST_FILE)
|
70
|
+
end
|
71
|
+
end
|
103
72
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
require 'rdoc/markup/simple_markup'
|
111
|
-
require 'rdoc/markup/simple_markup/to_html'
|
73
|
+
# Commit changes
|
74
|
+
`#{GIT} add #{PLIST_FILE}`
|
75
|
+
`#{GIT} commit -m "Preparing release for version '#{NEW_TAG}'."`
|
76
|
+
|
77
|
+
# Tag new release
|
78
|
+
`#{GIT} tag -a -m "Preparing release for version '#{NEW_TAG}'." #{NEW_TAG}`
|
112
79
|
end
|
113
80
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
def find_readme
|
129
|
-
Dir["#{@dir}/#{PATTERN}"].first
|
130
|
-
end
|
81
|
+
desc "Create an Ad-Hoc bundle in #{RELEASES_DIR} based on the current git tag"
|
82
|
+
task :release => :build do
|
83
|
+
target = find_current_project_name
|
84
|
+
src = File.join(BUILD_DIR, "#{ADHOC_CONFIGURATION_NAME}-iphoneos", "#{target}.app")
|
85
|
+
raise "Release build does not exist" unless File.directory?(src)
|
86
|
+
raise "Invalid provision file" unless File.file?(ADHOC_PROVISION_FILE)
|
87
|
+
dir_name = `#{GIT} describe --tags --always`.strip
|
88
|
+
path = File.expand_path(File.join(RELEASES_DIR, "#{dir_name}-adhoc"))
|
89
|
+
rm_r path if File.directory?(path)
|
90
|
+
mkdir_p path
|
91
|
+
|
92
|
+
current_tag = resolve_tag
|
93
|
+
previous_tag = current_tag.dup.decrease!
|
131
94
|
|
132
|
-
|
133
|
-
ext = file.split(/\./).last
|
134
|
-
FORMATTER.each do |f|
|
135
|
-
if f.supports(ext)
|
136
|
-
return f
|
137
|
-
end
|
138
|
-
end
|
139
|
-
PlainFormatter # Default formatter
|
140
|
-
end
|
95
|
+
puts "Creating changelog.txt (#{previous_tag} -> #{current_tag})"
|
141
96
|
|
142
|
-
|
143
|
-
|
144
|
-
if readme_file && File.file?(readme_file)
|
145
|
-
File.open("readme.html", "w") do |f|
|
146
|
-
f << find_formatter(readme_file).new.to_html(IO.readlines(readme_file).join)
|
147
|
-
end
|
148
|
-
else
|
149
|
-
puts "No #{PATTERN}s file could be found."
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end # class Formatter
|
153
|
-
end # module Formatter
|
97
|
+
`echo 'Changelog: #{previous_tag} -> #{current_tag}\n' > #{path}/changelog.txt`
|
98
|
+
`#{GIT} log --abbrev-commit --pretty=medium #{previous_tag}..#{current_tag} >> #{path}/changelog.txt`
|
154
99
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
count += 1
|
163
|
-
if line =~ pattern && line !~ ignore
|
164
|
-
match = true
|
165
|
-
buffer << "#{count.to_s.rjust(8)}: #{line.strip}"
|
166
|
-
end
|
167
|
-
end
|
168
|
-
if match
|
169
|
-
puts "\n#{formatter.yellow(file)}"
|
170
|
-
puts buffer.join("\n")
|
171
|
-
puts "\n"
|
172
|
-
formatter.reset!
|
173
|
-
end
|
174
|
-
match = false
|
175
|
-
end
|
100
|
+
puts "Copying provision file..."
|
101
|
+
cp ADHOC_PROVISION_FILE, path
|
102
|
+
|
103
|
+
puts "Copying application"
|
104
|
+
cp_r src, path
|
105
|
+
puts 'Creating tar.gz'
|
106
|
+
`tar czf #{RELEASES_DIR}/#{dir_name}.tgz -C #{path} .`
|
176
107
|
end
|
177
108
|
end
|
178
109
|
|
179
|
-
def traverse
|
180
|
-
Dir['**/*.{m,h,txt,md,markdown,rdoc,text}'].each do |fn|
|
181
|
-
yield fn
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end # TagExtraction
|
185
|
-
|
186
|
-
class Formatter
|
187
|
-
def initialize
|
188
|
-
reset!
|
189
|
-
end
|
190
|
-
|
191
|
-
def yellow(txt)
|
192
|
-
@buffer << "\033[33m#{txt}\033[0m"
|
193
|
-
self
|
194
|
-
end
|
195
|
-
|
196
|
-
def clear(txt)
|
197
|
-
@buffer << txt
|
198
|
-
self
|
199
|
-
end
|
200
|
-
|
201
|
-
def reset!
|
202
|
-
@buffer = []
|
203
|
-
end
|
204
|
-
|
205
|
-
def to_s
|
206
|
-
@buffer.join('')
|
207
|
-
end
|
208
110
|
end
|
209
111
|
|
210
|
-
|
211
|
-
|
212
|
-
namespace :ipt do
|
213
|
-
|
214
|
-
namespace :dist do
|
215
|
-
|
112
|
+
namespace :dist do
|
216
113
|
desc "Show all bundle identifier"
|
217
114
|
task :show do
|
218
115
|
puts "No build artifacts" unless File.directory?(BUILD_DIR)
|
@@ -245,12 +142,12 @@ namespace :ipt do
|
|
245
142
|
|
246
143
|
desc "Reduce image filesize using pngcrush"
|
247
144
|
task :optimize_images do
|
248
|
-
puts "PNG image optimization is not necessary as Xcode will optimize PNG files during the build phase.\nThis target is deprecated and will be
|
145
|
+
puts "PNG image optimization is not necessary as Xcode will optimize PNG files during the build phase.\nThis target is deprecated and will be removed in future releases."
|
249
146
|
end
|
250
147
|
|
251
148
|
desc "List TODO|FIXME|IMPROVE tags"
|
252
149
|
task :todo do
|
253
|
-
IPT::TagExtraction.new.grep(/TODO|FIXME|IMPROVE/i)
|
150
|
+
print IPT::TagExtraction.new.grep(/TODO|FIXME|IMPROVE/i)
|
254
151
|
end
|
255
152
|
|
256
153
|
desc "Create README.html from existing README.* text file (markdown, textile, rdoc support)."
|
@@ -280,6 +177,11 @@ namespace :ipt do
|
|
280
177
|
|
281
178
|
with('git') do
|
282
179
|
namespace :git do
|
180
|
+
desc "Create a .gitignore file or add XCode related ignore pattern to your existing .gitignore file."
|
181
|
+
task :ignore do
|
182
|
+
raise "Implement"
|
183
|
+
end
|
184
|
+
|
283
185
|
desc "Create a changelog (doc/changelog.html and doc/changelog.xml) based on your git commits."
|
284
186
|
task :changelog do
|
285
187
|
require 'time'
|
@@ -1,9 +1,8 @@
|
|
1
1
|
#
|
2
|
-
# Author Stefan Saasen (coravy.com)
|
3
2
|
#
|
4
3
|
# ============== Load rake tasks ================
|
5
4
|
Dir['tasks/**/*.rake'].each { |rake| load rake }
|
6
|
-
|
5
|
+
|
7
6
|
# or (if you've installed the ipt gem)
|
8
7
|
# require 'rubygems'
|
9
8
|
# gem 'ipt'
|
@@ -11,6 +10,3 @@ Dir['tasks/**/*.rake'].each { |rake| load rake }
|
|
11
10
|
|
12
11
|
# =========== Your custom rake tasks ============
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: juretta-ipt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Saasen
|
@@ -9,12 +9,12 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-03-02 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description: Useful rake tasks and scripts for iPhone development using Xcode.
|
17
|
-
email:
|
16
|
+
description: Useful rake tasks and scripts for iPhone development using Xcode. Some tasks rely on external software. Please read the installation instructions. The scm related tasks assume that you are using git. You can just ignore those tasks and scripts if you are using a different scm.
|
17
|
+
email: stefan@coravy.com
|
18
18
|
executables: []
|
19
19
|
|
20
20
|
extensions: []
|
@@ -22,17 +22,25 @@ extensions: []
|
|
22
22
|
extra_rdoc_files:
|
23
23
|
- README.md
|
24
24
|
files:
|
25
|
-
-
|
26
|
-
-
|
27
|
-
- ipt.
|
25
|
+
- lib/ipt
|
26
|
+
- lib/ipt/plist.rb
|
27
|
+
- lib/ipt/rake_helper.rb
|
28
|
+
- lib/ipt/readme.rb
|
29
|
+
- lib/ipt/tag_extraction.rb
|
30
|
+
- lib/ipt/version.rb
|
31
|
+
- lib/ipt.rb
|
28
32
|
- tasks/changelog.tmpl
|
29
33
|
- tasks/iphone_tools.rake
|
30
|
-
|
34
|
+
- tasks/rakefile.tmpl
|
35
|
+
- README.md
|
36
|
+
has_rdoc: true
|
31
37
|
homepage: http://github.com/juretta/iphone-project-tools
|
32
38
|
post_install_message:
|
33
|
-
rdoc_options:
|
34
|
-
|
39
|
+
rdoc_options:
|
40
|
+
- --inline-source
|
41
|
+
- --charset=UTF-8
|
35
42
|
require_paths:
|
43
|
+
- lib
|
36
44
|
- tasks
|
37
45
|
required_ruby_version: !ruby/object:Gem::Requirement
|
38
46
|
requirements:
|
@@ -52,6 +60,6 @@ rubyforge_project:
|
|
52
60
|
rubygems_version: 1.2.0
|
53
61
|
signing_key:
|
54
62
|
specification_version: 2
|
55
|
-
summary: iPhone
|
63
|
+
summary: Useful rake tasks and scripts for iPhone development using Xcode.
|
56
64
|
test_files: []
|
57
65
|
|
data/ipt.gemspec
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
Gem::Specification.new do |s|
|
2
|
-
s.name = "ipt"
|
3
|
-
s.version = "1.0.7"
|
4
|
-
s.date = "2008-11-21"
|
5
|
-
s.summary = "iPhone Project Tools"
|
6
|
-
s.email = "s@juretta.com"
|
7
|
-
s.homepage = "http://github.com/juretta/iphone-project-tools"
|
8
|
-
s.description = "Useful rake tasks and scripts for iPhone development using Xcode."
|
9
|
-
s.has_rdoc = false
|
10
|
-
s.require_path = 'tasks'
|
11
|
-
s.authors = ["Stefan Saasen"]
|
12
|
-
s.files = [
|
13
|
-
"README.md",
|
14
|
-
"Rakefile",
|
15
|
-
"ipt.gemspec",
|
16
|
-
"tasks/changelog.tmpl",
|
17
|
-
"tasks/iphone_tools.rake"]
|
18
|
-
s.extra_rdoc_files = ["README.md"]
|
19
|
-
end
|