phoenx 0.2.4 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77be760e6ace31cc917984b3878086334c43b606
4
- data.tar.gz: 36913b36166d02da9736e2c7b3a2a58c8c7b7a73
3
+ metadata.gz: 35e088d7d32779137e61c4ced1fc7346134f3a9d
4
+ data.tar.gz: 58141339eb08460992ee1b724916beec44fe89ca
5
5
  SHA512:
6
- metadata.gz: 1f234bc43090dae81275b4c830d85d09bdfed54a01ffaa5ae48c5ba02865a4169013aa884a98c1c9aae7c8148dce0fd702f7d6d788e1278e0dd89061357a8790
7
- data.tar.gz: 970ae5cab4bab7f4ee73bcaa4a33c092bbec6a86bf58eae808806d643ee17fec596da9be19038ab06f30fcb02d5c8e5c39d28bb34b76a6cfdb94b6f3ea8517bd
6
+ metadata.gz: c7580465b974fd07f8f33d9abf3351ddbbc22e59d8de85292611550f1c8ba4b6c1a937ccef91eb7fc3f03d2cf28037feaf0bd1d704cedab26da30dc189e8fe36
7
+ data.tar.gz: a2635e5c9c72c02c23d7761f934a361393f96a04b4285c84c8d252d1024cd004c5a21a6913ecc8e23cc05dfcc0d018ec9bebeb1d490617a1a2553ae0cd1a9200
@@ -18,6 +18,7 @@ require 'phoenx/entities/dependency'
18
18
  require 'phoenx/use_cases/generate_workspace'
19
19
  require 'phoenx/use_cases/generate_project'
20
20
  require 'phoenx/use_cases/generate_target'
21
+ require 'phoenx/use_cases/target/add_header'
21
22
  require 'phoenx/use_cases/extract_build_settings'
22
23
 
23
24
  require 'phoenx/utilities/xcodeproj_utils'
@@ -8,7 +8,10 @@ module Phoenx
8
8
  attr_accessor :pre_install_scripts
9
9
  attr_accessor :post_install_scripts
10
10
  attr_accessor :project_name
11
+ attr_accessor :support_files
12
+ attr_accessor :excluded_support_files
11
13
  attr_reader :targets
14
+ attr_accessor :deterministic_project
12
15
 
13
16
  def initialize
14
17
 
@@ -17,6 +20,9 @@ module Phoenx
17
20
  @targets = []
18
21
  @pre_install_scripts = []
19
22
  @post_install_scripts = []
23
+ @support_files = []
24
+ @excluded_support_files = []
25
+ @deterministic_project = false
20
26
 
21
27
  yield self
22
28
 
@@ -4,14 +4,17 @@ module Phoenx
4
4
 
5
5
  attr_accessor :name
6
6
  attr_accessor :resources
7
+ attr_accessor :excluded_resources
7
8
  attr_accessor :frameworks
8
9
  attr_accessor :libraries
9
10
  attr_accessor :sources
11
+ attr_accessor :excluded_sources
10
12
  attr_accessor :system_frameworks
11
13
  attr_accessor :system_libraries
12
14
  attr_accessor :pre_build_scripts
13
15
  attr_accessor :post_build_scripts
14
16
  attr_accessor :support_files
17
+ attr_accessor :excluded_support_files
15
18
  attr_reader :dependencies
16
19
 
17
20
  attr_reader :config_files
@@ -27,8 +30,11 @@ module Phoenx
27
30
  @pre_build_scripts = []
28
31
  @post_build_scripts = []
29
32
  @resources = []
33
+ @excluded_resources = []
30
34
  @sources = []
35
+ @excluded_sources = []
31
36
  @support_files = []
37
+ @excluded_support_files = []
32
38
 
33
39
  end
34
40
 
@@ -50,8 +56,13 @@ module Phoenx
50
56
  attr_reader :target_type
51
57
  attr_accessor :sub_projects
52
58
  attr_accessor :private_headers
59
+ attr_accessor :excluded_private_headers
53
60
  attr_accessor :project_headers
61
+ attr_accessor :excluded_project_headers
54
62
  attr_accessor :public_headers
63
+ attr_accessor :excluded_public_headers
64
+ attr_accessor :umbrella_header
65
+ attr_accessor :module_name
55
66
 
56
67
  public
57
68
 
@@ -66,8 +77,11 @@ module Phoenx
66
77
  @version = version
67
78
  @sub_projects = []
68
79
  @private_headers = []
80
+ @excluded_private_headers = []
69
81
  @project_headers = []
82
+ @excluded_project_headers = []
70
83
  @public_headers = []
84
+ @excluded_public_headers = []
71
85
 
72
86
  yield(self)
73
87
 
