spinjector 0.0.2 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bbdf7ea58d76021bcd8302180796917e5d7558f0731f7d75291600bdb0b45667
4
- data.tar.gz: adb9363c4fe050493327d9dd891c97a300961ad546ba87bd0f0b0a1d7e8a0167
3
+ metadata.gz: c73f5e26de7982019f85fa697d310590caf4750b75981e7bbcef7023a27e6c8c
4
+ data.tar.gz: 81933229a9142400ad0ae4ca2c9494064a384a73d9d88d091fda299749ddda5c
5
5
  SHA512:
6
- metadata.gz: aa16a38ffd1126bd84cec774493a8ee465b8e4df545d508ae990e7800b1afac346418cc74d7d1f006b8e4ad975406c53a812c0149e172013ecbf9a7f95da9e98
7
- data.tar.gz: 2a07ff2f2c8e0ae2cbdcfaf108bfcf32910cf97e893c5c71fe3ba49d85fbd51a946319268e7375c0bbaacd9d5751fa6a2ce4f090a286d479744313340724e7ff
6
+ metadata.gz: 2e766f518c4d1420ffaa5a28b4eedc69a9d4e94836bf0f5574cbc257efcb332f5797b77597681f04ee9824016498069a66eaebd3548f584a24befc4f5576fbc9
7
+ data.tar.gz: 61a8228e352c8c3f06770fcde3c5aeef9ffa3068b16986beb4cef7c91fa5e16e5c57bdd8ff2d566638fb914fe254c400da0f99f2f03ea4075aea74408bb022bc
data/.gitignore CHANGED
@@ -0,0 +1 @@
1
+ *.gem
@@ -0,0 +1,8 @@
1
+ name: "HelloWorld"
2
+ script_path: "Scripts/helloworld.sh"
3
+ input_paths:
4
+ output_paths:
5
+ input_file_list_paths:
6
+ output_file_list_paths:
7
+ dependency_file:
8
+ execution_position: :before_compile
@@ -0,0 +1,9 @@
1
+ name: "HelloWorldExplicit"
2
+ script: |
3
+ echo Hello
4
+ echo World
5
+ input_paths:
6
+ - "Configuration/hello_world_input"
7
+ output_paths:
8
+ - "Configuration/hello_world_output"
9
+ execution_position: :before_compile
@@ -0,0 +1,3 @@
1
+ name: "HelloWorldShort"
2
+ script_path: "Scripts/helloworld.sh"
3
+ execution_position: :after_compile
@@ -0,0 +1,18 @@
1
+ scripts:
2
+ foo:
3
+ name: "Foo"
4
+ script_path: "Scripts/helloworld.sh"
5
+ bar:
6
+ name: "Bar"
7
+ script: |
8
+ echo Bar
9
+ execution_position: :after_compile
10
+
11
+ targets:
12
+ TargetNameA:
13
+ - foo
14
+ - "helloworld.yaml"
15
+ - bar
16
+ - "helloworld_explicit_script.yaml"
17
+ TargetNameB:
18
+ - "helloworld_short.yaml"
Binary file
@@ -0,0 +1 @@
1
+ echo "Hello World"
data/Makefile ADDED
@@ -0,0 +1,11 @@
1
+ build:
2
+ gem build spinjector.gemspec
3
+
4
+ install: clean build
5
+ gem install spinjector-*.gem
6
+
7
+ publish: clean build
8
+ gem push spinjector-*.gem
9
+
10
+ clean:
11
+ rm -f spinjector-*.gem
data/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # spinjector
2
+ Inject Script phase in your Xcode project easily.
3
+
4
+ # How to install
5
+
6
+ ```
7
+ gem install spinjector
8
+ ```
9
+
10
+ # How to use
11
+ ## Global configuration file
12
+ First, create a YAML configuration file under `./Configuration/spinjector_configuration.yaml` (default path where spinjector looks for a configuration file).
13
+
14
+ ```
15
+ scripts:
16
+ foo:
17
+ name: "Foo"
18
+ script: |
19
+ echo Foo
20
+ execution_position: :after_compile
21
+
22
+ targets:
23
+ TargetNameA:
24
+ - foo
25
+ - "helloworld.yaml"
26
+ - "helloworld_explicit_script.yaml"
27
+ TargetNameB:
28
+ - "helloworld_short.yaml"
29
+ - foo
30
+
31
+ ```
32
+
33
+ ## Script configuration file
34
+ Then, for each script you want to inject in your Xcode project:
35
+ - You can use `scripts` section in the global configuration file to define your script directly (eg. `foo`)...
36
+
37
+ - ...Or create a script configuration file (eg. `helloworld.yaml`)
38
+
39
+ ```
40
+ name: "Hello World" # required. Script phase name.
41
+
42
+ # One and only one :script_path or :script may appear.
43
+ # For now, it makes no sense to have 2 differents script sources.
44
+ script_path: "Script/helloworld.sh" # required. Script file path.
45
+ script: | # required. Script.
46
+ <some code lines>
47
+ <other code lines>
48
+
49
+ input_paths: # optional.
50
+ - ""
51
+
52
+ output_paths: # optional.
53
+ - ""
54
+
55
+ input_file_list_paths: # optional.
56
+ - ""
57
+
58
+ output_file_list_paths: # optional.
59
+ - ""
60
+
61
+ dependency_file: # optional.
62
+
63
+ execution_position: # optional. [:before-compile | :after-compile | :before-headers | :after-headers].
64
+ ```
65
+
66
+ - If you use the `script_path option`, create the script file
67
+ ```
68
+ echo Hello World
69
+ ```
70
+
71
+ ## Execution
72
+ Finally, inject script phases
73
+ ```
74
+ spinjector [-c] <path-to-your-global-configuration-file>
75
+ ```
76
+
77
+ Enjoy your build phases
78
+ ![Image of your build phases](/Examples/Images/build_phases.png)
79
+ ![Image of hello world 2 build phase](/Examples/Images/hello_world_explicit.png)
80
+
81
+ ## How to contribute
82
+
83
+ 1. After all your changes are reviewed and merged
84
+ 2. Create a `release` branch
85
+ 3. Update the version in field `s.version` from file `spinjector.gemspec`
86
+ 4. Execute `make publish`
87
+
88
+ You may need to configure your account at step `4.` if you've never pushed any gem. You can find all the informations you need on [the official documentation](https://guides.rubygems.org/make-your-own-gem/#your-first-gem).
@@ -0,0 +1,9 @@
1
+
2
+ class Configuration
3
+
4
+ attr_reader :targets
5
+
6
+ def initialize(targets)
7
+ @targets = targets || []
8
+ end
9
+ end
@@ -0,0 +1,45 @@
1
+
2
+ class Script
3
+
4
+ attr_reader :name, :source_code, :shell_path, :input_paths, :output_paths, :input_file_list_paths, :output_file_list_paths, :dependency_file, :execution_position, :show_env_vars_in_log
5
+
6
+ def initialize(
7
+ name,
8
+ source_code,
9
+ shell_path,
10
+ input_paths,
11
+ output_paths,
12
+ input_file_list_paths,
13
+ output_file_list_paths,
14
+ dependency_file,
15
+ execution_position,
16
+ show_env_vars_in_log
17
+ )
18
+ @name = name
19
+ @source_code = source_code
20
+ @shell_path = shell_path
21
+ @input_paths = input_paths
22
+ @output_paths = output_paths
23
+ @input_file_list_paths = input_file_list_paths
24
+ @output_file_list_paths = output_file_list_paths
25
+ @dependency_file = dependency_file
26
+ @execution_position = execution_position
27
+ @show_env_vars_in_log = show_env_vars_in_log
28
+ verify()
29
+ end
30
+
31
+ def verify
32
+ verify_execution_position()
33
+ end
34
+
35
+ def verify_execution_position
36
+ case execution_position
37
+ when :before_compile, :before_headers
38
+ true
39
+ when :after_compile, :after_headers
40
+ false
41
+ else
42
+ raise ArgumentError, "Unknown execution position `#{execution_position}`"
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,10 @@
1
+
2
+ class Target
3
+
4
+ attr_reader :name, :scripts
5
+
6
+ def initialize(name, scripts)
7
+ @name = name
8
+ @scripts = scripts || []
9
+ end
10
+ end
@@ -0,0 +1,120 @@
1
+ require 'xcodeproj'
2
+ require_relative 'entity/configuration'
3
+ require_relative 'entity/script'
4
+ require_relative 'entity/target'
5
+
6
+ # @return [String] prefix used for all the build phase injected by this script
7
+ # [SPI] stands for Script Phase Injector
8
+ #
9
+ BUILD_PHASE_PREFIX = '[SPI] '.freeze
10
+
11
+ class ProjectService
12
+
13
+ # @param [Xcodeproj::Project] project
14
+ #
15
+ def initialize(project)
16
+ @project = project
17
+ end
18
+
19
+ # Remove all script phases prefixed by BUILD_PHASE_PREFIX from project
20
+ #
21
+ def remove_all_scripts
22
+ @project.targets.each do |target|
23
+ # Delete script phases no longer present in the target.
24
+ native_target_script_phases = target.shell_script_build_phases.select do |bp|
25
+ !bp.name.nil? && bp.name.start_with?(BUILD_PHASE_PREFIX)
26
+ end
27
+ native_target_script_phases.each do |script_phase|
28
+ target.build_phases.delete(script_phase)
29
+ end
30
+ end
31
+ end
32
+
33
+ # @param [Configuration] configuration containing all scripts to add in each target
34
+ #
35
+ def add_scripts_in_targets(configuration)
36
+ configuration.targets.each do |target|
37
+ xcode_target = app_target(target.name)
38
+ add_scripts_in_target(target.scripts, xcode_target)
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ # @param [String] target_name
45
+ # @return [Xcodeproj::Project::Object::PBXNativeTarget] the target named by target_name
46
+ #
47
+ def app_target(target_name)
48
+ target = @project.targets.find { |t| t.name == target_name }
49
+ raise "[Error] Invalid #{target_name} target." unless !target.nil?
50
+ return target
51
+ end
52
+
53
+ # @param [Array<Script>] scripts the script phases defined in configuration files
54
+ # @param [Xcodeproj::Project::Object::PBXNativeTarget] target to add the script phases
55
+ #
56
+ def add_scripts_in_target(scripts, target)
57
+ scripts.each do |script|
58
+ name_with_prefix = BUILD_PHASE_PREFIX + script.name
59
+ phase = target.new_shell_script_build_phase(name_with_prefix)
60
+ phase.shell_script = script.source_code
61
+ phase.shell_path = script.shell_path
62
+ phase.input_paths = script.input_paths
63
+ phase.output_paths = script.output_paths
64
+ phase.input_file_list_paths = script.input_file_list_paths
65
+ phase.output_file_list_paths = script.output_file_list_paths
66
+ phase.dependency_file = script.dependency_file
67
+ # At least with Xcode 10 `showEnvVarsInLog` is *NOT* set to any value even if it's checked and it only
68
+ # gets set to '0' if the user has explicitly disabled this.
69
+ if script.show_env_vars_in_log == '0'
70
+ phase.show_env_vars_in_log = script.show_env_vars_in_log
71
+ end
72
+ execution_position = script.execution_position
73
+ reorder_script_phase(target, phase, execution_position)
74
+ end
75
+ end
76
+
77
+ # @param [Xcodeproj::Project::Object::PBXNativeTarget] target where build phases should be reordered
78
+ # @param [Hash] script_phase to reorder
79
+ # @param [Symbol] execution_position could be :before_compile, :after_compile, :before_headers, :after_headers
80
+ #
81
+ def reorder_script_phase(target, script_phase, execution_position)
82
+ return if execution_position == :any || execution_position.to_s.empty?
83
+
84
+ # Find the point P where to add the script phase
85
+ target_phase_type = case execution_position
86
+ when :before_compile, :after_compile
87
+ Xcodeproj::Project::Object::PBXSourcesBuildPhase
88
+ when :before_headers, :after_headers
89
+ Xcodeproj::Project::Object::PBXHeadersBuildPhase
90
+ else
91
+ raise ArgumentError, "Unknown execution position `#{execution_position}`"
92
+ end
93
+
94
+ # Decide whether to add script_phase before or after point P
95
+ order_before = case execution_position
96
+ when :before_compile, :before_headers
97
+ true
98
+ when :after_compile, :after_headers
99
+ false
100
+ else
101
+ raise ArgumentError, "Unknown execution position `#{execution_position}`"
102
+ end
103
+
104
+ # Get the first build phase index of P
105
+ target_phase_index = target.build_phases.index do |bp|
106
+ bp.is_a?(target_phase_type)
107
+ end
108
+ return if target_phase_index.nil?
109
+
110
+ # Get the script phase we want to reorder index
111
+ script_phase_index = target.build_phases.index do |bp|
112
+ bp.is_a?(Xcodeproj::Project::Object::PBXShellScriptBuildPhase) && !bp.name.nil? && bp.name == script_phase.name
113
+ end
114
+
115
+ # Move script phase to P if needed
116
+ if (order_before && script_phase_index > target_phase_index) || (!order_before && script_phase_index < target_phase_index)
117
+ target.build_phases.move_from(script_phase_index, target_phase_index)
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,36 @@
1
+ require_relative 'entity/script'
2
+
3
+ class ScriptMapper
4
+
5
+ def initialize(script_hash)
6
+ @script_hash = script_hash
7
+ verify_syntax
8
+ end
9
+
10
+ def map
11
+ script_code = @script_hash["script"] || load_script(@script_hash["script_path"])
12
+ Script.new(
13
+ @script_hash["name"],
14
+ script_code,
15
+ @script_hash["shell_path"] || '/bin/sh',
16
+ @script_hash["input_paths"] || [],
17
+ @script_hash["output_paths"] || [],
18
+ @script_hash["input_file_list_paths"] || [],
19
+ @script_hash["output_file_list_paths"] || [],
20
+ @script_hash["dependency_file"],
21
+ @script_hash["execution_position"] || :before_compile,
22
+ @script_hash["show_env_vars_in_log"]
23
+ )
24
+ end
25
+
26
+ def verify_syntax
27
+ raise "[Error] Invalid script description #{@script_hash}" unless @script_hash.is_a?(Hash)
28
+ raise "[Error] Script must have a name and an associated script" unless @script_hash.has_key?("name") && @script_hash.has_key?("script") || @script_hash.has_key?("script_path")
29
+ raise "[Error] Invalid name in script #{@script_hash}" unless !@script_hash["name"].nil?
30
+ end
31
+
32
+ def load_script(path)
33
+ raise "[Error] File #{path} does not exist" unless !path.nil? && File.exist?(path)
34
+ File.read(path)
35
+ end
36
+ end
@@ -0,0 +1,65 @@
1
+ require 'yaml'
2
+ require_relative 'entity/configuration'
3
+ require_relative 'entity/script'
4
+ require_relative 'entity/target'
5
+ require_relative 'script_mapper'
6
+
7
+ class YAMLParser
8
+
9
+ # The configuration to use in order to add scripts in your project
10
+ #
11
+ attr_reader :configuration
12
+
13
+ def initialize(yaml_file_path)
14
+ @configuration_description = load_yml_content(yaml_file_path)
15
+ @configuration = Configuration.new(targets)
16
+ end
17
+
18
+ private
19
+
20
+ def targets
21
+ if @configuration_description["targets"].nil?
22
+ puts "[Warning] There is no target in your configuration file."
23
+ return
24
+ end
25
+ @configuration_description["targets"].map do |target_name, script_entries|
26
+ if script_entries.nil?
27
+ puts "[Warning] There is no scripts in your configuration file under target #{target_name}"
28
+ return
29
+ end
30
+ scripts = script_entries.map do |entry|
31
+ get_script(entry)
32
+ end
33
+ Target.new(target_name, scripts)
34
+ end
35
+ end
36
+
37
+ def get_script(entry)
38
+ script =
39
+ if !@configuration_description["scripts"].nil? && !@configuration_description["scripts"][entry].nil?
40
+ get_script_by_name(entry)
41
+ elsif File.exist?(entry)
42
+ get_script_by_path(entry)
43
+ else
44
+ raise "[Error] Script #{entry} does not exist" unless !script.nil?
45
+ end
46
+ end
47
+
48
+ def get_script_by_name(name)
49
+ script_description = @configuration_description["scripts"][name]
50
+ ScriptMapper.new(script_description).map()
51
+ end
52
+
53
+ def get_script_by_path(path)
54
+ script_description = load_yml_content(path)
55
+ ScriptMapper.new(script_description).map()
56
+ end
57
+
58
+ # @param [String] configuration_path
59
+ # @return [Hash] the hash in the configuration file
60
+ #
61
+ def load_yml_content(configuration_path)
62
+ raise "[Error] YAML file #{configuration_path} not found." unless File.exist?(configuration_path)
63
+ YAML.load(File.read(configuration_path)) || {}
64
+ end
65
+ end
data/lib/spinjector.rb CHANGED
@@ -3,139 +3,32 @@
3
3
  # @author Guillaume Berthier
