xcake 0.8.12 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|