ios-box 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/Gemfile +3 -17
- data/Gemfile.lock +11 -24
- data/Rakefile +2 -58
- data/bin/ios-box +7 -0
- data/ios-box.gemspec +17 -99
- data/lib/ios-box.rb +7 -1
- data/lib/ios-box/cli.rb +96 -0
- data/lib/ios-box/config.rb +23 -0
- data/lib/ios-box/iosbox.rb +235 -0
- data/lib/ios-box/tasks.rb +23 -0
- data/lib/ios-box/tools.rb +11 -0
- data/lib/ios-box/tools/build.rb +62 -0
- data/lib/ios-box/tools/version.rb +33 -0
- data/lib/ios-box/version.rb +5 -0
- metadata +61 -197
- data/dump +0 -0
- data/lib/build_cache.rb +0 -44
- data/patch +0 -1
data/.gitignore
ADDED
data/Gemfile
CHANGED
@@ -1,18 +1,4 @@
|
|
1
|
-
source
|
2
|
-
# Add dependencies required to use your gem here.
|
3
|
-
# Example:
|
4
|
-
# gem "activesupport", ">= 2.3.5"
|
1
|
+
source 'http://rubygems.org'
|
5
2
|
|
6
|
-
gem
|
7
|
-
|
8
|
-
gem "plist"
|
9
|
-
gem "grit"
|
10
|
-
|
11
|
-
# Add dependencies to develop your gem here.
|
12
|
-
# Include everything needed to run rake, tests, features, etc.
|
13
|
-
group :development do
|
14
|
-
gem "rspec", "~> 2.3.0"
|
15
|
-
gem "bundler", "~> 1.0.0"
|
16
|
-
gem "jeweler", "~> 1.5.2"
|
17
|
-
gem "rcov", ">= 0"
|
18
|
-
end
|
3
|
+
# Specify your gem's dependencies in ios-box.gemspec
|
4
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,37 +1,24 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
ios-box (0.0.1)
|
5
|
+
grit
|
6
|
+
plist
|
7
|
+
thor
|
8
|
+
|
1
9
|
GEM
|
2
10
|
remote: http://rubygems.org/
|
3
11
|
specs:
|
4
|
-
diff-lcs (1.1.
|
5
|
-
git (1.2.5)
|
12
|
+
diff-lcs (1.1.3)
|
6
13
|
grit (2.4.1)
|
7
14
|
diff-lcs (~> 1.1)
|
8
15
|
mime-types (~> 1.15)
|
9
|
-
jeweler (1.5.2)
|
10
|
-
bundler (~> 1.0.0)
|
11
|
-
git (>= 1.2.5)
|
12
|
-
rake
|
13
16
|
mime-types (1.16)
|
14
|
-
pbxproject (0.1.0)
|
15
17
|
plist (3.1.0)
|
16
|
-
|
17
|
-
rcov (0.9.9)
|
18
|
-
rspec (2.3.0)
|
19
|
-
rspec-core (~> 2.3.0)
|
20
|
-
rspec-expectations (~> 2.3.0)
|
21
|
-
rspec-mocks (~> 2.3.0)
|
22
|
-
rspec-core (2.3.1)
|
23
|
-
rspec-expectations (2.3.0)
|
24
|
-
diff-lcs (~> 1.1.2)
|
25
|
-
rspec-mocks (2.3.0)
|
18
|
+
thor (0.14.6)
|
26
19
|
|
27
20
|
PLATFORMS
|
28
21
|
ruby
|
29
22
|
|
30
23
|
DEPENDENCIES
|
31
|
-
|
32
|
-
grit
|
33
|
-
jeweler (~> 1.5.2)
|
34
|
-
pbxproject
|
35
|
-
plist
|
36
|
-
rcov
|
37
|
-
rspec (~> 2.3.0)
|
24
|
+
ios-box!
|
data/Rakefile
CHANGED
@@ -1,58 +1,2 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
require 'rake'
|
11
|
-
|
12
|
-
require 'jeweler'
|
13
|
-
Jeweler::Tasks.new do |gem|
|
14
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
|
-
gem.name = "ios-box"
|
16
|
-
gem.homepage = "http://github.com/owl-foresty/ios-box"
|
17
|
-
gem.license = "MIT"
|
18
|
-
gem.summary = %Q{Automates some common tasks in iOS development}
|
19
|
-
gem.description = %Q{ios-box offers automation and easy tasks for some most common tasks in iOS development.}
|
20
|
-
gem.email = "mikko.kokkonen@me.com"
|
21
|
-
gem.authors = ["Mikko Kokkonen"]
|
22
|
-
|
23
|
-
gem.files.include %w(lib/**/*.rb)
|
24
|
-
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
25
|
-
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
26
|
-
gem.add_runtime_dependency 'pbxproject', '>=0.1.4'
|
27
|
-
gem.add_runtime_dependency 'plist'
|
28
|
-
gem.add_runtime_dependency 'grit'
|
29
|
-
|
30
|
-
gem.add_development_dependency 'rspec', '> 1.2.3'
|
31
|
-
gem.add_development_dependency 'pbxproject', '>=0.1.4'
|
32
|
-
gem.add_development_dependency 'grit'
|
33
|
-
gem.add_development_dependency 'plist'
|
34
|
-
end
|
35
|
-
Jeweler::RubygemsDotOrgTasks.new
|
36
|
-
|
37
|
-
require 'rspec/core'
|
38
|
-
require 'rspec/core/rake_task'
|
39
|
-
RSpec::Core::RakeTask.new(:spec) do |spec|
|
40
|
-
spec.pattern = FileList['spec/**/*_spec.rb']
|
41
|
-
end
|
42
|
-
|
43
|
-
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
44
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
45
|
-
spec.rcov = true
|
46
|
-
end
|
47
|
-
|
48
|
-
task :default => :spec
|
49
|
-
|
50
|
-
require 'rake/rdoctask'
|
51
|
-
Rake::RDocTask.new do |rdoc|
|
52
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
53
|
-
|
54
|
-
rdoc.rdoc_dir = 'rdoc'
|
55
|
-
rdoc.title = "ios-box #{version}"
|
56
|
-
rdoc.rdoc_files.include('README*')
|
57
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
58
|
-
end
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
data/bin/ios-box
ADDED
data/ios-box.gemspec
CHANGED
@@ -1,103 +1,21 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/ios-box/version', __FILE__)
|
5
3
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Mikko Kokkonen"]
|
6
|
+
gem.email = ["mikko@owlforestry.com"]
|
7
|
+
gem.description = %q{Include atuomatic vesion conrol for you XCode projects.}
|
8
|
+
gem.summary = %q{Add handy tools to XCode specially for iOS development}
|
9
|
+
gem.homepage = "https://github.com/owl-forestry/ios-box"
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
".document",
|
21
|
-
".rspec",
|
22
|
-
"Gemfile",
|
23
|
-
"Gemfile.lock",
|
24
|
-
"LICENSE.txt",
|
25
|
-
"README.md",
|
26
|
-
"Rakefile",
|
27
|
-
"VERSION",
|
28
|
-
"dump",
|
29
|
-
"ios-box.gemspec",
|
30
|
-
"lib/build_cache.rb",
|
31
|
-
"lib/ios-box.rb",
|
32
|
-
"lib/ios_box.rb",
|
33
|
-
"patch",
|
34
|
-
"spec/build_cache_spec.rb",
|
35
|
-
"spec/ios-box_spec.rb",
|
36
|
-
"spec/spec_helper.rb"
|
37
|
-
]
|
38
|
-
s.homepage = %q{http://github.com/owl-foresty/ios-box}
|
39
|
-
s.licenses = ["MIT"]
|
40
|
-
s.require_paths = ["lib"]
|
41
|
-
s.rubygems_version = %q{1.6.2}
|
42
|
-
s.summary = %q{Automates some common tasks in iOS development}
|
43
|
-
s.test_files = [
|
44
|
-
"spec/build_cache_spec.rb",
|
45
|
-
"spec/ios-box_spec.rb",
|
46
|
-
"spec/spec_helper.rb"
|
47
|
-
]
|
48
|
-
|
49
|
-
if s.respond_to? :specification_version then
|
50
|
-
s.specification_version = 3
|
51
|
-
|
52
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
|
-
s.add_runtime_dependency(%q<plist>, [">= 0"])
|
54
|
-
s.add_runtime_dependency(%q<pbxproject>, [">= 0"])
|
55
|
-
s.add_runtime_dependency(%q<plist>, [">= 0"])
|
56
|
-
s.add_runtime_dependency(%q<grit>, [">= 0"])
|
57
|
-
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
58
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
59
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
60
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
61
|
-
s.add_runtime_dependency(%q<pbxproject>, [">= 0.1.4"])
|
62
|
-
s.add_runtime_dependency(%q<plist>, [">= 0"])
|
63
|
-
s.add_runtime_dependency(%q<grit>, [">= 0"])
|
64
|
-
s.add_development_dependency(%q<rspec>, ["> 1.2.3"])
|
65
|
-
s.add_development_dependency(%q<pbxproject>, [">= 0.1.4"])
|
66
|
-
s.add_development_dependency(%q<grit>, [">= 0"])
|
67
|
-
s.add_development_dependency(%q<plist>, [">= 0"])
|
68
|
-
else
|
69
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
70
|
-
s.add_dependency(%q<pbxproject>, [">= 0"])
|
71
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
72
|
-
s.add_dependency(%q<grit>, [">= 0"])
|
73
|
-
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
74
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
75
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
76
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
77
|
-
s.add_dependency(%q<pbxproject>, [">= 0.1.4"])
|
78
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
79
|
-
s.add_dependency(%q<grit>, [">= 0"])
|
80
|
-
s.add_dependency(%q<rspec>, ["> 1.2.3"])
|
81
|
-
s.add_dependency(%q<pbxproject>, [">= 0.1.4"])
|
82
|
-
s.add_dependency(%q<grit>, [">= 0"])
|
83
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
84
|
-
end
|
85
|
-
else
|
86
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
87
|
-
s.add_dependency(%q<pbxproject>, [">= 0"])
|
88
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
89
|
-
s.add_dependency(%q<grit>, [">= 0"])
|
90
|
-
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
91
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
92
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
93
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
94
|
-
s.add_dependency(%q<pbxproject>, [">= 0.1.4"])
|
95
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
96
|
-
s.add_dependency(%q<grit>, [">= 0"])
|
97
|
-
s.add_dependency(%q<rspec>, ["> 1.2.3"])
|
98
|
-
s.add_dependency(%q<pbxproject>, [">= 0.1.4"])
|
99
|
-
s.add_dependency(%q<grit>, [">= 0"])
|
100
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
101
|
-
end
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "ios-box"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Ios::Box::VERSION
|
17
|
+
|
18
|
+
gem.add_runtime_dependency "thor"
|
19
|
+
gem.add_runtime_dependency "grit"
|
20
|
+
gem.add_runtime_dependency "plist"
|
102
21
|
end
|
103
|
-
|
data/lib/ios-box.rb
CHANGED
data/lib/ios-box/cli.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'ios-box/tools'
|
2
|
+
require 'ios-box/iosbox'
|
3
|
+
require 'thor'
|
4
|
+
require 'pbxproject'
|
5
|
+
|
6
|
+
module Ios
|
7
|
+
module Box
|
8
|
+
class CLI < Thor
|
9
|
+
include Thor::Actions
|
10
|
+
|
11
|
+
desc "version COMMAND", "Version related subcommands"
|
12
|
+
subcommand "version", Tools::Version
|
13
|
+
|
14
|
+
desc "build COMMAND", "Build related subcommands"
|
15
|
+
subcommand "build", Tools::Build
|
16
|
+
|
17
|
+
desc "integrate [PROJECT]", "Integrates ios-box with project, by default first founded"
|
18
|
+
def integrate(project = nil)
|
19
|
+
shell = Thor::Shell::Basic.new
|
20
|
+
|
21
|
+
# Find our project
|
22
|
+
if project.nil?
|
23
|
+
project = Dir["*.xcodeproj"].first
|
24
|
+
end
|
25
|
+
|
26
|
+
unless File.exists?(project) and File.directory?(project)
|
27
|
+
shell.error "Project #{project} is not valid."
|
28
|
+
exit
|
29
|
+
end
|
30
|
+
|
31
|
+
shell.say "Integrating to project #{project}"
|
32
|
+
|
33
|
+
# Find our project file, either from command-line or just using first one
|
34
|
+
xcode = project || Dir["*.xcodeproj"].first
|
35
|
+
raise "Cannot find project.pbxproj in #{xcode}" unless File.file? "#{xcode}/project.pbxproj"
|
36
|
+
|
37
|
+
# Load our project file
|
38
|
+
pbx = PBXProject::PBXProject.new :file => "#{xcode}/project.pbxproj"
|
39
|
+
pbx.parse
|
40
|
+
|
41
|
+
# If target missing, fetch first target
|
42
|
+
# Find all targets
|
43
|
+
targets = pbx.find_item :type => PBXProject::PBXTypes::PBXNativeTarget
|
44
|
+
if targets.nil? or targets.empty?
|
45
|
+
raise "XCode project does not have any targets!"
|
46
|
+
end
|
47
|
+
|
48
|
+
# Generate build phase
|
49
|
+
# Try to find build phases
|
50
|
+
# prebuilds = pbx.find_item(:type => PBXProject::PBXTypes::PBXShellScriptBuildPhase) || []
|
51
|
+
# prebuilds.select! do |c|
|
52
|
+
# !c.comment.match(/ios-box prepare/).nil?
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
prebuilds = [] # Always add new build phase
|
56
|
+
if prebuilds.empty?
|
57
|
+
initPhase = PBXProject::PBXTypes::PBXShellScriptBuildPhase.new(
|
58
|
+
:shellPath => '/bin/sh',
|
59
|
+
:shellScript => "\"(cd $PROJECT_DIR; ruby ~/Code/ios-box/bin/ios-box build prepare)\"",
|
60
|
+
:showEnvVarsInLog => 0,
|
61
|
+
:name => '"ios-box prepare"'
|
62
|
+
)
|
63
|
+
initPhase.comment = "ios-box prepare"
|
64
|
+
|
65
|
+
pbx.add_item initPhase
|
66
|
+
else
|
67
|
+
initPhase = prebuilds.first
|
68
|
+
end
|
69
|
+
|
70
|
+
_targets = ""
|
71
|
+
targets.each do |target|
|
72
|
+
if shell.yes?("Integrate with target #{target.name.value}? [yn]")
|
73
|
+
# Inject buildphase to target
|
74
|
+
# Add to target
|
75
|
+
target.add_build_phase initPhase, 0
|
76
|
+
_targets << "config.targets << \"#{target.name.value}\""
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Create iosbox configuration file
|
81
|
+
create_file ".iosbox" do
|
82
|
+
"# ios-box configuration file\n" +
|
83
|
+
"# https://github.com/owl-forestry/ios-box\n" +
|
84
|
+
"#\n" +
|
85
|
+
"config.project = \"#{project}\"\n" +
|
86
|
+
"#{_targets}\n"
|
87
|
+
end
|
88
|
+
# Append buildcache to gitignore
|
89
|
+
send((File.exists?(".gitignore") ? :append_to_file : :create_file), ".gitignore", ".buildcache\n")
|
90
|
+
|
91
|
+
# Write project file
|
92
|
+
pbx.write_to :file => "#{xcode}/project.pbxproj"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Ios
|
2
|
+
module Box
|
3
|
+
class Config
|
4
|
+
attr_accessor :project
|
5
|
+
attr_reader :targets
|
6
|
+
|
7
|
+
def self.load(file = ".iosbox")
|
8
|
+
config = self.new
|
9
|
+
config.instance_eval(File.read(file), file)
|
10
|
+
config
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@targets = []
|
15
|
+
@project = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def config
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,235 @@
|
|
1
|
+
require 'ios-box/config'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'yaml'
|
4
|
+
require 'grit'
|
5
|
+
require 'plist'
|
6
|
+
|
7
|
+
module Ios::Box
|
8
|
+
class IOSBox
|
9
|
+
attr_reader :config, :cache, :version
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@config = Config.load
|
13
|
+
@cache = Cache.load
|
14
|
+
@version = Version.new(self)
|
15
|
+
end
|
16
|
+
|
17
|
+
class Version
|
18
|
+
attr_reader :iosbox
|
19
|
+
|
20
|
+
def initialize(iosbox)
|
21
|
+
@iosbox = iosbox
|
22
|
+
end
|
23
|
+
|
24
|
+
def load
|
25
|
+
# Return cached version
|
26
|
+
return @version if @version
|
27
|
+
|
28
|
+
# iOS code
|
29
|
+
# XCode environment?
|
30
|
+
# Load buildcache if exists
|
31
|
+
if ENV['XCODE_VERSION_ACTUAL']
|
32
|
+
plist_file = File.join(ENV['PROJECT_DIR'], ENV['INFOPLIST_FILE'])
|
33
|
+
project_dir = ENV['PROJECT_DIR']
|
34
|
+
else
|
35
|
+
# Do we have buildcache?
|
36
|
+
if iosbox.cache[:latest]
|
37
|
+
configuration = iosbox.cache[:latest]
|
38
|
+
plist_file = File.join(iosbox.cache[configuration][:project_dir], iosbox.cache[configuration][:infoplist_file])
|
39
|
+
project_dir = iosbox.cache[configuration][:project_dir]
|
40
|
+
else
|
41
|
+
raise "Build cache has not been filled, please build project."
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Detect our commit hash
|
46
|
+
git = Grit::Repo.new("#{project_dir}")
|
47
|
+
|
48
|
+
plist = Plist::parse_xml(plist_file)
|
49
|
+
|
50
|
+
# Build normal version hash
|
51
|
+
@version = {
|
52
|
+
:short => plist["CFBundleShortVersionString"],
|
53
|
+
:bundle => plist["CFBundleVersion"],
|
54
|
+
:commit => git.commit("HEAD").id_abbrev,
|
55
|
+
}
|
56
|
+
|
57
|
+
# Build technical version number
|
58
|
+
if (m = plist["CFBundleShortVersionString"].match(/(\d+)\.(\d+)(\.(\d+))?/))
|
59
|
+
@version[:major] = Integer(m[1]) if m[1]
|
60
|
+
@version[:minor] = Integer(m[2]) if m[2]
|
61
|
+
@version[:patch] = Integer(m[4]) if m[4]
|
62
|
+
@version[:technical] = @version[:major] + ((@version[:minor] * 100) / 1000.0)
|
63
|
+
if @version[:patch]
|
64
|
+
@version[:technical] += ((@version[:patch] > 10) ? @version[:patch] : @version[:patch] * 10) / 1000.0
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Fetch current build number (project version)
|
69
|
+
# Check if we have build number in cache
|
70
|
+
|
71
|
+
@version[:build_number] = fetch_build_number
|
72
|
+
|
73
|
+
@version
|
74
|
+
end
|
75
|
+
|
76
|
+
def [](v)
|
77
|
+
@version ||= load
|
78
|
+
@version[v]
|
79
|
+
end
|
80
|
+
|
81
|
+
def []=(v, s)
|
82
|
+
@version ||= load
|
83
|
+
@version[v] = s
|
84
|
+
end
|
85
|
+
|
86
|
+
def marketing_version
|
87
|
+
"%d.%d%s" % [ @version[:major], @version[:minor], @version[:patch] ? ".#{@version[:patch]}" : "" ]
|
88
|
+
end
|
89
|
+
|
90
|
+
def bump_build(buildnum = nil)
|
91
|
+
# Fetch current build number (project version)
|
92
|
+
# Check if we have build number in cache
|
93
|
+
if buildnum.nil?
|
94
|
+
build = (fetch_build_number || 0) + 1
|
95
|
+
else
|
96
|
+
build = buildnum
|
97
|
+
end
|
98
|
+
|
99
|
+
store_build_number(build)
|
100
|
+
|
101
|
+
puts "Build number increased to #{iosbox.cache[:build_number]}"
|
102
|
+
end
|
103
|
+
|
104
|
+
def set_marketing(verstr)
|
105
|
+
pl = Plist::parse_xml(plist)
|
106
|
+
pl["CFBundleShortVersionString"] = verstr
|
107
|
+
pl.save_plist(plist)
|
108
|
+
end
|
109
|
+
|
110
|
+
def bump_marketing(type = :patch)
|
111
|
+
load
|
112
|
+
|
113
|
+
if type == :major
|
114
|
+
@version[:patch] = nil
|
115
|
+
@version[:minor] = 0
|
116
|
+
@version[:major] += 1
|
117
|
+
elsif type == :minor
|
118
|
+
@version[:patch] = nil
|
119
|
+
@version[:minor] += 1
|
120
|
+
elsif type == :patch
|
121
|
+
@version[:patch] = (@version[:patch] || 0) + 1
|
122
|
+
end
|
123
|
+
|
124
|
+
pl = Plist::parse_xml(plist)
|
125
|
+
pl["CFBundleShortVersionString"] = marketing_version
|
126
|
+
pl.save_plist(plist)
|
127
|
+
|
128
|
+
puts "New marketing version #{marketing_version}"
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
def fetch_build_number
|
133
|
+
unless iosbox.cache[:build_number]
|
134
|
+
puts "Project: #{iosbox.config.project}"
|
135
|
+
pbx = PBXProject::PBXProject.new :file => File.join(iosbox.config.project, "project.pbxproj")
|
136
|
+
pbx.parse
|
137
|
+
|
138
|
+
iosbox.config.targets.each do |target|
|
139
|
+
target = pbx.find_item :name => target, :type => PBXProject::PBXTypes::PBXNativeTarget
|
140
|
+
cl = pbx.find_item :guid => target.buildConfigurationList.value, :type => PBXProject::PBXTypes::XCConfigurationList
|
141
|
+
cl.buildConfigurations.each do |bc|
|
142
|
+
bc = pbx.find_item :guid => bc.value, :type => PBXProject::PBXTypes::XCBuildConfiguration
|
143
|
+
|
144
|
+
if bc.buildSettings["CURRENT_PROJECT_VERSION"]
|
145
|
+
iosbox.cache[:build_number] = bc.buildSettings["CURRENT_PROJECT_VERSION"].value
|
146
|
+
break
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
break if iosbox.cache[:build_number]
|
151
|
+
end
|
152
|
+
|
153
|
+
# Save build number to cache
|
154
|
+
iosbox.cache.save
|
155
|
+
end
|
156
|
+
|
157
|
+
Integer(iosbox.cache[:build_number] || 0)
|
158
|
+
end
|
159
|
+
|
160
|
+
def store_build_number(build)
|
161
|
+
puts "Project: #{iosbox.config.project}"
|
162
|
+
pbx = PBXProject::PBXProject.new :file => File.join(iosbox.config.project, "project.pbxproj")
|
163
|
+
pbx.parse
|
164
|
+
|
165
|
+
iosbox.config.targets.each do |target|
|
166
|
+
target = pbx.find_item :name => target, :type => PBXProject::PBXTypes::PBXNativeTarget
|
167
|
+
cl = pbx.find_item :guid => target.buildConfigurationList.value, :type => PBXProject::PBXTypes::XCConfigurationList
|
168
|
+
cl.buildConfigurations.each do |bc|
|
169
|
+
bc = pbx.find_item :guid => bc.value, :type => PBXProject::PBXTypes::XCBuildConfiguration
|
170
|
+
|
171
|
+
if bc.buildSettings["CURRENT_PROJECT_VERSION"]
|
172
|
+
bc.buildSettings["CURRENT_PROJECT_VERSION"].value = "\"#{build}\""
|
173
|
+
else
|
174
|
+
bc.buildSettings["CURRENT_PROJECT_VERSION"] = PBXProject::PBXTypes::BasicValue.new :value => "\"#{build}\""
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
# Save build number to pbxproject and to cache
|
180
|
+
pbx.write_to :file => File.join(iosbox.config.project, "project.pbxproj")
|
181
|
+
iosbox.cache[:build_number] = build
|
182
|
+
iosbox.cache.save
|
183
|
+
end
|
184
|
+
|
185
|
+
# Return plist file name
|
186
|
+
def plist
|
187
|
+
if ENV['XCODE_VERSION_ACTUAL']
|
188
|
+
file = File.join(ENV['PROJECT_DIR'], ENV['INFOPLIST_FILE'])
|
189
|
+
else
|
190
|
+
# Do we have buildcache?
|
191
|
+
if iosbox.cache[:latest]
|
192
|
+
configuration = iosbox.cache[:latest]
|
193
|
+
file = File.join(iosbox.cache[configuration][:project_dir], iosbox.cache[configuration][:infoplist_file])
|
194
|
+
else
|
195
|
+
raise "Build cache has not been filled, please build project."
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
file
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
|
206
|
+
class Cache
|
207
|
+
attr_accessor :cache
|
208
|
+
|
209
|
+
def self.load(file = ".buildcache")
|
210
|
+
cache = Cache.new
|
211
|
+
|
212
|
+
if File.exists?(file)
|
213
|
+
cache.cache = YAML.load(File.read(file))
|
214
|
+
end
|
215
|
+
|
216
|
+
cache
|
217
|
+
end
|
218
|
+
|
219
|
+
def initialize
|
220
|
+
@cache = {}
|
221
|
+
end
|
222
|
+
|
223
|
+
def [](v)
|
224
|
+
@cache[v]
|
225
|
+
end
|
226
|
+
|
227
|
+
def []=(v, s)
|
228
|
+
@cache[v] = s
|
229
|
+
end
|
230
|
+
|
231
|
+
def save(file = ".buildcache")
|
232
|
+
File.open(file, 'w') { |io| io.puts @cache.to_yaml }
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'ios-box/config'
|
2
|
+
require 'ios-box/iosbox'
|
3
|
+
|
4
|
+
require 'rake/tasklib'
|
5
|
+
require 'rubygems'
|
6
|
+
require 'yaml'
|
7
|
+
require 'grit'
|
8
|
+
require 'plist'
|
9
|
+
require 'pbxproject'
|
10
|
+
|
11
|
+
module Ios
|
12
|
+
module Box
|
13
|
+
class Tasks < ::Rake::TaskLib
|
14
|
+
def initialize(namespace = :iosbox, &block)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def require_xcode
|
19
|
+
raise "This task must be run in XCode Environment" unless ENV['XCODE_VERSION_ACTUAL']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Ios
|
2
|
+
module Box
|
3
|
+
module Tools
|
4
|
+
class Build < Thor
|
5
|
+
|
6
|
+
desc "prepare", "Prepare build environment from XCode"
|
7
|
+
def prepare
|
8
|
+
# Make sure we are in XCode environment
|
9
|
+
require_xcode
|
10
|
+
|
11
|
+
# Update build cache
|
12
|
+
update_cache
|
13
|
+
|
14
|
+
version = IOSBox.new.version
|
15
|
+
|
16
|
+
# Calculate build number (displayed)
|
17
|
+
puts "TODO: build number"
|
18
|
+
|
19
|
+
# Inject information to Info.plist
|
20
|
+
product_plist = File.join(ENV['BUILT_PRODUCTS_DIR'], ENV['INFOPLIST_PATH'])
|
21
|
+
|
22
|
+
# Convert PList to XML
|
23
|
+
`/usr/bin/plutil -convert xml1 \"#{product_plist}\"`
|
24
|
+
pl = Plist::parse_xml(product_plist)
|
25
|
+
if (pl)
|
26
|
+
# pl["CFBundleVersion"] = @config._bundle_version
|
27
|
+
pl["IBBuildNum"] = version[:build_number]
|
28
|
+
pl["IBBuildDate"] = Time.new.strftime("%a %e %b %Y %H:%M:%S %Z %z")
|
29
|
+
pl["IBBuildType"] = ENV['CONFIGURATION']
|
30
|
+
pl["GCGitCommitHash"] = version[:commit] # for hoptoadapp
|
31
|
+
pl.save_plist(product_plist)
|
32
|
+
end
|
33
|
+
# Convert PList back to binary
|
34
|
+
`/usr/bin/plutil -convert binary1 \"#{product_plist}\"`
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def update_cache
|
40
|
+
cache = IOSBox.new.cache
|
41
|
+
|
42
|
+
# Save our environment variables
|
43
|
+
if ENV["CONFIGURATION"]
|
44
|
+
configuration = ENV["CONFIGURATION"].downcase.to_sym
|
45
|
+
cache[configuration] ||= {}
|
46
|
+
cache[:latest] = configuration
|
47
|
+
["BUILT_PRODUCTS_DIR", "BUILD_DIR", "CONFIGURATION", "CONFIGURATION_BUILD_DIR",
|
48
|
+
"PROJECT_DIR", "INFOPLIST_FILE", "TARGET_NAME"].each do |v|
|
49
|
+
cache[configuration][v.downcase.to_sym] = ENV[v]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
cache.save
|
54
|
+
end
|
55
|
+
|
56
|
+
def require_xcode
|
57
|
+
raise "This task must be run in XCode Environment" unless ENV['XCODE_VERSION_ACTUAL']
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Ios
|
2
|
+
module Box
|
3
|
+
module Tools
|
4
|
+
class Version < Thor
|
5
|
+
desc "show", "Displays current version information"
|
6
|
+
def show
|
7
|
+
version = IOSBox.new.version
|
8
|
+
|
9
|
+
puts " Short Version: #{version[:short]}"
|
10
|
+
puts " Bundle Version: #{version[:bundle]}"
|
11
|
+
puts " Technical: %1.3f" % version[:technical]
|
12
|
+
puts " Build Number: #{version[:build_number]}"
|
13
|
+
puts " Commit: #{version[:commit]}"
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "build [BUILDNUM]", "Increments current build number or sets it to defined."
|
17
|
+
def build(buildnum = nil)
|
18
|
+
IOSBox.new.version.bump_build(buildnum)
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "set VERSION", "Sets new marketing version"
|
22
|
+
def set(ver)
|
23
|
+
IOSBox.new.version.set_marketing(ver)
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "bump [major|minor]", "Bumps marketings version by one"
|
27
|
+
def bump(type = :patch)
|
28
|
+
IOSBox.new.version.bump_marketing(type.downcase.to_sym)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
CHANGED
@@ -1,194 +1,59 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ios-box
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Mikko Kokkonen
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
name: plist
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
12
|
+
date: 2011-10-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: thor
|
16
|
+
requirement: &70265489724360 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :runtime
|
25
23
|
prerelease: false
|
26
|
-
version_requirements: *
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: pbxproject
|
29
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
-
none: false
|
31
|
-
requirements:
|
32
|
-
- - ">="
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: "0"
|
35
|
-
type: :runtime
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: plist
|
40
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: "0"
|
46
|
-
type: :runtime
|
47
|
-
prerelease: false
|
48
|
-
version_requirements: *id003
|
49
|
-
- !ruby/object:Gem::Dependency
|
24
|
+
version_requirements: *70265489724360
|
25
|
+
- !ruby/object:Gem::Dependency
|
50
26
|
name: grit
|
51
|
-
requirement: &
|
27
|
+
requirement: &70265489723740 !ruby/object:Gem::Requirement
|
52
28
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
57
33
|
type: :runtime
|
58
34
|
prerelease: false
|
59
|
-
version_requirements: *
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: rspec
|
62
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
63
|
-
none: false
|
64
|
-
requirements:
|
65
|
-
- - ~>
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: 2.3.0
|
68
|
-
type: :development
|
69
|
-
prerelease: false
|
70
|
-
version_requirements: *id005
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: bundler
|
73
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
|
-
requirements:
|
76
|
-
- - ~>
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: 1.0.0
|
79
|
-
type: :development
|
80
|
-
prerelease: false
|
81
|
-
version_requirements: *id006
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: jeweler
|
84
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
|
-
requirements:
|
87
|
-
- - ~>
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 1.5.2
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: *id007
|
93
|
-
- !ruby/object:Gem::Dependency
|
94
|
-
name: rcov
|
95
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
96
|
-
none: false
|
97
|
-
requirements:
|
98
|
-
- - ">="
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: "0"
|
101
|
-
type: :development
|
102
|
-
prerelease: false
|
103
|
-
version_requirements: *id008
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: pbxproject
|
106
|
-
requirement: &id009 !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
|
-
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: 0.1.4
|
112
|
-
type: :runtime
|
113
|
-
prerelease: false
|
114
|
-
version_requirements: *id009
|
115
|
-
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: *70265489723740
|
36
|
+
- !ruby/object:Gem::Dependency
|
116
37
|
name: plist
|
117
|
-
requirement: &
|
118
|
-
none: false
|
119
|
-
requirements:
|
120
|
-
- - ">="
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version: "0"
|
123
|
-
type: :runtime
|
124
|
-
prerelease: false
|
125
|
-
version_requirements: *id010
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: grit
|
128
|
-
requirement: &id011 !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70265489723040 !ruby/object:Gem::Requirement
|
129
39
|
none: false
|
130
|
-
requirements:
|
131
|
-
- -
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
134
44
|
type: :runtime
|
135
45
|
prerelease: false
|
136
|
-
version_requirements: *
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
- - ">"
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version: 1.2.3
|
145
|
-
type: :development
|
146
|
-
prerelease: false
|
147
|
-
version_requirements: *id012
|
148
|
-
- !ruby/object:Gem::Dependency
|
149
|
-
name: pbxproject
|
150
|
-
requirement: &id013 !ruby/object:Gem::Requirement
|
151
|
-
none: false
|
152
|
-
requirements:
|
153
|
-
- - ">="
|
154
|
-
- !ruby/object:Gem::Version
|
155
|
-
version: 0.1.4
|
156
|
-
type: :development
|
157
|
-
prerelease: false
|
158
|
-
version_requirements: *id013
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: grit
|
161
|
-
requirement: &id014 !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
|
-
requirements:
|
164
|
-
- - ">="
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: "0"
|
167
|
-
type: :development
|
168
|
-
prerelease: false
|
169
|
-
version_requirements: *id014
|
170
|
-
- !ruby/object:Gem::Dependency
|
171
|
-
name: plist
|
172
|
-
requirement: &id015 !ruby/object:Gem::Requirement
|
173
|
-
none: false
|
174
|
-
requirements:
|
175
|
-
- - ">="
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
version: "0"
|
178
|
-
type: :development
|
179
|
-
prerelease: false
|
180
|
-
version_requirements: *id015
|
181
|
-
description: ios-box offers automation and easy tasks for some most common tasks in iOS development.
|
182
|
-
email: mikko.kokkonen@me.com
|
183
|
-
executables: []
|
184
|
-
|
46
|
+
version_requirements: *70265489723040
|
47
|
+
description: Include atuomatic vesion conrol for you XCode projects.
|
48
|
+
email:
|
49
|
+
- mikko@owlforestry.com
|
50
|
+
executables:
|
51
|
+
- ios-box
|
185
52
|
extensions: []
|
186
|
-
|
187
|
-
|
188
|
-
- LICENSE.txt
|
189
|
-
- README.md
|
190
|
-
files:
|
53
|
+
extra_rdoc_files: []
|
54
|
+
files:
|
191
55
|
- .document
|
56
|
+
- .gitignore
|
192
57
|
- .rspec
|
193
58
|
- Gemfile
|
194
59
|
- Gemfile.lock
|
@@ -196,47 +61,46 @@ files:
|
|
196
61
|
- README.md
|
197
62
|
- Rakefile
|
198
63
|
- VERSION
|
199
|
-
-
|
64
|
+
- bin/ios-box
|
200
65
|
- ios-box.gemspec
|
201
|
-
- lib/build_cache.rb
|
202
66
|
- lib/ios-box.rb
|
67
|
+
- lib/ios-box/cli.rb
|
68
|
+
- lib/ios-box/config.rb
|
69
|
+
- lib/ios-box/iosbox.rb
|
70
|
+
- lib/ios-box/tasks.rb
|
71
|
+
- lib/ios-box/tools.rb
|
72
|
+
- lib/ios-box/tools/build.rb
|
73
|
+
- lib/ios-box/tools/version.rb
|
74
|
+
- lib/ios-box/version.rb
|
203
75
|
- lib/ios_box.rb
|
204
|
-
- patch
|
205
76
|
- spec/build_cache_spec.rb
|
206
77
|
- spec/ios-box_spec.rb
|
207
78
|
- spec/spec_helper.rb
|
208
|
-
|
209
|
-
|
210
|
-
licenses:
|
211
|
-
- MIT
|
79
|
+
homepage: https://github.com/owl-forestry/ios-box
|
80
|
+
licenses: []
|
212
81
|
post_install_message:
|
213
82
|
rdoc_options: []
|
214
|
-
|
215
|
-
require_paths:
|
83
|
+
require_paths:
|
216
84
|
- lib
|
217
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
218
86
|
none: false
|
219
|
-
requirements:
|
220
|
-
- -
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
|
223
|
-
|
224
|
-
- 0
|
225
|
-
version: "0"
|
226
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
92
|
none: false
|
228
|
-
requirements:
|
229
|
-
- -
|
230
|
-
- !ruby/object:Gem::Version
|
231
|
-
version:
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
232
97
|
requirements: []
|
233
|
-
|
234
98
|
rubyforge_project:
|
235
|
-
rubygems_version: 1.
|
99
|
+
rubygems_version: 1.8.10
|
236
100
|
signing_key:
|
237
101
|
specification_version: 3
|
238
|
-
summary:
|
239
|
-
test_files:
|
102
|
+
summary: Add handy tools to XCode specially for iOS development
|
103
|
+
test_files:
|
240
104
|
- spec/build_cache_spec.rb
|
241
105
|
- spec/ios-box_spec.rb
|
242
106
|
- spec/spec_helper.rb
|
data/dump
DELETED
File without changes
|
data/lib/build_cache.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
module IosBox
|
2
|
-
class BuildCache
|
3
|
-
def init config
|
4
|
-
# Fill our config object
|
5
|
-
# But only if it hasn't been initialized yet and not in XCode env
|
6
|
-
if (config.project_dir.nil? && ENV['XCODE_VERSION_ACTUAL'].nil?)
|
7
|
-
config.project_dir = @project_dir
|
8
|
-
config.infoplist_file = @infoplist_file
|
9
|
-
config.plist = File.join(@project_dir, @infoplist_file) unless @project_dir.nil?
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.load file = ".buildCache"
|
14
|
-
return unless File.file?(file)
|
15
|
-
YAML.load_file(file)
|
16
|
-
end
|
17
|
-
|
18
|
-
def save file = ".buildCache"
|
19
|
-
File.open(file, 'w') { |io| YAML.dump(self, io) }
|
20
|
-
end
|
21
|
-
|
22
|
-
def method_missing(m, *args, &block)
|
23
|
-
if (args.length > 0)
|
24
|
-
self.class.class_eval do
|
25
|
-
define_method("#{m.to_s[0, m.to_s.length - 1]}") do
|
26
|
-
instance_variable_get("@#{m.to_s[0, m.to_s.length - 1]}")
|
27
|
-
end
|
28
|
-
|
29
|
-
define_method("#{m.to_s[0, m.to_s.length - 1]}=") do |val|
|
30
|
-
instance_variable_set("@#{m.to_s[0, m.to_s.length - 1]}", val)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
return instance_variable_set("@#{m.to_s[0, m.to_s.length - 1]}", args[0])
|
34
|
-
end
|
35
|
-
|
36
|
-
self.class.class_eval do
|
37
|
-
define_method(m) do
|
38
|
-
instance_variable_get("@#{m}")
|
39
|
-
end
|
40
|
-
end
|
41
|
-
return instance_variable_get("@#{m}")
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
data/patch
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
(in /Users/mikko/Documents/ios-box)
|