4
4
  #
5
5
 
6
+ require 'optparse'
6
7
  require 'xcodeproj'
7
- require 'yaml'
8
-
9
- # @return [String] prefix used for all the build phase injected by this script
10
- # [SPI] stands for Script Phase Injector
11
- #
12
- BUILD_PHASE_PREFIX = '[SPI] '.freeze
8
+ require_relative 'spinjector/project_service'
9
+ require_relative 'spinjector/yaml_parser'
13
10
 
14
11
  CONFIGURATION_FILE_PATH = 'Configuration/spinjector_configuration.yaml'.freeze
15
12
 
16
- # @param [Xcodeproj::Project] project
17
- #
18
- def remove_all_spi_script_phases(project)
19
- project.targets.each do |target|
20
- # Delete script phases no longer present in the target.
21
- native_target_script_phases = target.shell_script_build_phases.select do |bp|
22
- !bp.name.nil? && bp.name.start_with?(BUILD_PHASE_PREFIX)
23
- end
24
- native_target_script_phases.each do |script_phase|
25
- target.build_phases.delete(script_phase)
26
- end
27
- end
28
- end
29
-
30
- # @param [Xcodeproj::Project] project
31
- #
32
- def inject_script_phases(project)
33
- configuration_file = load_yml_content(CONFIGURATION_FILE_PATH)
34
- configuration_file.each do |target_name, script_paths|
35
- return unless !target_name.nil?
36
- script_phases = (script_paths || []).flat_map do |script_path|
37
- load_yml_content(script_path)
38
- end
39
- target = app_target(project, target_name)
40
- create_script_phases(script_phases, target)
41
- end
42
- end
43
-
44
- # @param [String] configuration_path
45
- # @return [Hash] the hash in the configuration file
46
- #
47
- def load_yml_content(configuration_path)
48
- if !File.exist?(configuration_path)
49
- puts "Script phase #{configuration_path} unknown"
50
- return {}
51
- end
52
- YAML.load(File.read(configuration_path)) || {}
53
- end
54
-
55
- # @param [Xcodeproj::Project] project
56
- # @param [String] target_name
57
- # @return [Xcodeproj::Project::Object::PBXNativeTarget] the target named by target_name
58
- #
59
- def app_target(project, target_name)
60
- target = project.targets.find { |t| t.name == target_name }
61
- puts "Invalid #{target_name} target." unless !target.nil?
62
- return target
63
- end
64
-
65
- # @param [Array<Hash>] script_phases the script phases defined in configuration files
66
- # @param [Xcodeproj::Project::Object::PBXNativeTarget] target to add the script phases
67
- #
68
- def create_script_phases(script_phases, target)
69
- script_phases.each do |script_phase|
70
- name_with_prefix = BUILD_PHASE_PREFIX + script_phase["name"]
71
- phase = target.new_shell_script_build_phase(name_with_prefix)
72
- script = File.read(script_phase["script_path"])
73
- phase.shell_script = script
74
- phase.shell_path = script_phase["shell_path"] || '/bin/sh'
75
- phase.input_paths = script_phase["input_paths"]
76
- phase.output_paths = script_phase["output_paths"]
77
- phase.input_file_list_paths = script_phase["input_file_list_paths"]
78
- phase.output_file_list_paths = script_phase["output_file_list_paths"]
79
- phase.dependency_file = script_phase["dependency_file"]
80
- # At least with Xcode 10 `showEnvVarsInLog` is *NOT* set to any value even if it's checked and it only
81
- # gets set to '0' if the user has explicitly disabled this.
82
- if (show_env_vars_in_log = script_phase.fetch("show_env_vars_in_log", '1')) == '0'
83
- phase.show_env_vars_in_log = show_env_vars_in_log
84
- end
13
+ options = {}
14
+ OptionParser.new do |opts|
15
+ opts.banner = "Usage: spinjector [options]"
85
16
 
