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.
- checksums.yaml +7 -0
- data/bin/phoenx +9 -0
- data/lib/phoenx.rb +28 -0
- data/lib/phoenx/cli/cli_factory.rb +166 -0
- data/lib/phoenx/cli/command.rb +185 -0
- data/lib/phoenx/cli/option.rb +34 -0
- data/lib/phoenx/constants.rb +21 -0
- data/lib/phoenx/entities/configuration.rb +17 -0
- data/lib/phoenx/entities/dependency.rb +19 -0
- data/lib/phoenx/entities/project.rb +45 -0
- data/lib/phoenx/entities/scheme.rb +20 -0
- data/lib/phoenx/entities/target.rb +107 -0
- data/lib/phoenx/entities/workspace.rb +34 -0
- data/lib/phoenx/gem_version.rb +5 -0
- data/lib/phoenx/use_cases/generate_project.rb +106 -0
- data/lib/phoenx/use_cases/generate_target.rb +552 -0
- data/lib/phoenx/use_cases/generate_workspace.rb +74 -0
- data/lib/phoenx/utilities/files_utils.rb +22 -0
- data/lib/phoenx/utilities/xcodeproj_utils.rb +102 -0
- data/lib/phoenx/validators/configuration_validator.rb +22 -0
- data/lib/phoenx/validators/project_validator.rb +22 -0
- data/lib/phoenx/validators/workspace_validator.rb +29 -0
- metadata +145 -0
@@ -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,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: []
|