xcake 0.5.3 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/Gemfile.lock +11 -23
  4. data/lib/xcake.rb +34 -18
  5. data/lib/xcake/command/init.rb +1 -1
  6. data/lib/xcake/command/make.rb +17 -4
  7. data/lib/xcake/configurable.rb +4 -0
  8. data/lib/xcake/context.rb +15 -0
  9. data/lib/xcake/context/xcodeproj_context.rb +49 -0
  10. data/lib/xcake/core_ext/string.rb +8 -0
  11. data/lib/xcake/dependency.rb +23 -0
  12. data/lib/xcake/dependency_provider.rb +28 -0
  13. data/lib/xcake/file_reference_installer.rb +54 -0
  14. data/lib/xcake/file_reference_installer/compile_source_file_reference_installer.rb +16 -0
  15. data/lib/xcake/file_reference_installer/compile_xcdatamodeld_file_reference_installer.rb +25 -0
  16. data/lib/xcake/file_reference_installer/copy_resources_file_reference_installer.rb +21 -0
  17. data/lib/xcake/file_reference_installer/copy_xcassets_file_reference_installer.rb +25 -0
  18. data/lib/xcake/file_reference_installer/header_file_reference_installer.rb +11 -0
  19. data/lib/xcake/generator.rb +16 -0
  20. data/lib/xcake/generator/configuration_generator.rb +36 -0
  21. data/lib/xcake/generator/project_generator.rb +17 -0
  22. data/lib/xcake/generator/project_metadata_generator.rb +11 -0
  23. data/lib/xcake/{project_structure_resolver.rb → generator/project_structure_generator.rb} +1 -6
  24. data/lib/xcake/generator/scheme_generator.rb +16 -0
  25. data/lib/xcake/generator/target_build_phase_generator.rb +49 -0
  26. data/lib/xcake/generator/target_custom_build_phase_generator.rb +16 -0
  27. data/lib/xcake/generator/target_dependency_generator.rb +15 -0
  28. data/lib/xcake/generator/target_file_reference_generator.rb +59 -0
  29. data/lib/xcake/generator/target_framework_generator.rb +14 -0
  30. data/lib/xcake/generator/target_generator.rb +12 -0
  31. data/lib/xcake/informative.rb +2 -0
  32. data/lib/xcake/plugin.rb +25 -0
  33. data/lib/xcake/project.rb +13 -9
  34. data/lib/xcake/project/sugar.rb +2 -3
  35. data/lib/xcake/shell_script_build_phase.rb +15 -0
  36. data/lib/xcake/target.rb +24 -15
  37. data/lib/xcake/target/sugar.rb +13 -0
  38. data/lib/xcake/ui.rb +7 -0
  39. data/lib/xcake/version.rb +1 -1
  40. data/lib/xcake/visitor.rb +2 -2
  41. data/lib/xcake/xcode/project.rb +25 -2
  42. data/xcake.gemspec +1 -0
  43. metadata +43 -17
  44. data/LICENSE +0 -201
  45. data/lib/fastlane_plugin.rb +0 -5
  46. data/lib/xcake/generator/build_phase.rb +0 -78
  47. data/lib/xcake/generator/build_phase/compile_source_build_phase.rb +0 -18
  48. data/lib/xcake/generator/build_phase/compile_xcdatamodeld_build_phase.rb +0 -20
  49. data/lib/xcake/generator/build_phase/copy_resources_build_phase.rb +0 -17
  50. data/lib/xcake/generator/build_phase/copy_xcassets_build_phase.rb +0 -21
  51. data/lib/xcake/generator/build_phase/header_file_build_phase.rb +0 -13
  52. data/lib/xcake/generator/build_phase_registry.rb +0 -40
  53. data/lib/xcake/generator/configuration.rb +0 -46
  54. data/lib/xcake/generator/path.rb +0 -41
  55. data/lib/xcake/generator/project.rb +0 -64
  56. data/lib/xcake/generator/target.rb +0 -48