86
- execution_position = script_phase["execution_position"] || :before_compile
87
- reorder_script_phase(target, phase, execution_position)
17
+ opts.on("-cName", "--configuration-path=Name", "Inject scripts using configuration file at Name location. Default is ./#{CONFIGURATION_FILE_PATH}") do |config_path|
18
+ options[:configuration_path] = config_path
88
19
  end
89
- end
90
-
91
- # @param [Xcodeproj::Project::Object::PBXNativeTarget] target where build phases should be reordered
92
- # @param [Hash] script_phase to reorder
93
- # @param [Symbol] execution_position could be :before_compile, :after_compile, :before_headers, :after_headers
94
- #
95
- def reorder_script_phase(target, script_phase, execution_position)
96
- return if execution_position == :any || execution_position.to_s.empty?
20
+ end.parse!
97
21
 
98
- # Find the point P where to add the script phase
99
- target_phase_type = case execution_position
100
- when :before_compile, :after_compile
101
- Xcodeproj::Project::Object::PBXSourcesBuildPhase
102
- when :before_headers, :after_headers
103
- Xcodeproj::Project::Object::PBXHeadersBuildPhase
104
- else
105
- raise ArgumentError, "Unknown execution position `#{execution_position}`"
106
- end
107
-
108
- # Decide whether to add script_phase before or after point P
109
- order_before = case execution_position
110
- when :before_compile, :before_headers
111
- true
112
- when :after_compile, :after_headers
113
- false
114
- else
115
- raise ArgumentError, "Unknown execution position `#{execution_position}`"
116
- end
117
-
118
- # Get the first build phase index of P
119
- target_phase_index = target.build_phases.index do |bp|
120
- bp.is_a?(target_phase_type)
121
- end
122
- return if target_phase_index.nil?
22
+ project_path = Dir.glob("*.xcodeproj").first
23
+ project = Xcodeproj::Project.open(project_path)
24
+ raise "[Error] No xcodeproj found" unless !project.nil?
123
25
 