@@ -1,5 +1,5 @@
1
1
  module Phoenx
2
2
 
3
- VERSION = "0.2.4".freeze unless defined? Phoenx::VERSION
3
+ VERSION = "0.3.0".freeze unless defined? Phoenx::VERSION
4
4
 
5
5
  end
@@ -18,31 +18,7 @@ module Phoenx
18
18
 
19
19
  target.build_configuration_list.build_configurations.each do |config|
20
20
 
21
- file = open('xcconfig/' + target.name + '/' + config.name + '.xcconfig', 'w')
22
-
23
- config.build_settings.each do |key,values|
24
-
25
- file.write(key + ' = ')
26
-
27
- if values.is_a?(String)
28
-
29
- file.write(values)
30
-
31
- else
32
-
33
- values.each do |value|
34
-
35
- file.write(value + ' ')
36
-
37
- end
38
-
39
- end
40
-
41
- file.puts
42
-
43
- end
44
-
45
- file.close
21
+ extract_settings(config, 'xcconfig/' + target.name + '/')
46
22
 
47
23
  end
48
24
 
@@ -56,35 +32,25 @@ module Phoenx
56
32
 
57
33
  @project.build_configuration_list.build_configurations.each do |config|
58
34
 
59
- file = open('xcconfig/' + config.name + '.xcconfig', 'w')
60
-
61
- config.build_settings.each do |key,values|
62
-
63
- file.write(key + ' = ')
64
-
65
- if values.is_a?(String)
66
-
67
- file.write(values)
68
-
69
- else
70
-
71
- values.each do |value|
72
-
73
- file.write(value + ' ')
74
-
75
- end
76
-
77
- end
78
-
79
- file.puts
80
-
81
- end
82
-
83
- file.close
35
+ extract_settings(config, 'xcconfig/')
84
36
 
85
37
  end
86
38
 
87
39
  end
40
+
41
+ def extract_settings(config, to_folder)
42
+
43
+ build_settings = config.build_settings.map { |key,values|
44
+ key + ' = ' + (values.is_a?(String) ? values : values.join(' '))
45
+ }
46
+
47
+ build_settings.sort!
48
+
49
+ open(to_folder + config.name + '.xcconfig', 'w') { |file|
50
+ build_settings.each { |setting| file.puts(setting) }
51
+ }
52
+
53
+ end
88
54
 
89
55
  def extract
90
56
 
@@ -26,10 +26,15 @@ module Phoenx
26
26
 
27
27
  self.generate_configurations
28
28
  self.add_config_files
29
+ self.add_support_files
29
30
  self.build_targets
30
31
 
31
32
  @project.main_group.sort_recursively
32
33
 
34
+ if @project_spec.deterministic_project
35
+ @project.predictabilize_uuids
36
+ end
37
+
33
38
  @project.save(@project_spec.project_file_name)
34
39
 
35
40
  @project_spec.post_install_scripts.each do |post_script|
@@ -104,6 +109,13 @@ module Phoenx
104
109
  end
105
110
 
106
111
  end
112
+
113
+ def add_support_files
114
+
115
+ files = Phoenx.merge_files_array(@project_spec.support_files, @project_spec.excluded_support_files)
116
+ Phoenx.get_or_add_files(@project, files)
117
+
118
+ end
107
119
 
108
120
  end
109
121
 
@@ -19,7 +19,8 @@ module Phoenx
19
19
 
20
20
  def add_support_files
21
21
 
22
- Phoenx.get_or_add_files(@project, @target_spec.support_files)
22
+ files = Phoenx.merge_files_array(@target_spec.support_files, @target_spec.excluded_support_files)
23
+ Phoenx.get_or_add_files(@project, files)
23
24
 
24
25
  end
25
26
 
@@ -96,7 +97,7 @@ module Phoenx
96
97
  def add_resources
97
98
 
98
99
  # Add Resource files
99
- resources = Phoenx.merge_files_array(@target_spec.resources)
100
+ resources = Phoenx.merge_files_array(@target_spec.resources, @target_spec.excluded_resources)
100
101
 
101
102
  unless !@target_spec.resources || @target_spec.resources.empty? || !resources.empty?
102
103
  puts "No resources found".yellow
@@ -137,6 +138,22 @@ module Phoenx
137
138
 
138
139
  end
139
140
 
141
+ elsif Phoenx.is_translation_folder?(source)
142
+
143
+ parts = source.split("/")
144
+ translation_folder_index = parts.index { |part| Phoenx.is_translation_folder?(part) }
145
+
146
+ parent_path = parts[0..translation_folder_index - 1].join('/')
147
+ parent_group = @project.main_group.find_subpath(parent_path)
148
+
149
+ variant_group = parent_group[File.basename(source)]
150
+ if variant_group == nil
151
+ variant_group = parent_group.new_variant_group(File.basename(source))
152
+ self.target.resources_build_phase.add_file_reference(variant_group)
153
+ end
154
+
155
+ variant_group.new_file(parts[translation_folder_index..parts.count].join('/'))
156
+
140
157
  else
