ios_build_kit 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +120 -0
- data/LICENSE +19 -0
- data/README.md +269 -0
- data/README.rdoc +25 -0
- data/Rakefile +9 -0
- data/bin/buildkit +17 -0
- data/ios_build_kit-0.0.1.gem +0 -0
- data/ios_build_kit.gemspec +31 -0
- data/lib/ios_build_kit.rb +12 -0
- data/lib/ios_build_kit/task.rb +24 -0
- data/lib/ios_build_kit/task_configuration.rb +13 -0
- data/lib/ios_build_kit/task_runner.rb +82 -0
- data/lib/ios_build_kit/tasks/create_ipa.rb +94 -0
- data/lib/ios_build_kit/tasks/decorate_icon.rb +106 -0
- data/lib/ios_build_kit/tasks/increment_version.rb +55 -0
- data/lib/ios_build_kit/tasks/run_tests.rb +54 -0
- data/lib/ios_build_kit/tasks/xcode_build.rb +57 -0
- data/lib/ios_build_kit/utils/assertions.rb +29 -0
- data/lib/ios_build_kit/utils/console.rb +28 -0
- data/lib/ios_build_kit/utils/plist_pal.rb +28 -0
- data/lib/ios_build_kit/utils/report_creator.rb +21 -0
- data/lib/ios_build_kit/utils/version_number.rb +29 -0
- data/lib/ios_build_kit/version.rb +3 -0
- metadata +181 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
module BuildKit
|
2
|
+
|
3
|
+
module Tasks
|
4
|
+
|
5
|
+
def self.run_tests runner, task_opts
|
6
|
+
task = RunTestsTask.new({ runner: runner, opts: task_opts })
|
7
|
+
task.run!
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
class RunTestsTask < BuildKitTask
|
13
|
+
|
14
|
+
attr_reader :output
|
15
|
+
|
16
|
+
def run!
|
17
|
+
run_command!
|
18
|
+
complete_task!
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def assert_requirements
|
24
|
+
BuildKit::Utilities::Assertions.assert_required_config [:workspace, :scheme], @runner
|
25
|
+
BuildKit::Utilities::Assertions.assert_files_exist [@config.workspace]
|
26
|
+
end
|
27
|
+
|
28
|
+
def build_command
|
29
|
+
workspace_arg = "-workspace \"#{@config.workspace}\""
|
30
|
+
scheme_arg = "-scheme \"#{@config.scheme}\""
|
31
|
+
"xctool #{workspace_arg} #{scheme_arg} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO test -freshSimulator -parallelize"
|
32
|
+
end
|
33
|
+
|
34
|
+
def run_command!
|
35
|
+
command = build_command
|
36
|
+
@output = %x[#{command}]
|
37
|
+
puts @output if @task_options[:log]
|
38
|
+
end
|
39
|
+
|
40
|
+
def tests_passed?
|
41
|
+
@output.include? "TEST SUCCEEDED"
|
42
|
+
end
|
43
|
+
|
44
|
+
def complete_task!
|
45
|
+
runner.store[:tests_passed] = tests_passed?
|
46
|
+
message = (tests_passed?) ? "run_tests completed successfully, tests all passed" : "run_tests completed successfully, tests failed"
|
47
|
+
@runner.task_completed! :run_tests, message, @output
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module BuildKit
|
2
|
+
|
3
|
+
module Tasks
|
4
|
+
|
5
|
+
def self.xcode_build runner, task_opts
|
6
|
+
task = XcodeBuildTask.new({ runner: runner, opts: task_opts })
|
7
|
+
task.run!
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
class XcodeBuildTask < BuildKitTask
|
13
|
+
|
14
|
+
attr_reader :output
|
15
|
+
|
16
|
+
def run!
|
17
|
+
run_command!
|
18
|
+
complete_task!
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def assert_requirements
|
24
|
+
BuildKit::Utilities::Assertions.assert_required_config [:app_name, :workspace, :sdk, :build_configuration, :build_dir, :scheme], @runner
|
25
|
+
BuildKit::Utilities::Assertions.assert_files_exist [@config.workspace, @config.build_dir]
|
26
|
+
end
|
27
|
+
|
28
|
+
def build_command
|
29
|
+
workspace_arg = "-workspace \"#{@config.workspace}\""
|
30
|
+
sdk_arg = "-sdk \"#{@config.sdk}\""
|
31
|
+
scheme_arg = "-scheme \"#{@config.scheme}\""
|
32
|
+
configuration_arg = "-configuration \"#{@config.build_configuration}\""
|
33
|
+
build_dir_arg = "CONFIGURATION_BUILD_DIR=\"#{@config.build_dir}\""
|
34
|
+
"xctool #{workspace_arg} #{sdk_arg} #{scheme_arg} #{configuration_arg} #{build_dir_arg} build"
|
35
|
+
end
|
36
|
+
|
37
|
+
def run_command!
|
38
|
+
command = build_command
|
39
|
+
@output = %x[#{command}]
|
40
|
+
puts @output if @task_options[:log]
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_succeeded?
|
44
|
+
@output.include? "BUILD SUCCEEDED"
|
45
|
+
end
|
46
|
+
|
47
|
+
def complete_task!
|
48
|
+
@runner.store[:xcode_build_succeeded] = build_succeeded?
|
49
|
+
message = (build_succeeded?) ? "xcode_build completed, project built successfully" : "xcode_build completed, but the project failed to build"
|
50
|
+
@runner.task_completed! :xcode_build, message, @output
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module BuildKit
|
2
|
+
|
3
|
+
module Utilities
|
4
|
+
|
5
|
+
module Assertions
|
6
|
+
|
7
|
+
def self.assert_files_exist files
|
8
|
+
files.each do |file|
|
9
|
+
BuildKit::Utilities::Console.terminate_with_err "Missing File: #{file} does not exist" unless File.exists? file
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.assert_required_config req_keys, runner
|
14
|
+
req_keys.each do |k|
|
15
|
+
runner.terminate_with_err "Missing Configuration: #{k} is required to run #{runner.tasks[:running]}" if runner.config[k].nil?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.assert_tasks_completed req_tasks, runner
|
20
|
+
req_tasks.each do |t|
|
21
|
+
runner.terminate_with_err "Task Required: #{t.to_s} should be completed to run #{runner.tasks[:running]}" unless runner.has_completed_task? t
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module BuildKit
|
2
|
+
|
3
|
+
module Utilities
|
4
|
+
|
5
|
+
module Console
|
6
|
+
|
7
|
+
def self.header_msg h
|
8
|
+
puts "\n\n" + h + "\n" + ("-" * h.length) + "\n"
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.warning_msg m
|
12
|
+
puts "\nNotice:" + m + "\n"
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.success_msg m
|
16
|
+
puts "\n#{m}\n"
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.terminate_with_err err
|
20
|
+
puts "\n💣 Terminating with error: #{err}\n\n"
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module BuildKit
|
2
|
+
|
3
|
+
Dir["./*.rb"].each {|file| require file }
|
4
|
+
|
5
|
+
module Utilities
|
6
|
+
|
7
|
+
module PlistPal
|
8
|
+
|
9
|
+
def self.read_value_in_plist plist, key
|
10
|
+
%x[/usr/libexec/PlistBuddy -c "Print #{key}" \"#{plist}\"]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.write_value_in_plist plist, key, value
|
14
|
+
plist_buddy_command = "\"Set :#{key} #{value}\" \"#{plist}\""
|
15
|
+
system "/usr/libexec/PlistBuddy -c #{plist_buddy_command}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.brute_replace_in_plist plist, value, new_value
|
19
|
+
original = File.read plist
|
20
|
+
updated = original.gsub value, new_value
|
21
|
+
File.open(plist, "w") { |file| file.write updated }
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module BuildKit
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Utilities
|
6
|
+
|
7
|
+
module Reporter
|
8
|
+
|
9
|
+
def self.create_report runner
|
10
|
+
to_write = { time: Time.now.to_s, config: runner.config.to_h, preferences: runner.preferences.to_h, runtime_store: runner.store, outputs: {} }
|
11
|
+
runner.tasks[:run].each { |task| to_write[:outputs][task.keys.first] = runner.outputs[task.keys.first] }
|
12
|
+
file_name = "#{runner.preferences.reports}report-#{Time.now.to_i}.json"
|
13
|
+
File.open(file_name, 'w') { |f| f.write to_write.to_json }
|
14
|
+
file_name
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module BuildKit
|
2
|
+
|
3
|
+
module Utilities
|
4
|
+
|
5
|
+
module VersionNumber
|
6
|
+
|
7
|
+
def self.plist_version_number plist
|
8
|
+
version = BuildKit::Utilities::PlistPal.read_value_in_plist plist, "CFBundleShortVersionString"
|
9
|
+
build = BuildKit::Utilities::PlistPal.read_value_in_plist(plist, "CFBundleVersion").to_i
|
10
|
+
hash_from_version_and_build version, build
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.hash_from_version_and_build version, build
|
14
|
+
hash = {}
|
15
|
+
split_version = version.split(".").map { |s| s.to_i }
|
16
|
+
hash[:major] = split_version[0].nil? ? 0 : split_version[0]
|
17
|
+
hash[:minor] = split_version[1].nil? ? 0 : split_version[1]
|
18
|
+
hash[:revision] = split_version[2].nil? ? 0 : split_version[2]
|
19
|
+
hash[:major_minor_revision] = [hash[:major], hash[:minor], hash[:revision]].join(".")
|
20
|
+
hash[:build] = build
|
21
|
+
hash[:full] = [hash[:major_minor_revision], hash[:build]].join(".")
|
22
|
+
hash
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ios_build_kit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Waite
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-02-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: commander
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.8'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: paint
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.8'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.8'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: nomad-cli
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.2
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.0.2
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rmagick
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.13'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.13'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: iOS Build Tool CLI - Increment version • Decorate icon • Build app •
|
126
|
+
Run unit tests • Create ipa artefact
|
127
|
+
email: adam@adamjwaite.co.uk
|
128
|
+
executables:
|
129
|
+
- buildkit
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- ./Gemfile
|
134
|
+
- ./Gemfile.lock
|
135
|
+
- ./ios_build_kit-0.0.1.gem
|
136
|
+
- ./ios_build_kit.gemspec
|
137
|
+
- ./lib/ios_build_kit/task.rb
|
138
|
+
- ./lib/ios_build_kit/task_configuration.rb
|
139
|
+
- ./lib/ios_build_kit/task_runner.rb
|
140
|
+
- ./lib/ios_build_kit/tasks/create_ipa.rb
|
141
|
+
- ./lib/ios_build_kit/tasks/decorate_icon.rb
|
142
|
+
- ./lib/ios_build_kit/tasks/increment_version.rb
|
143
|
+
- ./lib/ios_build_kit/tasks/run_tests.rb
|
144
|
+
- ./lib/ios_build_kit/tasks/xcode_build.rb
|
145
|
+
- ./lib/ios_build_kit/utils/assertions.rb
|
146
|
+
- ./lib/ios_build_kit/utils/console.rb
|
147
|
+
- ./lib/ios_build_kit/utils/plist_pal.rb
|
148
|
+
- ./lib/ios_build_kit/utils/report_creator.rb
|
149
|
+
- ./lib/ios_build_kit/utils/version_number.rb
|
150
|
+
- ./lib/ios_build_kit/version.rb
|
151
|
+
- ./lib/ios_build_kit.rb
|
152
|
+
- ./LICENSE
|
153
|
+
- ./Rakefile
|
154
|
+
- ./README.md
|
155
|
+
- ./README.rdoc
|
156
|
+
- bin/buildkit
|
157
|
+
homepage: https://github.com/adamwaite/iOS-Build-Kit
|
158
|
+
licenses: []
|
159
|
+
metadata: {}
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
162
|
+
require_paths:
|
163
|
+
- lib
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - '>='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
requirements: []
|
175
|
+
rubyforge_project:
|
176
|
+
rubygems_version: 2.0.8
|
177
|
+
signing_key:
|
178
|
+
specification_version: 4
|
179
|
+
summary: iOS Build Kit
|
180
|
+
test_files: []
|
181
|
+
has_rdoc:
|