phoenx 0.1.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.
@@ -0,0 +1,74 @@
1
+ module Phoenx
2
+
3
+ class GenerateWorkspace
4
+
5
+ :project_files
6
+ :workspace
7
+
8
+ def initialize(workspace)
9
+
10
+ @workspace = workspace
11
+ @project_files = []
12
+
13
+ end
14
+
15
+ def generate_workspace
16
+
17
+ workspace = Xcodeproj::Workspace.new(@workspace.main_project_path + @workspace.main_project_name + "." + XCODE_PROJECT_EXTENSION)
18
+
19
+ @workspace.projects.each do |key,value|
20
+
21
+ workspace << value + key + "." + XCODE_PROJECT_EXTENSION
22
+
23
+ end
24
+
25
+ workspace.save_as(@workspace.name + "." + XCODE_WORKSPACE_EXTENSION)
26
+
27
+ end
28
+
29
+ def generate_project(name, value)
30
+
31
+ previous = Dir.pwd
32
+ path = value
33
+ if path == nil
34
+
35
+ path = Dir.pwd
36
+
37
+ end
38
+
39
+ Dir.chdir(path)
40
+
41
+ specs = Dir[name + '.' + PROJECT_EXTENSION]
42
+
43
+ file = File.read(specs.first)
44
+ spec = eval(file)
45
+
46
+ generator = Phoenx::GenerateProject.new spec
47
+ generator.build
48
+
49
+ Dir.chdir(previous)
50
+
51
+ end
52
+
53
+ def generate_projects
54
+
55
+ @workspace.projects.each do |key,value|
56
+
57
+ self.generate_project(key,value)
58
+
59
+ end
60
+
61
+ self.generate_project(@workspace.main_project_name,@workspace.main_project_path)
62
+
63
+ end
64
+
65
+ def generate
66
+
67
+ self.generate_projects
68
+ self.generate_workspace
69
+
70
+ end
71
+
72
+ end
73
+
74
+ end
@@ -0,0 +1,22 @@
1
+ module Phoenx
2
+
3
+ def Phoenx.merge_files_array(files)
4
+
5
+ if files == nil
6
+
7
+ return nil
8
+
9
+ end
10
+
11
+ resources = []
12
+ files.each do |source|
13
+
14
+ resources.concat Dir[source]
15
+
16
+ end
17
+
18
+ return resources
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,102 @@
1
+ require 'xcodeproj'
2
+
3
+ module Phoenx
4
+
5
+ def Phoenx.is_bundle?(file)
6
+
7
+ return file.include?('xcassets') || file.include?('bundle')
8
+
9
+ end
10
+
11
+ def Phoenx.add_groups_for_files(project,files)
12
+
13
+ files.each do |path|
14
+
15
+ groups = File.dirname(path).split("/")
16
+ concate = ""
17
+
18
+ groups.each do |g|
19
+
20
+ if Phoenx.is_bundle?(g)
21
+
22
+ break
23
+
24
+ end
25
+
26
+ concate += g + "/"
27
+ group_ref = project.main_group.find_subpath(concate, true)
28
+ group_ref.set_path(g)
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ def Phoenx.get_or_add_files(project, files)
37
+
38
+ resources = Phoenx.merge_files_array(files)
39
+
40
+ Phoenx.add_groups_for_files(project, resources)
41
+
42
+ resources.each do |source|
43
+
44
+ Phoenx.get_or_add_file(project,source)
45
+
46
+ end
47
+
48
+ end
49
+
50
+ def Phoenx.get_or_add_file(project,file)
51
+
52
+ filename = File.basename(file)
53
+ dir = File.dirname(file)
54
+
55
+ group = project.main_group.find_subpath(dir, false)
56
+ file_ref = group.find_file_by_path(filename)
57
+
58
+ unless file_ref != nil
59
+
60
+ file_ref = group.new_file(filename)
61
+
62
+ end
63
+
64
+ return file_ref
65
+
66
+ end
67
+
68
+ def Phoenx.set_target_build_settings_defaults(target)
69
+
70
+ target.build_configuration_list.build_configurations.each do |config|
71
+
72
+ config.build_settings = {}
73
+
74
+ end
75
+
76
+ end
77
+
78
+ def Phoenx.set_project_build_settings_defaults(project)
79
+
80
+ project.build_configuration_list.build_configurations.each do |config|
81
+
82
+ config.build_settings = {}
83
+
84
+ end
85
+
86
+ end
87
+
88
+ def Phoenx.target_for_name(project,name)
89
+
90
+ project.targets.each do |t|
91
+
92
+ if t.name == name
93
+
94
+ return t
95
+
96
+ end
97
+
98
+ end
99
+
100
+ end
101
+
102
+ end
@@ -0,0 +1,22 @@
1
+ module Phoenx
2
+
3
+ class ConfigurationValidator
4
+
5
+ ERROR_NONE = 0
6
+ ERROR_INVALID_NAME = 1
7
+
8
+ def validate(configuration)
9
+
10
+ if configuration.name == nil || configuration.name == ""
11
+
12
+ return ERROR_INVALID_NAME
13
+
14
+ end
15
+
16
+ return ERROR_NONE
17
+
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,22 @@
1
+ module Phoenx
2
+
3
+ class ProjectValidator
4
+
5
+ ERROR_NONE = 0
6
+ ERROR_INVALID_NAME = 1
7
+
8
+ def validate(project)
9
+
10
+ if project.name == nil || project.name == ""
11
+
12
+ return ERROR_INVALID_NAME
13
+
14
+ end
15
+
16
+ return ERROR_NONE
17
+
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,29 @@
1
+ module Phoenx
2
+
3
+ class WorkspaceValidator
4
+
5
+ ERROR_NONE = 0
6
+ ERROR_INVALID_NAME = 1
7
+ ERROR_INVALID_MAIN_PROJECT = 2
8
+
9
+ def validate(workspace)
10
+
11
+ if workspace.name == nil || workspace.name == ""
12
+
13
+ return ERROR_INVALID_NAME
14
+
15
+ end
16
+
17
+ if workspace.main_project == nil || workspace.main_project == ""
18
+
19
+ return ERROR_INVALID_MAIN_PROJECT
20
+
21
+ end
22
+
23
+ return ERROR_NONE
24
+
25
+ end
26
+
27
+ end
28
+
29
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: phoenx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jens Meder
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: xcodeproj
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0.beta.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0.beta.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: git
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.2.9.1
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '1.2'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.2.9.1
47
+ - !ruby/object:Gem::Dependency
48
+ name: colored
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.2'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.2'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.11'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.11'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.0'
89
+ description: An Xcode Project Generator
90
+ email:
91
+ - gems@jensmeder.de
92
+ executables:
93
+ - phoenx
94
+ extensions: []
95
+ extra_rdoc_files: []
96
+ files:
97
+ - bin/phoenx
98
+ - lib/phoenx.rb
99
+ - lib/phoenx/cli/cli_factory.rb
100
+ - lib/phoenx/cli/command.rb
101
+ - lib/phoenx/cli/option.rb
102
+ - lib/phoenx/constants.rb
103
+ - lib/phoenx/entities/configuration.rb
104
+ - lib/phoenx/entities/dependency.rb
105
+ - lib/phoenx/entities/project.rb
106
+ - lib/phoenx/entities/scheme.rb
107
+ - lib/phoenx/entities/target.rb
108
+ - lib/phoenx/entities/workspace.rb
109
+ - lib/phoenx/gem_version.rb
110
+ - lib/phoenx/use_cases/generate_project.rb
111
+ - lib/phoenx/use_cases/generate_target.rb
112
+ - lib/phoenx/use_cases/generate_workspace.rb
113
+ - lib/phoenx/utilities/files_utils.rb
114
+ - lib/phoenx/utilities/xcodeproj_utils.rb
115
+ - lib/phoenx/validators/configuration_validator.rb
116
+ - lib/phoenx/validators/project_validator.rb
117
+ - lib/phoenx/validators/workspace_validator.rb
118
+ homepage: https://www.github.com/jensmeder/Phoenx
119
+ licenses:
120
+ - MIT
121
+ metadata: {}
122
+ post_install_message:
123
+ rdoc_options: []
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 2.5.1
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: Phoenx generates Xcode projects (*.xcodeproj) and workspaces (*.xcworkspace)
142
+ for iOS, OSX, and tvOS using specification and xcconfig files. Specify your project
143
+ once and never worry about broken Xcode projects or merge conflicts in pbxproj files
144
+ ever again.
145
+ test_files: []