141
158
 
142
159
  group = @project.main_group.find_subpath(File.dirname(source), false)
@@ -164,7 +181,7 @@ module Phoenx
164
181
  def add_sources
165
182
 
166
183
  # Add Source files
167
- sources = Phoenx.merge_files_array(@target_spec.sources)
184
+ sources = Phoenx.merge_files_array(@target_spec.sources, @target_spec.excluded_sources)
168
185
 
169
186
  unless !@target_spec.sources || @target_spec.sources.empty? || !sources.empty?
170
187
  puts "No sources found".yellow
@@ -188,9 +205,9 @@ module Phoenx
188
205
 
189
206
  end
190
207
 
191
- def add_headers(header_files,attributes)
208
+ def add_headers(header_files, excluded_header_files, attributes)
192
209
 
193
- headers = Phoenx.merge_files_array(header_files)
210
+ headers = Phoenx.merge_files_array(header_files, excluded_header_files)
194
211
 
195
212
  unless !header_files || header_files.empty? || !headers.empty?
196
213
  puts "No #{attributes["ATTRIBUTES"].first} headers found".yellow
@@ -211,19 +228,19 @@ module Phoenx
211
228
 
212
229
  def add_public_headers
213
230
 
214
- self.add_headers(@target_spec.public_headers,ATTRIBUTES_PUBLIC_HEADERS)
231
+ self.add_headers(@target_spec.public_headers, @target_spec.excluded_public_headers, ATTRIBUTES_PUBLIC_HEADERS)
215
232
 
216
233
  end
217
234
 
218
235
  def add_private_headers
219
236
 
220
- self.add_headers(@target_spec.private_headers,ATTRIBUTES_PRIVATE_HEADERS)
237
+ self.add_headers(@target_spec.private_headers, @target_spec.excluded_private_headers, ATTRIBUTES_PRIVATE_HEADERS)
221
238
 
222
239
  end
223
240
 
224
241
  def add_project_headers
225
242
 
226
- self.add_headers(@target_spec.project_headers,ATTRIBUTES_PROJECT_HEADERS)
243
+ self.add_headers(@target_spec.project_headers, @target_spec.excluded_project_headers, ATTRIBUTES_PROJECT_HEADERS)
227
244
 
228
245
  end
229
246
 
@@ -384,9 +401,7 @@ module Phoenx
384
401
  puts ">> Target ".green + @target_spec.name.bold unless @project_spec.targets.length == 1
385
402
 
386
403
  self.add_sources
387
- self.add_public_headers
388
- self.add_private_headers
389
- self.add_project_headers
404
+ Phoenx::Target::HeaderBuilder.new(@project, @target, @target_spec).build
390
405
  self.add_resources
391
406
  self.add_config_files
392
407
  self.add_sub_projects
@@ -0,0 +1,104 @@
1
+ module Phoenx
2
+
3
+ module Target
4
+
5
+ class HeaderBuilder
6
+
7
+ attr_reader :project
8
+ attr_reader :target
9
+
10
+ attr_reader :target_spec
11
+
12
+ attr_reader :umbrella_headers
13
+
14
+ def initialize(project, target, target_spec)
15
+
16
+ @project = project
17
+ @target = target
18
+
19
+ @target_spec = target_spec
20
+
21
+ @umbrella_headers = []
22
+
23
+ end
24
+
25
+ def build
26
+
27
+ self.add_public_headers
28
+ self.add_project_headers
29
+ self.add_private_headers
30
+
31
+ self.generate_umbrella_header
32
+
33
+ end
34
+
35
+ def add_public_headers
36
+
37
+ self.add_headers(@target_spec.public_headers, ATTRIBUTES_PUBLIC_HEADERS, true)
38
+
39
+ end
40
+
41
+ def add_project_headers
42
+
43
+ self.add_headers(@target_spec.project_headers, ATTRIBUTES_PROJECT_HEADERS, true)
44
+
45
+ end
46
+
47
+ def add_private_headers
48
+
49
+ self.add_headers(@target_spec.private_headers, ATTRIBUTES_PRIVATE_HEADERS, false)
50
+
51
+ end
52
+
53
+
54
+ def generate_umbrella_header
55
+
56
+ unless @target_spec.umbrella_header == nil
57
+
58
+ entries = @umbrella_headers.map{ |header|
59
+ unless @target_spec.module_name == nil
60
+ import = '<' + @target_spec.module_name + '/' + File.basename(header) + '>'
61
+ else
62
+ import = '"' + File.basename(header) + '"'
63
+ end
64
+ '#import ' + import
65
+ }
66
+
67
+ open(@target_spec.umbrella_header, "w") { |file|
68
+ entries.each { |header| file.puts header }
69
+ }
70
+
71
+ end
72
+
73
+ end
74
+
75
+ def add_headers(header_files, attributes, add_to_umbrella_header)
76
+
77
+ headers = Phoenx.merge_files_array(header_files)
78
+
79
+ unless !header_files || header_files.empty? || !headers.empty?
80
+ puts "No #{attributes["ATTRIBUTES"].first} headers found".yellow
81
+ end
82
+
83
+ Phoenx.add_groups_for_files(@project, headers)
84
+
85
+ headers.each do |header|
86
+
87
+ file = Phoenx.get_or_add_file(@project,header)
88
+
89
+ build_file = @target.headers_build_phase.add_file_reference(file, true)
90
+ build_file.settings = attributes
91
+
92
+ if add_to_umbrella_header
93
+ @umbrella_headers << header
94
+ end
95
+
96
+ end
97
+
98
+ end
99
+
100
+ end
101
+
102
+ end
103
+
104
+ end
@@ -1,6 +1,6 @@
1
1
  module Phoenx
