xcake 0.8.12 → 0.9.3
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 +5 -5
- data/lib/xcake.rb +3 -4
- data/lib/xcake/command/make.rb +1 -3
- data/lib/xcake/constants.rb +10 -10
- data/lib/xcake/context.rb +0 -2
- data/lib/xcake/context/xcodeproj_context.rb +10 -7
- data/lib/xcake/core_ext/class.rb +14 -0
- data/lib/xcake/dependency_provider.rb +3 -3
- data/lib/xcake/dsl/build_phase/copy_files_build_phase.rb +1 -3
- data/lib/xcake/dsl/build_phase/shell_script_build_phase.rb +10 -0
- data/lib/xcake/dsl/build_rule.rb +76 -0
- data/lib/xcake/dsl/configurable.rb +10 -8
- data/lib/xcake/dsl/configuration/sugar.rb +1 -1
- data/lib/xcake/dsl/project.rb +1 -1
- data/lib/xcake/dsl/project/hooks.rb +4 -0
- data/lib/xcake/dsl/project/sugar.rb +13 -15
- data/lib/xcake/dsl/scheme.rb +2 -3
- data/lib/xcake/dsl/target.rb +19 -5
- data/lib/xcake/dsl/target/sugar.rb +22 -0
- data/lib/xcake/event_hooks.rb +10 -0
- data/lib/xcake/generator.rb +1 -0
- data/lib/xcake/generator/default_project_structure_generator.rb +5 -6
- data/lib/xcake/generator/project_generator.rb +3 -2
- data/lib/xcake/generator/scheme_generator.rb +34 -24
- data/lib/xcake/generator/target_build_rule_generator.rb +24 -0
- data/lib/xcake/generator/target_file_reference_generator.rb +11 -10
- data/lib/xcake/generator/target_framework_generator.rb +6 -6
- data/lib/xcake/generator/target_library_generator.rb +5 -6
- data/lib/xcake/path_classifier.rb +24 -20
- data/lib/xcake/ui.rb +9 -1
- data/lib/xcake/version.rb +1 -1
- data/lib/xcake/xcode/project.rb +16 -2
- data/lib/xcake/xcode/scheme_list.rb +0 -2
- data/lib/xcake/xcodeproj_ext/PBXGroup.rb +12 -10
- data/lib/xcake/xcodeproj_ext/PBXNativeTarget.rb +2 -2
- metadata +137 -91
- data/.gitattributes +0 -1
- data/.gitignore +0 -39
- data/.rspec +0 -2
- data/.travis.yml +0 -16
- data/.yardopts +0 -7
- data/CHANGELOG.md +0 -325
- data/CODE_OF_CONDUCT.md +0 -13
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -21
- data/README.md +0 -110
- data/Rakefile +0 -6
- data/bin/console +0 -10
- data/bin/setup +0 -7
- data/fastlane-plugin-xcake/Gemfile +0 -3
- data/fastlane-plugin-xcake/LICENSE +0 -21
- data/fastlane-plugin-xcake/README.md +0 -31
- data/fastlane-plugin-xcake/Rakefile +0 -6
- data/fastlane-plugin-xcake/fastlane-plugin-xcake.gemspec +0 -25
- data/fastlane-plugin-xcake/lib/fastlane/plugin/xcake.rb +0 -16
- data/fastlane-plugin-xcake/lib/fastlane/plugin/xcake/actions/xcake_action.rb +0 -34
- data/fastlane-plugin-xcake/lib/fastlane/plugin/xcake/version.rb +0 -5
- data/fastlane-plugin-xcake/spec/spec_helper.rb +0 -8
- data/hound.yml +0 -2
- data/lib/xcake/core_ext/array.rb +0 -5
- data/lib/xcake/core_ext/object.rb +0 -7
- data/rubocop.yml +0 -173
- data/rubocop_general.yml +0 -113
- data/xcake.gemspec +0 -40
@@ -71,5 +71,27 @@ module Xcake
|
|
71
71
|
build_phases << phase
|
72
72
|
phase
|
73
73
|
end
|
74
|
+
|
75
|
+
# Creates a new build rule for the
|
76
|
+
# target
|
77
|
+
#
|
78
|
+
# @param [String] name
|
79
|
+
# the name to use for the build rule
|
80
|
+
#
|
81
|
+
# @param [Proc] block
|
82
|
+
# an optional block that configures the build rule through the DSL.
|
83
|
+
#
|
84
|
+
# @return [BuildRule] the new xcode build rule
|
85
|
+
#
|
86
|
+
def build_rule(name, file_type, output_files, output_files_compiler_flags, script, &block)
|
87
|
+
rule = BuildRule.new(&block)
|
88
|
+
rule.name = name
|
89
|
+
rule.file_type = file_type
|
90
|
+
rule.output_files = output_files
|
91
|
+
rule.output_files_compiler_flags = output_files_compiler_flags
|
92
|
+
rule.script = script
|
93
|
+
build_rules << rule
|
94
|
+
rule
|
95
|
+
end
|
74
96
|
end
|
75
97
|
end
|
data/lib/xcake/event_hooks.rb
CHANGED
@@ -55,6 +55,11 @@ module Xcake
|
|
55
55
|
#
|
56
56
|
define_hooks :before_adding_system_framework
|
57
57
|
|
58
|
+
# Defines hook which is ran before we add build rules
|
59
|
+
# to a target
|
60
|
+
#
|
61
|
+
define_hooks :before_adding_build_rules
|
62
|
+
|
58
63
|
# Defines hook which is ran before we add build phases
|
59
64
|
# to a target
|
60
65
|
#
|
@@ -68,6 +73,11 @@ module Xcake
|
|
68
73
|
#
|
69
74
|
define_hooks :before_adding_file
|
70
75
|
|
76
|
+
# Defines hook which is ran before we add a custom build rule to
|
77
|
+
# a target
|
78
|
+
#
|
79
|
+
define_hooks :before_adding_custom_build_rule
|
80
|
+
|
71
81
|
# Defines hook which is ran before we add a custom build phase to
|
72
82
|
# a target
|
73
83
|
#
|
data/lib/xcake/generator.rb
CHANGED
@@ -8,7 +8,6 @@ module Xcake
|
|
8
8
|
# and targets have all of the same configurations.
|
9
9
|
#
|
10
10
|
class DefaultProjectStructureGenerator < Generator
|
11
|
-
|
12
11
|
def self.dependencies
|
13
12
|
[ProjectMetadataGenerator, TargetGenerator]
|
14
13
|
end
|
@@ -40,11 +39,11 @@ module Xcake
|
|
40
39
|
|
41
40
|
target.all_configurations.each do |c|
|
42
41
|
target.scheme "#{target.name}-#{c.name}" do |s|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
s.test_configuration = c.name
|
43
|
+
s.launch_configuration = c.name
|
44
|
+
s.profile_configuration = c.name
|
45
|
+
s.analyze_configuration = c.name
|
46
|
+
s.archive_configuration = c.name
|
48
47
|
end
|
49
48
|
end
|
50
49
|
end
|
@@ -1,13 +1,14 @@
|
|
1
1
|
module Xcake
|
2
2
|
class ProjectGenerator < Generator
|
3
3
|
def self.dependencies
|
4
|
-
Generator.descendants.
|
5
|
-
g
|
4
|
+
Generator.descendants.reject do |g|
|
5
|
+
g == self
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
def leave_project(project)
|
10
10
|
native_project = @context.native_object_for(project)
|
11
|
+
project.run_hook :before_save, native_project
|
11
12
|
native_project.save
|
12
13
|
project.run_hook :after_save
|
13
14
|
|
@@ -13,42 +13,52 @@ module Xcake
|
|
13
13
|
scheme_list = @context.scheme_list
|
14
14
|
native_target = @context.native_object_for(target)
|
15
15
|
|
16
|
-
target.schemes.each do |scheme|
|
16
|
+
target.schemes.each do |scheme|
|
17
|
+
scheme_list.supress_autocreation_of_target(native_target)
|
17
18
|
|
18
|
-
|
19
|
+
native_scheme = @context.native_object_for(scheme)
|
20
|
+
native_scheme.name = scheme.name
|
19
21
|
|
20
|
-
|
21
|
-
native_scheme.name = scheme.name
|
22
|
+
native_scheme.configure_with_targets(native_target, nil)
|
22
23
|
|
23
|
-
|
24
|
-
|
24
|
+
native_project = @context.native_object_for(@project)
|
25
|
+
native_unit_test_target = native_project.find_unit_test_target_for_target(target)
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
if native_unit_test_target
|
28
|
+
scheme_list.supress_autocreation_of_target(native_unit_test_target)
|
29
|
+
# native_scheme.add_build_target(native_unit_test_target, false)
|
30
|
+
native_scheme.add_test_target(native_unit_test_target)
|
31
|
+
end
|
29
32
|
|
30
|
-
|
31
|
-
# if native_target.library_target_type?
|
32
|
-
# build_action = native_scheme.build_action
|
33
|
+
native_ui_test_target = native_project.find_ui_test_target_for_target(target)
|
33
34
|
|
34
|
-
|
35
|
-
|
35
|
+
if native_ui_test_target
|
36
|
+
scheme_list.supress_autocreation_of_target(native_ui_test_target)
|
37
|
+
# native_scheme.add_build_target(native_ui_test_target, false)
|
38
|
+
native_scheme.add_test_target(native_ui_test_target)
|
39
|
+
end
|
36
40
|
|
37
|
-
|
38
|
-
|
41
|
+
# # TODO: Spec
|
42
|
+
# if native_target.library_target_type?
|
43
|
+
# build_action = native_scheme.build_action
|
39
44
|
|
40
|
-
|
41
|
-
|
42
|
-
native_scheme.launch_action.build_configuration = scheme.launch_configuration
|
43
|
-
native_scheme.profile_action.build_configuration = scheme.profile_configuration
|
44
|
-
native_scheme.analyze_action.build_configuration = scheme.analyze_configuration
|
45
|
-
native_scheme.archive_action.build_configuration = scheme.archive_configuration
|
45
|
+
# entry = Xcodeproj::XCScheme::BuildAction::Entry.initialize()
|
46
|
+
# entry.build_for_running(true)
|
46
47
|
|
47
|
-
|
48
|
+
# build_action.add_entry(entry)
|
49
|
+
# end
|
50
|
+
|
51
|
+
native_scheme.test_action.build_configuration = scheme.test_configuration
|
52
|
+
native_scheme.launch_action.build_configuration = scheme.launch_configuration
|
53
|
+
native_scheme.profile_action.build_configuration = scheme.profile_configuration
|
54
|
+
native_scheme.analyze_action.build_configuration = scheme.analyze_configuration
|
55
|
+
native_scheme.archive_action.build_configuration = scheme.archive_configuration
|
56
|
+
|
57
|
+
scheme_list.schemes << native_scheme
|
48
58
|
end
|
49
59
|
end
|
50
60
|
|
51
|
-
def leave_project(
|
61
|
+
def leave_project(_project)
|
52
62
|
scheme_list = @context.scheme_list
|
53
63
|
scheme_list.save
|
54
64
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Xcake
|
2
|
+
# This generator generates the build phases for each target
|
3
|
+
# in the project
|
4
|
+
#
|
5
|
+
class TargetBuildRuleGenerator < Generator
|
6
|
+
def self.dependencies
|
7
|
+
[TargetBuildPhaseGenerator]
|
8
|
+
end
|
9
|
+
|
10
|
+
def visit_target(target)
|
11
|
+
EventHooks.run_hook :before_adding_build_rules, target
|
12
|
+
|
13
|
+
native_target = @context.native_object_for(target)
|
14
|
+
|
15
|
+
target.build_rules.each do |rule|
|
16
|
+
EventHooks.run_hook :before_adding_custom_build_rule, rule, target
|
17
|
+
|
18
|
+
native_build_rule = @context.native_object_for(rule)
|
19
|
+
rule.configure_native_build_rule(native_build_rule, @context)
|
20
|
+
native_target.build_rules << native_build_rule
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -19,12 +19,12 @@ module Xcake
|
|
19
19
|
paths_without_directories = Dir.glob(reg_exp).reject do |f|
|
20
20
|
file_ext = File.extname(f)
|
21
21
|
disallowed_extensions = [
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
'.xcdatamodeld',
|
23
|
+
'.xcassets',
|
24
|
+
'.framework',
|
25
|
+
'.bundle'
|
26
26
|
]
|
27
|
-
|
27
|
+
|
28
28
|
File.directory?(f) && !disallowed_extensions.include?(file_ext)
|
29
29
|
end
|
30
30
|
paths = paths_without_directories.map do |f|
|
@@ -51,11 +51,12 @@ module Xcake
|
|
51
51
|
|
52
52
|
build_phase_symbol = PathClassifier.classification_for_path(path)
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
return unless PathClassifier.should_create_build_phase_for_classification?(build_phase_symbol)
|
55
|
+
return if target.info_plist_paths.include?(path)
|
56
|
+
|
57
|
+
build_phase_class = Xcodeproj::Project::Object.const_get(build_phase_symbol)
|
58
|
+
build_phase = native_target.build_phase_by_class(build_phase_class)
|
59
|
+
build_phase.add_file_reference(file_reference)
|
59
60
|
end
|
60
61
|
end
|
61
62
|
end
|
@@ -5,14 +5,14 @@ module Xcake
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def visit_target(target)
|
8
|
-
|
9
|
-
EventHooks.run_hook :before_adding_system_framework, target
|
8
|
+
return if target.system_frameworks.nil?
|
10
9
|
|
11
|
-
|
10
|
+
EventHooks.run_hook :before_adding_system_framework, target
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
native_target = @context.native_object_for(target)
|
13
|
+
|
14
|
+
system_frameworks = target.system_frameworks
|
15
|
+
native_target.add_system_frameworks(system_frameworks)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -5,15 +5,14 @@ module Xcake
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def visit_target(target)
|
8
|
-
|
9
8
|
system_libraries = target.system_libraries.to_a
|
10
9
|
|
11
|
-
|
12
|
-
|
10
|
+
return if system_libraries.empty?
|
11
|
+
|
12
|
+
EventHooks.run_hook :before_adding_system_library, target
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
end
|
14
|
+
native_target = @context.native_object_for(target)
|
15
|
+
native_target.add_system_libraries(system_libraries)
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
@@ -7,7 +7,7 @@ module Xcake
|
|
7
7
|
EXTENSION_MAPPINGS = {
|
8
8
|
PBXFrameworksBuildPhase: %w(.a .dylib .so .framework).freeze,
|
9
9
|
PBXHeadersBuildPhase: %w(.h .hpp).freeze,
|
10
|
-
PBXSourcesBuildPhase: %w(.c .m .mm .cpp .swift .xcdatamodeld).freeze,
|
10
|
+
PBXSourcesBuildPhase: %w(.c .m .mm .cpp .swift .xcdatamodeld .java).freeze,
|
11
11
|
PBXResourcesBuildPhase: %w(.xcassets).freeze
|
12
12
|
}.freeze
|
13
13
|
|
@@ -20,8 +20,9 @@ module Xcake
|
|
20
20
|
# into the project
|
21
21
|
#
|
22
22
|
def self.should_include_path?(path)
|
23
|
-
return false if
|
24
|
-
return false if
|
23
|
+
return false if locale_container?(path)
|
24
|
+
return false if inside_classified_container?(path)
|
25
|
+
|
25
26
|
true
|
26
27
|
end
|
27
28
|
|
@@ -31,6 +32,7 @@ module Xcake
|
|
31
32
|
end
|
32
33
|
|
33
34
|
return :PBXResourcesBuildPhase if classification.nil?
|
35
|
+
|
34
36
|
classification.first
|
35
37
|
end
|
36
38
|
|
@@ -38,29 +40,31 @@ module Xcake
|
|
38
40
|
classification != :PBXHeadersBuildPhase
|
39
41
|
end
|
40
42
|
|
41
|
-
|
43
|
+
class << self
|
44
|
+
private
|
42
45
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
46
|
+
def locale_container?(path)
|
47
|
+
components = path.split('/')
|
48
|
+
File.extname(components.last) == '.lproj'
|
49
|
+
end
|
47
50
|
|
48
|
-
|
49
|
-
|
51
|
+
def inside_classified_container?(path)
|
52
|
+
components = path.split('/')
|
50
53
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
+
classified_component_index = components.index do |c|
|
55
|
+
classified?(c)
|
56
|
+
end
|
54
57
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
58
|
+
if !classified_component_index.nil?
|
59
|
+
classified_component_index < (components.length - 1)
|
60
|
+
else
|
61
|
+
false
|
62
|
+
end
|
59
63
|
end
|
60
|
-
end
|
61
64
|
|
62
|
-
|
63
|
-
|
65
|
+
def classified?(path)
|
66
|
+
EXTENSION_MAPPINGS.values.flatten.any? { |ext| File.extname(path) == ext }
|
67
|
+
end
|
64
68
|
end
|
65
69
|
end
|
66
70
|
end
|
data/lib/xcake/ui.rb
CHANGED
@@ -38,7 +38,7 @@ module Xcake
|
|
38
38
|
end
|
39
39
|
|
40
40
|
EventHooks.before_attaching_xcconfig do |configuration|
|
41
|
-
board.puts_indented "- Attaching XCConfig #{configuration.configuration_file} to build configuration #{configuration.name}"
|
41
|
+
board.puts_indented "- Attaching XCConfig #{configuration.configuration_file} to build configuration #{configuration.name}" # rubocop:disable Metrics/LineLength
|
42
42
|
end
|
43
43
|
|
44
44
|
EventHooks.before_adding_system_library do |target|
|
@@ -53,6 +53,10 @@ module Xcake
|
|
53
53
|
board.puts_indented "- Integrating System Frameworks #{target.system_frameworks} for #{target}"
|
54
54
|
end
|
55
55
|
|
56
|
+
EventHooks.before_adding_build_rules do |target|
|
57
|
+
board.puts_indented "- Creating build rules for #{target}"
|
58
|
+
end
|
59
|
+
|
56
60
|
EventHooks.before_adding_build_phases do |target|
|
57
61
|
board.puts_indented "- Creating build phases for #{target}"
|
58
62
|
end
|
@@ -65,6 +69,10 @@ module Xcake
|
|
65
69
|
board.puts "- Adding #{node.path}"
|
66
70
|
end
|
67
71
|
|
72
|
+
EventHooks.before_adding_custom_build_rule do |rule, target|
|
73
|
+
board.puts "- Adding \"#{rule}\" to #{target}"
|
74
|
+
end
|
75
|
+
|
68
76
|
EventHooks.before_adding_custom_build_phase do |phase, target|
|
69
77
|
board.puts "- Adding \"#{phase}\" to #{target}"
|
70
78
|
end
|
data/lib/xcake/version.rb
CHANGED
data/lib/xcake/xcode/project.rb
CHANGED
@@ -140,9 +140,8 @@ module Xcake
|
|
140
140
|
# @return [PBXGroup] existing or new xcode group
|
141
141
|
#
|
142
142
|
def group_for_file_reference_path(path)
|
143
|
-
clean_path = path.cleanpath
|
144
143
|
group = variant_group_for_path(path)
|
145
|
-
group
|
144
|
+
group ||= group_for_path(path)
|
146
145
|
group
|
147
146
|
end
|
148
147
|
|
@@ -163,6 +162,7 @@ module Xcake
|
|
163
162
|
base_name = group_path.basename
|
164
163
|
|
165
164
|
return nil unless base_name.to_s.include?('.lproj')
|
165
|
+
|
166
166
|
parent_group = group_for_path(group_path)
|
167
167
|
|
168
168
|
group = parent_group[path.basename.to_s]
|
@@ -181,6 +181,7 @@ module Xcake
|
|
181
181
|
group_path = path.dirname.cleanpath
|
182
182
|
|
183
183
|
return main_group unless group_path.to_s != '.'
|
184
|
+
|
184
185
|
main_group.child_for_path(group_path.to_s)
|
185
186
|
end
|
186
187
|
|
@@ -198,6 +199,19 @@ module Xcake
|
|
198
199
|
t.name == "#{target.name}Tests"
|
199
200
|
end
|
200
201
|
end
|
202
|
+
|
203
|
+
# Finds a ui test target for a xcode target
|
204
|
+
#
|
205
|
+
# @param [Target] target
|
206
|
+
# target to find a xcode target for.
|
207
|
+
#
|
208
|
+
# @return [Target] ui test target
|
209
|
+
#
|
210
|
+
def find_ui_test_target_for_target(target)
|
211
|
+
targets.find do |t|
|
212
|
+
t.name == "#{target.name}UITests"
|
213
|
+
end
|
214
|
+
end
|
201
215
|
end
|
202
216
|
end
|
203
217
|
end
|