@@ -1,5 +0,0 @@
1
- require "xcake/fastlane/xcake.rb"
2
-
3
- module Xcake
4
-
5
- end
@@ -1,78 +0,0 @@
1
- module Xcake
2
- module Generator
3
- # This generator handles adding nodes
4
- # to the project and creating a build phase
5
- # for it.
6
- #
7
- class BuildPhase
8
-
9
- include Visitor
10
-
11
- # @return [Project] the xcode project
12
- #
13
- attr_accessor :project
14
-
15
- # This should be overidden
16
- # by subclasses.
17
- #
18
- # @param [Node] the node
19
- #
20
- # @return [Boolean] true if build phase can handle the node.
21
- #
22
- def self.can_install_node(node)
23
- true
24
- end
25
-
26
- # @return [Project] the xcode project
27
- #
28
- def initialize(project)
29
- @project = project
30
- end
31
-
32
- # Find the group which this node
33
- # should be added to.
34
- #
35
- # This dictates where it shows up
36
- # in the groups structure.
37
- #
38
- # @param [Node] the node
39
- #
40
- # @return [PBXGroup] the group
41
- #
42
- def group_for_node(node)
43
- return @project.main_group unless node.parent
44
-
45
- @project.main_group.find_subpath(node.parent.path, true)
46
- end
47
-
48
- # Adds file reference to the target.
49
- #
50
- # This should be overidden in subclasses
51
- # to add the file reference the correct
52
- # build phase.
53
- #
54
- # @param [PBXFileReference] the file reference
55
- #
56
- # @param [PBXTarget] the xcode target
57
- #
58
- def add_file_reference_to_target(_file_reference, _target)
59
- end
60
-
61
- protected
62
-
63
- def visit_node(node)
64
-
65
- group = group_for_node(node)
66
- file_reference = group.new_reference(node.path)
67
-
68
- node.targets.each do |t|
69
- add_file_reference_to_target(file_reference, t)
70
- end
71
- end
72
-
73
- def leave_node(node)
74
- end
75
-
76
- end
77
- end
78
- end
@@ -1,18 +0,0 @@
1
- module Xcake
2
- module Generator
3
- # This build phase generator detects source
4
- # files and adds them to the compile build phase.
5
- #
6
- class CompileSourceBuildPhase < BuildPhase
7
-
8
- def self.can_install_node(node)
9
- !File.directory?(node.path) &&
10
- %w(.c .m .mm .cpp .swift).include?(File.extname(node.path))
11
- end
12
-
13
- def add_file_reference_to_target(file_reference, target)
14
- target.source_build_phase.add_file_reference(file_reference)
15
- end
16
- end
17
- end
18
- end
@@ -1,20 +0,0 @@
1
- module Xcake
2
- module Generator
3
- # This build phase generator detects XCDataModeld bundles
4
- # and adds them to the compile source phase.
5
- #
6
- class CompileXCDataModeldBuildPhase < CompileSourceBuildPhase
7
- def self.can_install_node(node)
8
- File.directory?(node.path) &&
9
- [".xcdatamodeld"].include?(File.extname(node.path))
10
- end
11
-
12
- def visit_node(node)
13
- super
14
-
15
- # Ignore all files inside of the XCDataModel
16
- node.children = []
17
- end
18
- end
19
- end
20
- end
@@ -1,17 +0,0 @@
1
- module Xcake
2
- module Generator
3
- # This build phase generator detects
4
- # files and adds them to the copy resources phase.
5
- #
6
- class CopyResourcesBuildPhase < BuildPhase
7
-
8
- def self.can_install_node(node)
9
- !File.directory?(node.path)
10
- end
11
-
12
- def add_file_reference_to_target(file_reference, target)
13
- target.resources_build_phase.add_file_reference(file_reference)
14
- end
15
- end
16
- end
17
- end
@@ -1,21 +0,0 @@
1
- module Xcake
2
- module Generator
3
- # This build phase generator detects XCAsset bundles
4
- # and adds them to the copy resources phase.
5
- #
6
- class CopyXCAssetsBuildPhase < CopyResourcesBuildPhase
7
-
8
- def self.can_install_node(node)
9
- File.directory?(node.path) &&
10
- [".xcassets"].include?(File.extname(node.path))
11
- end
12
-
13
- def visit_node(node)
14
- super
15
-
16
- #Ignore all files inside of the XCAssets
17
- node.children = []
18
- end
19
- end
20
- end
21
- end
@@ -1,13 +0,0 @@
1
- module Xcake
2
- module Generator
3
- class HeaderFileBuildPhase < BuildPhase
4
- # This build phase generator detects header files
5
- # and ignores them.
6
- #
7
- def self.can_install_node(node)
8
- !File.directory?(node.path) &&
9
- [".h", ".hpp"].include?(File.extname(node.path))
10
- end
11
- end
12
- end
13
- end
@@ -1,40 +0,0 @@
1
- module Xcake
2
- module Generator
3
- class BuildPhase
4
- # This namespace contains methods
5
- # for working with Build Phase generators.
6
- #
7
- module Registry
8
-
9
- # This returns all the build phase generators
10
- # the order of these is important so that files
11
- # are added correctly.
12
- #
13
- # @return [Array<BuildPhase>] the build phase generators
14
- #
15
- def self.build_phase_generators
16
- [
17
- CompileSourceBuildPhase,
18
- CompileXCDataModeldBuildPhase,
19
- HeaderFileBuildPhase,
20
- CopyXCAssetsBuildPhase,
21
- CopyResourcesBuildPhase
22
- ]
23
- end
24
-
25
- # This returns a build phase generator
26
- # designed to handle the node
27
- #
28
- # @param [Node] node for the build phase generator
29
- #
30
- # @return [BuildPhase] the build phase generator
31
- #
32
- def self.generator_for_node(node)
33
- generator_class = self.build_phase_generators.find do |g|
34
- g.can_install_node(node)
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,46 +0,0 @@
1
- require 'xcodeproj'
2
-
3
- module Xcake
4
- module Generator
5
- # This generator processes the configuraions
6
- # and creates xcode build configurations.
7
- #
8
- class Configuration
9
-
10
- include Visitor
11
-
12
- # @return [Project] project for the configuration
13
- #
14
- attr_accessor :project
15
-
16
- # @return [Object] object from xcode project the configuration is for
17
- #
18
- attr_accessor :configuration_target
19
-
20
- # @param [Project] project for the configuration
21
- #
22
- # @param [Object] object from xcode project the configuration is for
23
- #
24
- def initialize(project, configuration_target)
25
- @project = project
26
- @configuration_target = configuration_target
27
- end
28
-
29
- protected
30
-
31
- def visit_configuration(configuration)
32
- puts "Creating build configuration #{configuration.name} for #{@configuration_target}..."
33
-
34
- build_configuration = @project.new(Xcodeproj::Project::Object::XCBuildConfiguration)
35
-
36
- build_configuration.name = configuration.name
37
- build_configuration.build_settings = configuration.settings
38
-
39
- @configuration_target.build_configurations << build_configuration
40
- end
41
-
42
- def leave_configuration(configuration)
43
- end
44
- end
45
- end
46
- end
@@ -1,41 +0,0 @@
1
- module Xcake
2
- module Generator
3
- # This generator processes the include and
4
- # exclude paths, and adds them to the
5
- # root node to be added to the project.
6
- #
7
- class Path
8
-
9
- include Visitor
10
-
11
- # @return [Project] the xcode project
12
- #
13
- attr_accessor :project
14
-
15
- # @param [Project] project for the file path
16
- #
17
- def initialize(project)
18
- @project = project
19
- end
20
-
21
- protected
22
-
23
- def visit_node(node)
24
-
25
- return unless node.path
26
-
27
- puts "Adding #{node.path}..."
28
-
29
- generator_class = BuildPhase::Registry.generator_for_node(node)
30
-
31
- if generator_class
32
- generator = generator_class.new(@project)
33
- node.accept(generator)
34
- end
35
- end
36
-
37
- def leave_node(node)
38
- end
39
- end
40
- end
41
- end
@@ -1,64 +0,0 @@
1
- require 'xcodeproj'
2
-
3
- module Xcake
4
- module Generator
5
- class Project
6
-
7
- include Visitor
8
-
9
- attr_accessor :project
10
- attr_accessor :root_node
11
-
12
- def initialize
13
- @root_node = Node.new
14
- end
15
-
16
- def output_filepath_for_project(project)
17
- "./#{project.project_name}.xcodeproj"
18
- end
19
-
20
- def visit_project(project)
21
-
22
- puts "Creating Project..."
23
-
24
- output_filepath = output_filepath_for_project(project)
25
-
26
- @project = Xcode::Project.new(output_filepath, true)
27
- @project.setup_for_xcake
28
-
29
- @project.class_prefix = project.class_prefix if project.class_prefix
30
- @project.organization = project.organization if project.organization
31
- end
32
-
33
- def leave_project(project)
34
-
35
- generator = Path.new(@project)
36
- @root_node.accept(generator)
37
-
38
- puts "Writing Project..."
39
-
40
- @project.recreate_user_schemes
41
- @project.save
42
- project.run_hook :after_save
43
-
44
- puts "Done!"
45
- end
46
-
47
- def visit_target(target)
48
- generator = Target.new(@project, @root_node)
49
- target.accept(generator)
50
- end
51
-
52
- def leave_target(target)
53
- end
54
-
55
- def visit_configuration(configuration)
56
- generator = Configuration.new(@project, @project)
57
- configuration.accept(generator)
58
- end
59
-
60
- def leave_configuration(configuration)
61
- end
62
- end
63
- end
64
- end
@@ -1,48 +0,0 @@
1
- require 'xcodeproj'
2
-
3
- module Xcake
4
- module Generator
5
- class Target
6
-
7
- include Visitor
8
-
9
- attr_accessor :project
10
- attr_accessor :root_node
11
- attr_accessor :target
12
- attr_accessor :native_target
13
-
14
- def initialize(project, root_node)
15
- @project = project
16
- @root_node = root_node
17
- end
18
-
19
- def visit_target(target)
20
-
21
- puts "Creating target #{target.name}..."
22
-
23
- @target = target
24
- @native_target = @project.new_target(target)
25
-
26
- Dir.glob(target.include_files).each do |file|
27
- @root_node.create_children_with_path(file, @native_target)
28
- end if target.include_files
29
-
30
- Dir.glob(target.exclude_files).each do |file|
31
- @root_node.remove_children_with_path(file, @native_target)
32
- end if target.exclude_files
33
- end
34
-
35
- def leave_target(target)
36
- @native_target.add_system_frameworks(target.system_frameworks) if target.system_frameworks
37
- end
38
-
39
- def visit_configuration(configuration)
40
- generator = Configuration.new(@project, @native_target)
41
- configuration.accept(generator)
42
- end
43
-
44
- def leave_configuration(configuration)
45
- end
46
- end
47
- end
48
- end