xcmake 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2961706110bfe1fab8a879beffd05f50aaadd42ad6ba83fc761400abd3c930cc
4
+ data.tar.gz: ee92a8f0cbbe81798e2d922db01bee9cb209213a2737d0d264115111ffe24860
5
+ SHA512:
6
+ metadata.gz: 11ddb88f9d19952058419e8a35fea38e05e351a9d17e0aec54edebf59d3ecca6998e8718283ff3b84c2eb3fe29cf752903e34f40ed93f2e07922dd7b17e74a3e
7
+ data.tar.gz: 9c3bed0e355f8163563dd569fdc5993151249804eb4b0fe52afa3bb08ca934fa98870c2f0a935e29e2d448da83b16a8f444285b9071445aadcccf18b068f2ed8
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ /.bundle/
2
+ /.idea/
3
+ /.yardoc
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /vendor/
11
+ .DS_Store
12
+
13
+ /test/test_project/*
14
+ /test/test_project/TestProject/*
15
+ !project.yml
16
+ !scaffold.yml
17
+ !.keep
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.5.1
5
+ before_install: gem install bundler -v 1.16.1
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ xcmake (0.1.0)
5
+ colorize (~> 0.8.1)
6
+ thor (~> 0.20.0)
7
+ xcodeproj (~> 1.5.7)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ CFPropertyList (3.0.0)
13
+ atomos (0.1.2)
14
+ claide (1.0.2)
15
+ colored2 (3.1.2)
16
+ colorize (0.8.1)
17
+ minitest (5.11.3)
18
+ nanaimo (0.2.5)
19
+ thor (0.20.0)
20
+ xcodeproj (1.5.7)
21
+ CFPropertyList (>= 2.3.3, < 4.0)
22
+ atomos (~> 0.1.2)
23
+ claide (>= 1.0.2, < 2.0)
24
+ colored2 (~> 3.1)
25
+ nanaimo (~> 0.2.4)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ minitest (~> 5.0)
32
+ xcmake!
33
+
34
+ BUNDLED WITH
35
+ 1.16.1
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 kenta.motoyanagi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,27 @@
1
+ # Xcmake
2
+
3
+ Xcode resource genetator for command line.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'xcmake'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install xcmake
20
+
21
+ ## Usage
22
+
23
+ TODO
24
+
25
+ ## License
26
+
27
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,31 @@
1
+ require "fileutils"
2
+ require "bundler/gem_tasks"
3
+ require "rake/testtask"
4
+
5
+ Rake::TestTask.new(:test) do |t|
6
+ t.libs << "test"
7
+ t.libs << "lib"
8
+ t.test_files = FileList["test/**/*_test.rb"]
9
+ end
10
+
11
+ task :default => :test
12
+
13
+ namespace :project do
14
+ desc "Rebuilding Xcode test project"
15
+ task rebuild: %w(remove create)
16
+
17
+ desc "Create Xcode test project"
18
+ task :create do
19
+ Dir.chdir("test/test_project") do
20
+ Dir.mkdir("TestProject") unless Dir.exist?("TestProject")
21
+ exec("xcodegen")
22
+ end
23
+ end
24
+
25
+ desc "Remove Xcode test project"
26
+ task :remove do
27
+ Dir.glob("test/test_project/*") do |path|
28
+ FileUtils.rm_rf(path) unless File.file?(path)
29
+ end
30
+ end
31
+ end
data/bin/setup ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ROOT_DIR = File.expand_path("..", __dir__)
4
+ VENDOR_DIR = File.join(ROOT_DIR, "vendor", "bundle")
5
+
6
+ if !Dir.exist?(VENDOR_DIR)
7
+ Dir.chdir(ROOT_DIR) do
8
+ exec("bundle install --path=vendor/bundle")
9
+ end
10
+ end
data/bin/xcmake ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "xcmake"
4
+
5
+ Xcmake::Cli.start
data/lib/xcmake.rb ADDED
@@ -0,0 +1,7 @@
1
+ require "xcmake/logger"
2
+ require "xcmake/helpers/xcodeproj_helper"
3
+ require "xcmake/cli"
4
+ require "xcmake/generator"
5
+ require "xcmake/version"
6
+ require "xcmake/source_builder/swift_builder"
7
+ require "xcmake/source_builder/plist_builder"
data/lib/xcmake/cli.rb ADDED
@@ -0,0 +1,101 @@
1
+ require "yaml"
2
+ require "thor"
3
+ require "xcmake/logger"
4
+
5
+ module Xcmake
6
+ class Cli < Thor
7
+ include Xcmake::Logger
8
+
9
+ desc "target [NAME]", "Generate new target."
10
+ method_option :project, aliases: "-p", desc: "Project path. If unspecified, use `*.xcodeproj` in the current directory."
11
+ method_option :type, aliases: "-t", desc: "Target type. Default is 'framework'."
12
+ method_option :delete, aliases: "-d", desc: "Delete target."
13
+ def target(name)
14
+ project_path = options[:project] || default_project!
15
+
16
+ g = Xcmake::Generator.new(project_path)
17
+
18
+ if options[:delete]
19
+ g.delete_target(name)
20
+ else
21
+ type = options[:type] || "framework"
22
+ g.create_target(name, type.to_sym)
23
+ end
24
+ end
25
+
26
+ desc "group [NAME]", "Generate new group."
27
+ method_option :project, aliases: "-p", desc: "Project path. If unspecified, use `*.xcodeproj` in the current directory."
28
+ method_option :delete, aliases: "-d", desc: "Delete group."
29
+ def group(name)
30
+ project_path = options[:project] || default_project!
31
+
32
+ g = Xcmake::Generator.new(project_path)
33
+
34
+ if options[:delete]
35
+ g.delete_group(name)
36
+ else
37
+ g.create_group(name)
38
+ end
39
+ end
40
+
41
+ desc "source [NAME]", "Generate source file."
42
+ method_option :project, aliases: "-p", desc: "Project path. If unspecified, use `*.xcodeproj` in the current directory."
43
+ method_option :delete, aliases: "-d", desc: "Delete source file."
44
+ def source(name)
45
+ project_path = options[:project] || default_project!
46
+
47
+ g = Xcmake::Generator.new(project_path)
48
+
49
+ if options[:delete]
50
+ else
51
+ g.create_source(name)
52
+ end
53
+ end
54
+
55
+ desc "scaffold [NAME]", "Generate scaffold files."
56
+ method_option :project, aliases: "-p", desc: "Project path. If unspecified, use `*.xcodeproj` in the current directory."
57
+ def scaffold(name)
58
+ project_path = options[:project] || default_project!
59
+
60
+ g = Xcmake::Generator.new(project_path)
61
+
62
+ structure = load_scaffold_structure(project_path)
63
+
64
+ structure["sources"].each do |s|
65
+ if s["target"]["name"] == s["group"]
66
+ group_path = s["target"]["name"]
67
+ elsif s["group"].to_s.empty?
68
+ group_path = s["target"]["name"]
69
+ else
70
+ group_path = "#{s["target"]["name"]}/#{s["group"]}"
71
+ end
72
+
73
+ g.create_target(s["target"]["name"], s["target"]["type"])
74
+ g.create_group(group_path) unless s["group"].to_s.empty?
75
+ g.create_source("#{group_path}/#{s['prefix']}#{name}#{s['suffix']}", nil)
76
+ end
77
+ end
78
+
79
+ private
80
+
81
+ def default_project!
82
+ project_paths = Dir.glob("#{Dir.pwd}/*.xcodeproj")
83
+
84
+ if project_paths.empty?
85
+ log_error!("xcodeproj not found. please give option `-p [project path]` and try it.")
86
+ end
87
+
88
+ if project_paths.size > 1
89
+ log_error!("found many xcodeproj. please give option `-p [project path]` and try it.")
90
+ end
91
+
92
+ project_paths.first
93
+ end
94
+
95
+ def load_scaffold_structure(project_path, scaffold_config_file="scaffold.yml")
96
+ scaffold_path = File.join(project_path, "..", scaffold_config_file)
97
+ yaml_data = File.read(scaffold_path)
98
+ YAML.load(yaml_data)
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,150 @@
1
+ require "fileutils"
2
+ require "pathname"
3
+ require "xcodeproj"
4
+
5
+ module Xcmake
6
+ class Generator
7
+ include Xcmake::Logger
8
+ include Xcmake::XcodeprojHelper
9
+
10
+ def initialize(project_path)
11
+ @project = Xcodeproj::Project.open(project_path)
12
+ end
13
+
14
+ def create_target(name, type, platform=:ios, lang=:swift)
15
+ find_target_with_path(name).tap do |target|
16
+ unless target.nil?
17
+ log_info("Target\t'#{name}' already exists.")
18
+ return
19
+ end
20
+ end
21
+
22
+ target = @project.new_target(type, name, platform, nil, nil, lang)
23
+
24
+ create_group(name)
25
+ create_source(
26
+ File.join(name, "Info.plist"),
27
+ File.expand_path("../../templates/default.plist.erb", __dir__)
28
+ )
29
+
30
+ @project.main_group.find_subpath(name).tap do |group|
31
+ target.add_file_references(group.files)
32
+ target.build_configuration_list.set_setting("INFOPLIST_FILE", "$(SRCROOT)/#{name}/Info.plist")
33
+ end
34
+
35
+ log_info("Target\t'#{name}' created!!")
36
+ @project.save
37
+ end
38
+
39
+ def delete_target(name)
40
+ log_info("`delete_target` now working...")
41
+ end
42
+
43
+ def create_group(name)
44
+ group_dir_path = File.join(project_root, name)
45
+
46
+ if group_paths.map(&:to_s).include?(group_dir_path)
47
+ log_info("Group\t'#{name}' already exists.")
48
+ return
49
+ end
50
+
51
+ groups = name.split("/")
52
+ base_path = File.join(project_root, @project.main_group.path.to_s)
53
+ create_group_recursive(groups, @project.main_group, base_path)
54
+
55
+ FileUtils.mkdir_p(group_dir_path)
56
+
57
+ log_info("Group\t'#{name}' created!!")
58
+ @project.save
59
+ end
60
+
61
+ def delete_group(name)
62
+ delete_group_recursive(name)
63
+ @project.save
64
+ end
65
+
66
+ def create_source(name, template=nil)
67
+ dir_path = File.dirname(name)
68
+ file_name = File.basename(name)
69
+
70
+ group = find_group_with_path(dir_path).tap do |r|
71
+ if r.nil?
72
+ log_error!("group path not found. please set NAME to [GROUP_PATH]/[FILE_NAME] and try it!")
73
+ end
74
+ end
75
+
76
+ File.join(group.real_path, file_name).tap do |file_path|
77
+ if File.exist?(file_path)
78
+ log_info("Source\t'#{name}' already exists.")
79
+ return
80
+ end
81
+ end
82
+
83
+ file_ref = group.new_file(file_name)
84
+
85
+ find_target_with_path(dir_path).tap { |r| r&.add_file_references([file_ref]) }
86
+
87
+ file_path = file_ref.real_path
88
+ file_ext = File.extname(file_path)
89
+
90
+ data =
91
+ case file_ext
92
+ when ".swift" then
93
+ params = parameter_for_swift(file_name, dir_path.split("/").first)
94
+ SwiftBuilder.new(template).build(params)
95
+ when ".plist" then
96
+ params = parameter_for_plist(:framework)
97
+ PlistBuilder.new(template).build(params)
98
+ else
99
+ log_error!("File type `#{file_ext}` is not supported.")
100
+ end
101
+
102
+ File.write(file_path, data)
103
+
104
+ log_info("Source\t'#{name}' created!!")
105
+ @project.save
106
+ end
107
+
108
+ private
109
+
110
+ def create_group_recursive(groups, parent_group, path)
111
+ new_group_name = groups.shift
112
+ new_group_path = File.join(path, new_group_name)
113
+
114
+ next_group = parent_group.children.find { |g| g.path == new_group_name }
115
+
116
+ if next_group.nil?
117
+ next_group = parent_group.new_group(new_group_name, new_group_path)
118
+ end
119
+
120
+ if !groups.empty?
121
+ create_group_recursive(groups, next_group, new_group_path)
122
+ end
123
+ end
124
+
125
+ def delete_group_recursive(path, main_target=true)
126
+ return if is_target_path?(path)
127
+
128
+ target_group = @project.main_group.find_subpath(path)
129
+
130
+ return if target_group.nil?
131
+
132
+ if main_target || target_group.children.empty?
133
+ FileUtils.rm_rf(target_group.real_path)
134
+ target_group.parent.clear
135
+ log_info("Removed group: #{path}")
136
+ end
137
+
138
+ next_path = Pathname.new(path).dirname.to_s
139
+ delete_group_recursive(next_path, false)
140
+ end
141
+
142
+ def parameter_for_swift(name, target, organaizer=nil)
143
+ { name: name, target: target, organizer: organaizer }
144
+ end
145
+
146
+ def parameter_for_plist(type)
147
+ { type: type }
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,24 @@
1
+ module Xcmake
2
+ module XcodeprojHelper
3
+ def project_root
4
+ @project.path.dirname.to_s
5
+ end
6
+
7
+ def group_paths
8
+ @project.main_group.recursive_children_groups.map(&:real_path).uniq
9
+ end
10
+
11
+ def is_target_path?(path)
12
+ @project.targets.map(&:name).include?(path)
13
+ end
14
+
15
+ def find_group_with_path(path)
16
+ @project.main_group.find_subpath(path)
17
+ end
18
+
19
+ def find_target_with_path(path)
20
+ target_name = path.split("/").first
21
+ @project.targets.find { |t| t.name == target_name }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,36 @@
1
+ require "logger"
2
+ require "colorize"
3
+
4
+ module Xcmake::Logger
5
+ def log_info(text)
6
+ stdout_logger.info(text.green)
7
+ end
8
+
9
+ def log_error(text)
10
+ stdout_logger.error(text.red)
11
+ end
12
+
13
+ def log_error!(text)
14
+ log_error(text)
15
+ exit 1
16
+ end
17
+
18
+ private
19
+
20
+ def stdout_logger
21
+ create_logger(STDOUT)
22
+ end
23
+
24
+ def stderr_logger
25
+ create_logger(STDERR)
26
+ end
27
+
28
+ def create_logger(output)
29
+ logger = Logger.new(output)
30
+ logger.progname = "Xcmake"
31
+ logger.formatter = proc { |severity, datetime, progname, message|
32
+ "#{progname} : #{message}\n"
33
+ }
34
+ logger
35
+ end
36
+ end
@@ -0,0 +1,16 @@
1
+ module Xcmake
2
+ class PlistBuilder
3
+ include Xcmake::Logger
4
+
5
+ def initialize(template_path=nil)
6
+ template_path = template_path || File.expand_path("../../../templates/default.plist.erb", __dir__)
7
+ log_error!("Template not found: #{template_path}") unless File.exist?(template_path)
8
+ @template = File.read(template_path)
9
+ end
10
+
11
+ def build(params={})
12
+ params = params
13
+ ERB.new(@template, nil, "-").result(binding)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ require "erb"
2
+ require "date"
3
+
4
+ module Xcmake
5
+ class SwiftBuilder
6
+ include Xcmake::Logger
7
+
8
+ def initialize(template_path=nil)
9
+ template_path = template_path || File.expand_path("../../../templates/default.swift.erb", __dir__)
10
+ log_error!("Template not found: #{template_path}") unless File.exist?(template_path)
11
+ @template = File.read(template_path)
12
+ end
13
+
14
+ def build(params={})
15
+ params = params
16
+ ERB.new(@template, nil, "-").result(binding)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ module Xcmake
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDevelopmentRegion</key>
6
+ <string>$(DEVELOPMENT_LANGUAGE)</string>
7
+ <key>CFBundleExecutable</key>
8
+ <string>$(EXECUTABLE_NAME)</string>
9
+ <key>CFBundleIdentifier</key>
10
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11
+ <key>CFBundleInfoDictionaryVersion</key>
12
+ <string>6.0</string>
13
+ <key>CFBundleName</key>
14
+ <string>$(PRODUCT_NAME)</string>
15
+ <key>CFBundlePackageType</key>
16
+ <% if params[:type] == :framework -%>
17
+ <string>FMWK</string>
18
+ <key>CFBundleShortVersionString</key>
19
+ <% end -%>
20
+ <string>1.0</string>
21
+ <key>CFBundleVersion</key>
22
+ <string>$(CURRENT_PROJECT_VERSION)</string>
23
+ <key>NSPrincipalClass</key>
24
+ <string></string>
25
+ </dict>
26
+ </plist>
@@ -0,0 +1,13 @@
1
+ //
2
+ // <%= params[:name] %>.swift
3
+ <% if !params[:target].nil? -%>
4
+ // <%= params[:target] %>
5
+ <% end; -%>
6
+ //
7
+ // Created by <%= `whoami`.chomp %> on <%= Date.today.strftime("%Y/%m/%d") %>.
8
+ <% if !params[:organizer].nil? -%>
9
+ // Copyright © <%= Date.today.strftime("%Y") %> <%= params[:organizer] %>. All rights reserved.
10
+ <% end -%>
11
+ //
12
+
13
+ import Foundation
data/xcmake.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "xcmake/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "xcmake"
7
+ spec.version = Xcmake::VERSION
8
+ spec.authors = ["k-motoyan"]
9
+ spec.email = ["k.motoyan888@gmail.com"]
10
+
11
+ spec.summary = "Xcode resource genetator for command line."
12
+ spec.description = ""
13
+ spec.homepage = "https://github.com/k-motoyan/xcmake"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = "bin"
20
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_dependency "xcodeproj", "~> 1.5.7"
24
+ spec.add_dependency "thor", "~> 0.20.0"
25
+ spec.add_dependency "colorize", "~> 0.8.1"
26
+
27
+ spec.add_development_dependency "minitest", "~> 5.0"
28
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xcmake
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - k-motoyan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-09 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.5.7
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.5.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.20.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.20.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: colorize
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.8.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.8.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
69
+ description: ''
70
+ email:
71
+ - k.motoyan888@gmail.com
72
+ executables:
73
+ - setup
74
+ - xcmake
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - ".gitignore"
79
+ - ".travis.yml"
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - LICENSE.txt
83
+ - README.md
84
+ - Rakefile
85
+ - bin/setup
86
+ - bin/xcmake
87
+ - lib/xcmake.rb
88
+ - lib/xcmake/cli.rb
89
+ - lib/xcmake/generator.rb
90
+ - lib/xcmake/helpers/xcodeproj_helper.rb
91
+ - lib/xcmake/logger.rb
92
+ - lib/xcmake/source_builder/plist_builder.rb
93
+ - lib/xcmake/source_builder/swift_builder.rb
94
+ - lib/xcmake/version.rb
95
+ - templates/default.plist.erb
96
+ - templates/default.swift.erb
97
+ - xcmake.gemspec
98
+ homepage: https://github.com/k-motoyan/xcmake
99
+ licenses:
100
+ - MIT
101
+ metadata: {}
102
+ post_install_message:
103
+ rdoc_options: []
104
+ require_paths:
105
+ - lib
106
+ required_ruby_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 2.7.6
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: Xcode resource genetator for command line.
122
+ test_files: []