124
- # Get the script phase we want to reorder index
125
- script_phase_index = target.build_phases.index do |bp|
126
- bp.is_a?(Xcodeproj::Project::Object::PBXShellScriptBuildPhase) && !bp.name.nil? && bp.name == script_phase.name
127
- end
26
+ configuration_file_path = options[:configuration_path] || CONFIGURATION_FILE_PATH
27
+ configuration = YAMLParser.new(configuration_file_path).configuration
128
28
 
129
- # Move script phase to P if needed
130
- if (order_before && script_phase_index > target_phase_index) ||
131
- (!order_before && script_phase_index < target_phase_index)
132
- target.build_phases.move_from(script_phase_index, target_phase_index)
133
- end
134
- end
29
+ project_service = ProjectService.new(project)
30
+ project_service.remove_all_scripts()
31
+ project_service.add_scripts_in_targets(configuration)
135
32
 
136
- project_path = Dir.glob("*.xcodeproj").first
137
- project = Xcodeproj::Project.open(project_path)
138
- remove_all_spi_script_phases(project)
139
- inject_script_phases(project)
140
33
  project.save()
141
- puts "Success"
34
+ puts "Success."
data/spinjector.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'spinjector'
3
- s.version = '0.0.2'
3
+ s.version = '0.0.6'
4
4
  s.executables << 'spinjector'