2
2
 
3
- def Phoenx.merge_files_array(files)
3
+ def Phoenx.merge_files_array(files, excluded_files = nil)
4
4
 
5
5
  if files == nil
6
6
 
@@ -14,9 +14,15 @@ module Phoenx
14
14
  resources.concat Dir[source]
15
15
 
16
16
  end
17
+
18
+ unless excluded_files == nil
19
+
20
+ resources -= merge_files_array(excluded_files)
21
+
22
+ end
17
23
 
18
24
  return resources
19
25
 
20
26
  end
21
27
 
22
- end
28
+ end
@@ -8,6 +8,12 @@ module Phoenx
8
8
 
9
9
  end
10
10
 
11
+ def Phoenx.is_translation_folder?(file)
12
+
13
+ return file.include?('lproj')
14
+
15
+ end
16
+
11
17
  def Phoenx.add_groups_for_files(project,files)
12
18
 
13
19
  files.each do |path|
@@ -19,7 +25,7 @@ module Phoenx
19
25
 
20
26
  groups.each do |g|
21
27
 
22
- if Phoenx.is_bundle?(g)
28
+ if Phoenx.is_bundle?(g) || Phoenx.is_translation_folder?(g)
23
29
 
24
30
  break
25
31
 
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phoenx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Meder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-26 00:00:00.000000000 Z
11
+ date: 2017-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: colored
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.11'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.11'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '3.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
69
  description: An Xcode Project and Workspace Generator
@@ -74,6 +74,8 @@ executables:
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
+ - bin/phoenx
78
+ - lib/phoenx.rb
77
79
  - lib/phoenx/cli/cli_factory.rb
78
80
  - lib/phoenx/cli/command.rb
79
81
  - lib/phoenx/cli/option.rb
@@ -89,13 +91,12 @@ files:
89
91
  - lib/phoenx/use_cases/generate_project.rb
90
92
  - lib/phoenx/use_cases/generate_target.rb
91
93
  - lib/phoenx/use_cases/generate_workspace.rb
94
+ - lib/phoenx/use_cases/target/add_header.rb
92
95
  - lib/phoenx/utilities/files_utils.rb
93
96
  - lib/phoenx/utilities/xcodeproj_utils.rb
94
97
  - lib/phoenx/validators/configuration_validator.rb
95
98
  - lib/phoenx/validators/project_validator.rb
96
99
  - lib/phoenx/validators/workspace_validator.rb
97
- - lib/phoenx.rb
98
- - bin/phoenx
99
100
  homepage: https://www.github.com/jensmeder/Phoenx
100
101
  licenses:
101
102
  - MIT
@@ -106,17 +107,17 @@ require_paths:
106
107
  - lib
107
108
  required_ruby_version: !ruby/object:Gem::Requirement
108
109
  requirements:
109
- - - '>='
110
+ - - ">="
110
111
  - !ruby/object:Gem::Version
111
112
  version: '0'
112
113
  required_rubygems_version: !ruby/object:Gem::Requirement
113
114
  requirements:
114
- - - '>='
115
+ - - ">="
115
116
  - !ruby/object:Gem::Version
116
117
  version: '0'
117
118
  requirements: []
118
119
  rubyforge_project:
119
- rubygems_version: 2.0.14.1
120
+ rubygems_version: 2.5.0
120
121
  signing_key:
121
122
  specification_version: 4
122
123
  summary: Phoenx generates Xcode projects (*.xcodeproj) and workspaces (*.xcworkspace)