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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5a7a1127fc030c5c2bb13ee51fdcdf6bd4c6ea99c3b64c6ad00c9853b9f9418a
|
4
|
+
data.tar.gz: 037f2aa99231914e51e86e0157768f2bfd839f2ad9583968b2a0feeb095676a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20b1eda82a475705f960ff9f7497511c40ea1fd79545ae2471cb8572b4e6446ac416a22d4123343821478ace940cb1b10fb68fe1abc1f55e9a06fa4881bfa655
|
7
|
+
data.tar.gz: c63ee68433c8ee6db3229cac7605c279b18c976fad4297e680cc0a75d192da6d213fc759b58d9c40f6ac96dfd13f67ef55cfb3a823c24262bf1655008c444484
|
data/lib/xcake.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require 'xcake/core_ext/
|
2
|
-
require 'xcake/core_ext/object'
|
1
|
+
require 'xcake/core_ext/class'
|
3
2
|
require 'xcake/core_ext/string'
|
4
3
|
|
5
4
|
require 'xcake/xcode/project'
|
@@ -39,12 +38,12 @@ require 'xcake/dsl/project/hooks'
|
|
39
38
|
|
40
39
|
require 'xcake/dsl/scheme'
|
41
40
|
|
42
|
-
require 'xcake/dsl/scheme'
|
43
|
-
|
44
41
|
require 'xcake/dsl/target'
|
45
42
|
require 'xcake/dsl/target/sugar'
|
46
43
|
require 'xcake/dsl/target/configurable'
|
47
44
|
|
45
|
+
require 'xcake/dsl/build_rule'
|
46
|
+
|
48
47
|
require 'xcake/dsl/build_phase'
|
49
48
|
require 'xcake/dsl/build_phase/headers_build_phase'
|
50
49
|
require 'xcake/dsl/build_phase/shell_script_build_phase'
|
data/lib/xcake/command/make.rb
CHANGED
@@ -7,9 +7,7 @@ module Xcake
|
|
7
7
|
def run
|
8
8
|
file_path = "#{Dir.pwd}/Cakefile"
|
9
9
|
|
10
|
-
unless File.exist?(file_path)
|
11
|
-
raise Xcake::Informative, "Couldn't find Cakefile"
|
12
|
-
end
|
10
|
+
raise Xcake::Informative, "Couldn't find Cakefile" unless File.exist?(file_path)
|
13
11
|
|
14
12
|
EventHooks.run_hook :before_cakefile_read
|
15
13
|
file_contents = File.read(file_path)
|
data/lib/xcake/constants.rb
CHANGED
@@ -11,10 +11,10 @@ module Xcake
|
|
11
11
|
]
|
12
12
|
}.freeze,
|
13
13
|
[:ios, :ui_test_bundle] => {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
'LD_RUNPATH_SEARCH_PATHS' => [
|
15
|
+
'$(inherited)',
|
16
|
+
'@executable_path/Frameworks',
|
17
|
+
'@loader_path/Frameworks'
|
18
18
|
]
|
19
19
|
}.freeze,
|
20
20
|
[:osx, :unit_test_bundle] => {
|
@@ -25,10 +25,10 @@ module Xcake
|
|
25
25
|
]
|
26
26
|
}.freeze,
|
27
27
|
[:osx, :ui_test_bundle] => {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
'LD_RUNPATH_SEARCH_PATHS' => [
|
29
|
+
'$(inherited)',
|
30
|
+
'@executable_path/../Frameworks',
|
31
|
+
'@loader_path/../Frameworks'
|
32
32
|
]
|
33
33
|
}.freeze
|
34
34
|
).freeze
|
@@ -60,8 +60,8 @@ module Xcake
|
|
60
60
|
#
|
61
61
|
# @return [Hash] The common build settings
|
62
62
|
#
|
63
|
-
def self.common_build_settings(type, platform = nil, deployment_target = nil, target_product_type = nil, language = :objc)
|
64
|
-
target_product_type = (PRODUCT_TYPE_UTI.find { |_, v| v == target_product_type } || [target_product_type || :application])[0]
|
63
|
+
def self.common_build_settings(type, platform = nil, deployment_target = nil, target_product_type = nil, language = :objc) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/LineLength
|
64
|
+
target_product_type = (PRODUCT_TYPE_UTI.find { |_, v| v == target_product_type } || [target_product_type || :application])[0] # rubocop:disable Metrics/LineLength
|
65
65
|
common_settings = COMMON_BUILD_SETTINGS
|
66
66
|
|
67
67
|
# Use intersecting settings for all key sets as base
|
data/lib/xcake/context.rb
CHANGED
@@ -7,10 +7,12 @@ module Xcake
|
|
7
7
|
|
8
8
|
attr_accessor :project
|
9
9
|
|
10
|
-
def create_object_for(dsl_object)
|
10
|
+
def create_object_for(dsl_object) # rubocop:disable Metrics/CyclomaticComplexity
|
11
11
|
case dsl_object
|
12
12
|
when BuildPhase
|
13
13
|
create_object_for_build_phase(dsl_object)
|
14
|
+
when BuildRule
|
15
|
+
create_object_for_build_rule(dsl_object)
|
14
16
|
when Project
|
15
17
|
create_object_for_project(dsl_object)
|
16
18
|
when Target
|
@@ -26,13 +28,14 @@ module Xcake
|
|
26
28
|
@project.new(build_phase.build_phase_type)
|
27
29
|
end
|
28
30
|
|
31
|
+
def create_object_for_build_rule(_build_rule)
|
32
|
+
@project.new(Xcodeproj::Project::Object::PBXBuildRule)
|
33
|
+
end
|
34
|
+
|
29
35
|
def create_object_for_project(project)
|
30
|
-
|
31
36
|
project_path = "./#{project.name}.xcodeproj"
|
32
|
-
|
33
|
-
if File.exist?(project_path)
|
34
|
-
FileUtils.remove_dir(project_path)
|
35
|
-
end
|
37
|
+
|
38
|
+
FileUtils.remove_dir(project_path) if File.exist?(project_path)
|
36
39
|
|
37
40
|
@project = Xcode::Project.new(project_path, true)
|
38
41
|
@project.setup_for_xcake
|
@@ -47,7 +50,7 @@ module Xcake
|
|
47
50
|
@project.new_configuration(configuration)
|
48
51
|
end
|
49
52
|
|
50
|
-
def create_object_for_scheme(
|
53
|
+
def create_object_for_scheme(_scheme)
|
51
54
|
Xcode::Scheme.new
|
52
55
|
end
|
53
56
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Xcake
|
2
|
+
module CoreExtensions
|
3
|
+
# @example Including in a class
|
4
|
+
# Class.send(:include, Xcake::CoreExtensions::ClassDescendants) # done with send because of old ruby versions
|
5
|
+
#
|
6
|
+
module ClassDescendants
|
7
|
+
# Returns all descendants of a class
|
8
|
+
#
|
9
|
+
def descendants
|
10
|
+
ObjectSpace.each_object(singleton_class).select { |klass| klass < self }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -7,9 +7,9 @@ module Xcake
|
|
7
7
|
def initialize(dependency_class)
|
8
8
|
plugins = dependency_class.load_plugins
|
9
9
|
|
10
|
-
@dependency_graph = plugins.
|
11
|
-
[p
|
12
|
-
end
|
10
|
+
@dependency_graph = plugins.each_with_object({}) do |p, hash|
|
11
|
+
hash[p] = p.dependencies
|
12
|
+
end
|
13
13
|
end
|
14
14
|
|
15
15
|
def tsort_each_node(&block)
|
@@ -29,9 +29,7 @@ module Xcake
|
|
29
29
|
@files.each do |file|
|
30
30
|
file_reference = context.file_reference_for_path(file)
|
31
31
|
build_file = native_build_phase.add_file_reference(file_reference)
|
32
|
-
if code_sign
|
33
|
-
build_file.settings = { 'ATTRIBUTES' => ['CodeSignOnCopy'] }
|
34
|
-
end
|
32
|
+
build_file.settings = { 'ATTRIBUTES' => ['CodeSignOnCopy'] } if code_sign
|
35
33
|
end
|
36
34
|
end
|
37
35
|
|
@@ -8,6 +8,12 @@ module Xcake
|
|
8
8
|
# String coataining the contents of the script to run
|
9
9
|
attr_accessor :script
|
10
10
|
|
11
|
+
# input/output paths
|
12
|
+
attr_accessor :input_paths
|
13
|
+
attr_accessor :output_paths
|
14
|
+
attr_accessor :input_file_list_paths
|
15
|
+
attr_accessor :output_file_list_paths
|
16
|
+
|
11
17
|
def build_phase_type
|
12
18
|
Xcodeproj::Project::Object::PBXShellScriptBuildPhase
|
13
19
|
end
|
@@ -15,6 +21,10 @@ module Xcake
|
|
15
21
|
def configure_native_build_phase(native_build_phase, _context)
|
16
22
|
native_build_phase.name = name
|
17
23
|
native_build_phase.shell_script = script.strip_heredoc
|
24
|
+
native_build_phase.input_paths = input_paths || []
|
25
|
+
native_build_phase.output_paths = output_paths || []
|
26
|
+
native_build_phase.input_file_list_paths = input_file_list_paths || []
|
27
|
+
native_build_phase.output_file_list_paths = output_file_list_paths || []
|
18
28
|
end
|
19
29
|
|
20
30
|
def to_s
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Xcake
|
2
|
+
# This class is used to describe a build rule for a
|
3
|
+
# Xcode project; This forms part of the DSL
|
4
|
+
# and is usually stored in files named `Cakefile`.
|
5
|
+
#
|
6
|
+
class BuildRule
|
7
|
+
# @return [String] the name of the rule.
|
8
|
+
#
|
9
|
+
attr_accessor :name
|
10
|
+
|
11
|
+
# @return [String] the type of the files that should be processed by
|
12
|
+
# this rule.
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# `pattern.proxy`.
|
16
|
+
#
|
17
|
+
attr_accessor :file_type
|
18
|
+
|
19
|
+
# @return [ObjectList<PBXFileReference>] the file references for the
|
20
|
+
# output files.
|
21
|
+
#
|
22
|
+
attr_accessor :output_files
|
23
|
+
|
24
|
+
# @return [ObjectList<String>] the compiler flags used when creating the
|
25
|
+
# respective output files.
|
26
|
+
#
|
27
|
+
attr_accessor :output_files_compiler_flags
|
28
|
+
|
29
|
+
# @return [String] the content of the script to use for the build rule.
|
30
|
+
#
|
31
|
+
# @note This attribute is present if the #{#compiler_spec} is
|
32
|
+
# `com.apple.compilers.proxy.script`
|
33
|
+
#
|
34
|
+
attr_accessor :script
|
35
|
+
|
36
|
+
# @param [Proc] block
|
37
|
+
# an optional block that configures the build rule through the DSL.
|
38
|
+
#
|
39
|
+
# @example Creating a Build Rule.
|
40
|
+
#
|
41
|
+
# BuildRule.new do |p|
|
42
|
+
# p.name "test"
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
def initialize
|
46
|
+
@output_files = []
|
47
|
+
@output_files_compiler_flags = []
|
48
|
+
|
49
|
+
yield(self) if block_given?
|
50
|
+
end
|
51
|
+
|
52
|
+
# This method is called when generating the build rules
|
53
|
+
# subclasses should implement this to handle the
|
54
|
+
# configuration of the build phase
|
55
|
+
#
|
56
|
+
def configure_native_build_rule(native_build_rule, _context)
|
57
|
+
native_build_rule.name = name
|
58
|
+
native_build_rule.compiler_spec = 'com.apple.compilers.proxy.script'
|
59
|
+
native_build_rule.file_type = file_type
|
60
|
+
native_build_rule.script = script.strip_heredoc
|
61
|
+
if output_files_compiler_flags.empty?
|
62
|
+
output_files.each do |file|
|
63
|
+
native_build_rule.add_output_file(file)
|
64
|
+
end
|
65
|
+
else
|
66
|
+
output_files.zip(output_files_compiler_flags).each do |file, flag|
|
67
|
+
native_build_rule.add_output_file(file, flag)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def to_s
|
73
|
+
"BuildRule<#{name}>"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -39,9 +39,11 @@ module Xcake
|
|
39
39
|
private
|
40
40
|
|
41
41
|
def copy_parent_configurations
|
42
|
+
return unless parent_configurable
|
43
|
+
|
42
44
|
parent_configurable.all_configurations.each do |c|
|
43
45
|
configuration(c.name, c.type)
|
44
|
-
end
|
46
|
+
end
|
45
47
|
end
|
46
48
|
|
47
49
|
public
|
@@ -93,13 +95,13 @@ module Xcake
|
|
93
95
|
default_settings = default_settings_for_type(type)
|
94
96
|
configurations = configurations_of_type(type)
|
95
97
|
|
96
|
-
if name.nil?
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
98
|
+
build_configuration = if name.nil?
|
99
|
+
configurations.first
|
100
|
+
else
|
101
|
+
configurations.detect do |c|
|
102
|
+
c.name == name.to_s
|
103
|
+
end
|
104
|
+
end
|
103
105
|
|
104
106
|
if build_configuration.nil?
|
105
107
|
|
data/lib/xcake/dsl/project.rb
CHANGED
@@ -89,26 +89,24 @@ module Xcake
|
|
89
89
|
private
|
90
90
|
|
91
91
|
def configure_test_target_for_host_target(test_target, host_target)
|
92
|
-
|
93
92
|
test_target.target_dependencies << host_target
|
94
93
|
test_target.platform = host_target.platform
|
95
94
|
test_target.deployment_target = host_target.deployment_target
|
96
95
|
test_target.language = host_target.language
|
97
96
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
end
|
97
|
+
return unless host_target.type == :application
|
98
|
+
|
99
|
+
test_target.all_configurations.each do |c|
|
100
|
+
# Do nothing as they break UITests
|
101
|
+
# For more details https://github.com/jcampbell05/xcake/issues/115
|
102
|
+
next if test_target.type == :ui_test_bundle
|
103
|
+
|
104
|
+
c.settings['BUNDLE_LOADER'] = '$(TEST_HOST)'
|
105
|
+
c.settings['TEST_HOST'] = if host_target.platform == :osx
|
106
|
+
"$(BUILT_PRODUCTS_DIR)/#{host_target.name}.app/Contents/MacOS/#{host_target.name}"
|
107
|
+
else
|
108
|
+
"$(BUILT_PRODUCTS_DIR)/#{host_target.name}.app/#{host_target.name}"
|
109
|
+
end
|
112
110
|
end
|
113
111
|
end
|
114
112
|
|
data/lib/xcake/dsl/scheme.rb
CHANGED
@@ -7,13 +7,13 @@ module Xcake
|
|
7
7
|
include Visitable
|
8
8
|
|
9
9
|
# The name for the scheme
|
10
|
-
#
|
10
|
+
#
|
11
11
|
attr_accessor :name
|
12
12
|
|
13
13
|
# The configuration to use when testing
|
14
14
|
#
|
15
15
|
# Defaults to "Debug"
|
16
|
-
#
|
16
|
+
#
|
17
17
|
attr_accessor :test_configuration
|
18
18
|
|
19
19
|
# The configuration to use when launching
|
@@ -41,7 +41,6 @@ module Xcake
|
|
41
41
|
attr_accessor :archive_configuration
|
42
42
|
|
43
43
|
def initialize(name)
|
44
|
-
|
45
44
|
@name = name
|
46
45
|
@test_configuration = 'Debug'
|
47
46
|
@launch_configuration = 'Debug'
|
data/lib/xcake/dsl/target.rb
CHANGED
@@ -42,6 +42,11 @@ module Xcake
|
|
42
42
|
#
|
43
43
|
attr_accessor :build_phases
|
44
44
|
|
45
|
+
# @return [Array<BuildRule>] the list
|
46
|
+
# of build rules for the project.
|
47
|
+
#
|
48
|
+
attr_accessor :build_rules
|
49
|
+
|
45
50
|
# @!group File patterns
|
46
51
|
|
47
52
|
#
|
@@ -131,7 +136,7 @@ module Xcake
|
|
131
136
|
#
|
132
137
|
# spec.include_files = "Classes/**/*.{h,m}"
|
133
138
|
#
|
134
|
-
|
139
|
+
attr_writer :include_files
|
135
140
|
|
136
141
|
# @return [Array or String] files to exclude for the target.
|
137
142
|
# Supports regular expressions
|
@@ -153,7 +158,7 @@ module Xcake
|
|
153
158
|
#
|
154
159
|
# spec.system_frameworks = ["Foundation"]
|
155
160
|
#
|
156
|
-
|
161
|
+
attr_writer :system_frameworks
|
157
162
|
|
158
163
|
# @return [Array<String>] system libraries to include for the target
|
159
164
|
#
|
@@ -177,23 +182,28 @@ module Xcake
|
|
177
182
|
#
|
178
183
|
attr_accessor :schemes
|
179
184
|
|
185
|
+
# @param [Project] project
|
186
|
+
# the project the target belongs to.
|
187
|
+
#
|
180
188
|
# @param [Proc] block
|
181
189
|
# an optional block that configures the target through the DSL.
|
182
190
|
#
|
183
191
|
# @example Creating a Target.
|
184
192
|
#
|
185
|
-
# Target.new do |t|
|
193
|
+
# Target.new(project) do |t|
|
186
194
|
# t.name "test"
|
187
195
|
# end
|
188
196
|
#
|
189
|
-
def initialize
|
197
|
+
def initialize(project)
|
190
198
|
@pinned_build_phases = []
|
191
199
|
@build_phases = []
|
200
|
+
@build_rules = []
|
192
201
|
@exclude_files = []
|
193
202
|
@linked_targets = []
|
194
203
|
@system_libraries = []
|
195
204
|
@target_dependencies = []
|
196
205
|
@schemes = []
|
206
|
+
@project = project
|
197
207
|
|
198
208
|
yield(self) if block_given?
|
199
209
|
end
|
@@ -203,7 +213,7 @@ module Xcake
|
|
203
213
|
# Creates a new scheme for the target
|
204
214
|
#
|
205
215
|
# @param [String] name
|
206
|
-
# the name of the new scheme
|
216
|
+
# the name of the new scheme
|
207
217
|
#
|
208
218
|
# @return [Scheme] the scheme
|
209
219
|
# the newly created scheme
|
@@ -226,6 +236,10 @@ module Xcake
|
|
226
236
|
@system_frameworks ||= default_system_frameworks_for(platform)
|
227
237
|
end
|
228
238
|
|
239
|
+
def info_plist_paths
|
240
|
+
all_configurations.map { |config| config.settings['INFOPLIST_FILE'] }.uniq
|
241
|
+
end
|
242
|
+
|
229
243
|
# @!group Conversion
|
230
244
|
|
231
245
|
def to_s
|