5
5
  s.summary = "Inject script phases into your Xcode project"
6
6
  s.description = ""
@@ -8,6 +8,10 @@ Gem::Specification.new do |s|
8
8
  s.email = 'guillaume.berthier@fabernovel.com'
9
9
  # use `git ls-files -coz -x *.gem` for development
10
10
  s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
11
- s.homepage = 'https://www.fabernovel.com'
11
+ s.homepage = 'https://github.com/faberNovel/spinjector'
12
12
  s.license = 'MIT'
13
+
14
+ s.add_dependency 'optparse', '~> 0.1'
15
+ s.add_dependency 'xcodeproj', '~> 1.21'
16
+ s.add_dependency 'yaml', '~> 0.2'
13
17
  end
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spinjector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guillaume Berthier, Fabernovel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-20 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2022-01-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: optparse
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: xcodeproj
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.21'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.21'
41
+ - !ruby/object:Gem::Dependency
42
+ name: yaml
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
13
55
  description: ''
14
56
  email: guillaume.berthier@fabernovel.com
15
57
  executables:
@@ -18,12 +60,25 @@ extensions: []
18
60
  extra_rdoc_files: []
19
61
  files:
20
62
  - ".gitignore"
21
- - README
63
+ - Examples/Configuration/helloworld.yaml
64
+ - Examples/Configuration/helloworld_explicit_script.yaml
65
+ - Examples/Configuration/helloworld_short.yaml
66
+ - Examples/Configuration/spinjector_configuration.yaml
67
+ - Examples/Images/build_phases.png
68
+ - Examples/Images/hello_world_explicit.png
69
+ - Examples/Scripts/helloworld.sh
70
+ - Makefile
71
+ - README.md
22
72
  - bin/spinjector
23
73
  - lib/spinjector.rb
24
- - spinjector-0.0.1.gem
74
+ - lib/spinjector/entity/configuration.rb
75
+ - lib/spinjector/entity/script.rb
76
+ - lib/spinjector/entity/target.rb
77
+ - lib/spinjector/project_service.rb
78
+ - lib/spinjector/script_mapper.rb
79
+ - lib/spinjector/yaml_parser.rb
25
80
  - spinjector.gemspec
26
- homepage: https://www.fabernovel.com
81
+ homepage: https://github.com/faberNovel/spinjector
27
82
  licenses:
28
83
  - MIT
29
84
  metadata: {}
data/README DELETED
File without changes
data/spinjector-0.0.1.gem DELETED
Binary file