cocoaseeds 0.0.3 → 0.0.4
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 +4 -4
- data/README.md +19 -8
- data/bin/seed +1 -1
- data/lib/cocoaseeds/command.rb +7 -5
- data/lib/cocoaseeds/core.rb +63 -41
- data/lib/cocoaseeds/exception.rb +6 -0
- data/lib/cocoaseeds/seed.rb +1 -1
- data/lib/cocoaseeds/version.rb +2 -2
- data/lib/cocoaseeds/xcodehelper.rb +40 -0
- data/lib/cocoaseeds.rb +9 -4
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50c2bb77e4221a0d5d12dbc668fde037b3c10bf5
|
4
|
+
data.tar.gz: 0f0a2053fa975d0e61ef0cf791c6565ce6322c36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad4e90e538a9a1a1bf6bf95892dbc5986684fa7684dc34e8b9288a0f84fa361d353c55c8799a303f37118ebda5724dcb05acaa35ff8177c91868add6e4429a34
|
7
|
+
data.tar.gz: dbf6da21eb9a40b4e3eec2b7171d9415c7329d45cfec5704614b1dceaec9c622722601a9245c24a9fe49c7655364909f21dd98fd420d90b9429e0765721535f4
|
data/README.md
CHANGED
@@ -2,8 +2,9 @@ CocoaSeeds
|
|
2
2
|
==========
|
3
3
|
|
4
4
|
[](https://rubygems.org/gems/cocoaseeds)
|
5
|
+
[](https://travis-ci.org/devxoul/CocoaSeeds)
|
5
6
|
|
6
|
-
Git Submodule Alternative for Cocoa.
|
7
|
+
Git Submodule Alternative for Cocoa. Inspired by [CocoaPods](https://cocoapods.org).
|
7
8
|
|
8
9
|
|
9
10
|
Why?
|
@@ -30,23 +31,33 @@ Seedfile
|
|
30
31
|
|
31
32
|
You have to write a **Seedfile** in the same directory with **.xcodeproj**.
|
32
33
|
|
33
|
-
```ruby
|
34
|
-
github 'Alamofire/Alamofire', '1.2.1', :files => 'Source/*.{swift,h}'
|
35
|
-
github 'devxoul/JLToast', '1.2.2', :files => 'JLToast/*.{swift,h}'
|
36
|
-
github 'Masonry/SnapKit', '0.10.0', :files => 'Source/*.{swift,h}'
|
37
|
-
```
|
38
|
-
|
39
34
|
<pre>
|
40
35
|
MyProject/
|
41
36
|
|-- MyProject/
|
42
37
|
| |-- AppDelegate.swift
|
43
38
|
| `-- ...
|
44
39
|
|-- MyProject.xcodeproj
|
45
|
-
|-- <b>Seedfile</b>
|
40
|
+
|-- <b><i>Seedfile</i></b>
|
46
41
|
`-- ...
|
47
42
|
</pre>
|
48
43
|
|
49
44
|
|
45
|
+
**Seedfile**
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
# seeds for all targets
|
49
|
+
github "Alamofire/Alamofire", "1.2.1", :files => "Source/*.{swift,h}"
|
50
|
+
github "devxoul/JLToast", "1.2.2", :files => "JLToast/*.{swift,h}"
|
51
|
+
github "devxoul/SwipeBack", "1.0.4" # files default: */**.{h,m,mm,swift}
|
52
|
+
github "Masonry/SnapKit", "0.10.0", :files => "Source/*.{swift,h}"
|
53
|
+
|
54
|
+
# seeds for specific target
|
55
|
+
target :MyAppTest do
|
56
|
+
github "Quick/Quick", "v0.3.1", :files => "Quick/**.{swift,h}"
|
57
|
+
github "Quick/Nimble", "v0.4.2", :files => "Nimble/**.{swift,h}"
|
58
|
+
end
|
59
|
+
```
|
60
|
+
|
50
61
|
Using CocoaSeeds
|
51
62
|
----------------
|
52
63
|
|
data/bin/seed
CHANGED
data/lib/cocoaseeds/command.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module CocoaSeed
|
1
|
+
module Seeds
|
4
2
|
class Command
|
5
3
|
def self.run(argv)
|
6
4
|
case argv[0]
|
7
5
|
when 'install'
|
8
|
-
|
6
|
+
begin
|
7
|
+
Seeds::Core.new(Dir.pwd).install
|
8
|
+
rescue Seeds::Exception => e
|
9
|
+
puts "[!] #{e.message}".red
|
10
|
+
end
|
9
11
|
when '--version'
|
10
|
-
puts
|
12
|
+
puts Seeds::VERSION
|
11
13
|
else
|
12
14
|
self.help
|
13
15
|
end
|
data/lib/cocoaseeds/core.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
|
-
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
module CocoaSeed
|
1
|
+
module Seeds
|
5
2
|
class Core
|
6
3
|
attr_reader :root_path, :seedfile_path, :lockfile_path
|
7
4
|
attr_accessor :project, :seedfile, :lockfile
|
8
|
-
attr_reader :seeds, :locks
|
5
|
+
attr_reader :seeds, :locks, :targets
|
9
6
|
attr_reader :source_files, :file_references
|
10
7
|
|
11
8
|
def initialize(root_path)
|
@@ -14,6 +11,7 @@ module CocoaSeed
|
|
14
11
|
@lockfile_path = File.join(root_path, "Seeds", "Seedfile.lock")
|
15
12
|
@seeds = {}
|
16
13
|
@locks = {}
|
14
|
+
@targets = {}
|
17
15
|
@source_files = {}
|
18
16
|
@file_references = []
|
19
17
|
end
|
@@ -21,20 +19,24 @@ module CocoaSeed
|
|
21
19
|
def install
|
22
20
|
self.prepare_requirements
|
23
21
|
self.analyze_dependencies
|
22
|
+
self.execute_seedfile
|
24
23
|
self.remove_seeds
|
25
24
|
self.install_seeds
|
26
25
|
self.configure_project
|
27
26
|
self.configure_phase
|
28
27
|
self.project.save
|
29
28
|
self.build_lockfile
|
29
|
+
@seeds = {}
|
30
|
+
@locks = {}
|
31
|
+
@source_files = {}
|
32
|
+
@file_references = []
|
30
33
|
end
|
31
34
|
|
32
35
|
def prepare_requirements
|
33
36
|
# .xcodeproj
|
34
37
|
project_filename = Dir.glob("#{root_path}/*.xcodeproj")[0]
|
35
38
|
if not project_filename
|
36
|
-
|
37
|
-
exit 1
|
39
|
+
raise Seeds::Exception.new "Couldn't find .xcodeproj file."
|
38
40
|
end
|
39
41
|
self.project = Xcodeproj::Project.open(project_filename)
|
40
42
|
|
@@ -42,8 +44,7 @@ module CocoaSeed
|
|
42
44
|
begin
|
43
45
|
self.seedfile = File.read(self.seedfile_path)
|
44
46
|
rescue Errno::ENOENT
|
45
|
-
|
46
|
-
exit 1
|
47
|
+
raise Seeds::Exception.new "Couldn't find Seedfile."
|
47
48
|
end
|
48
49
|
|
49
50
|
# Seedfile.lock - optional
|
@@ -60,27 +61,53 @@ module CocoaSeed
|
|
60
61
|
if self.lockfile
|
61
62
|
locks = YAML.load(self.lockfile)
|
62
63
|
locks["SEEDS"].each do |lock|
|
63
|
-
seed =
|
64
|
+
seed = Seeds::Seed.new
|
64
65
|
seed.name = lock.split(' (')[0]
|
65
66
|
seed.version = lock.split('(')[1].split(')')[0]
|
66
67
|
self.locks[seed.name] = seed
|
67
68
|
end
|
68
69
|
end
|
69
|
-
|
70
|
-
# Seedfile
|
71
|
-
eval self.seedfile
|
72
70
|
end
|
73
71
|
|
74
|
-
def
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
72
|
+
def execute_seedfile
|
73
|
+
def target(*names, &code)
|
74
|
+
names.each do |name|
|
75
|
+
name = name.to_s # use string instead of symbol
|
76
|
+
@current_target_name = name
|
77
|
+
|
78
|
+
target = self.project.target_named(name)
|
79
|
+
if not target
|
80
|
+
raise Seeds::Exception.new\
|
81
|
+
"#{self.project.path.basename} doesn't have a target `#{name}`"
|
82
|
+
end
|
83
|
+
|
84
|
+
code.call()
|
85
|
+
end
|
82
86
|
end
|
83
|
-
|
87
|
+
|
88
|
+
def github(repo, tag, options={})
|
89
|
+
if not @current_target_name # apply to all targets
|
90
|
+
target *self.project.targets.map(&:name) do
|
91
|
+
send(__callee__, repo, tag, options)
|
92
|
+
end
|
93
|
+
@current_target_name = nil
|
94
|
+
else
|
95
|
+
seed = Seeds::Seed::GitHub.new
|
96
|
+
seed.url = "https://github.com/#{repo}"
|
97
|
+
seed.name = repo.split('/')[1]
|
98
|
+
seed.version = tag
|
99
|
+
seed.files = options[:files] || '**/*.{h,m,mm,swift}'
|
100
|
+
if seed.files.kind_of?(String)
|
101
|
+
seed.files = [seed.files]
|
102
|
+
end
|
103
|
+
self.seeds[seed.name] = seed
|
104
|
+
self.targets[@current_target_name] ||= []
|
105
|
+
self.targets[@current_target_name] << seed
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
eval seedfile
|
110
|
+
@current_target_name = nil
|
84
111
|
end
|
85
112
|
|
86
113
|
def remove_seeds
|
@@ -158,21 +185,12 @@ module CocoaSeed
|
|
158
185
|
end
|
159
186
|
|
160
187
|
def configure_phase
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
targets.each do |target|
|
166
|
-
# detect 'Compile Sources' build phase
|
167
|
-
phases = target.build_phases.select do |phase|
|
168
|
-
phase.kind_of?(Xcodeproj::Project::Object::PBXSourcesBuildPhase)
|
169
|
-
end
|
170
|
-
phase = phases[0]
|
171
|
-
|
188
|
+
self.targets.each do |target_name, seeds|
|
189
|
+
target = self.project.target_named(target_name)
|
190
|
+
phase = target.sources_build_phase
|
172
191
|
if not phase
|
173
|
-
|
174
|
-
|
175
|
-
exit 1
|
192
|
+
raise Seeds::Exception.new\
|
193
|
+
"Target `#{target}` doesn't have build phase 'Compile Sources'."
|
176
194
|
end
|
177
195
|
|
178
196
|
# remove zombie file references
|
@@ -185,8 +203,9 @@ module CocoaSeed
|
|
185
203
|
end
|
186
204
|
|
187
205
|
# add file references to sources build phase
|
206
|
+
seed_names = seeds.map { |seed| seed.name }
|
188
207
|
self.file_references.each do |file|
|
189
|
-
if not phase.include?(file)
|
208
|
+
if not phase.include?(file) and seed_names.include?(file.parent.name)
|
190
209
|
phase.add_file_reference(file)
|
191
210
|
end
|
192
211
|
end
|
@@ -194,11 +213,14 @@ module CocoaSeed
|
|
194
213
|
end
|
195
214
|
|
196
215
|
def build_lockfile
|
197
|
-
|
198
|
-
|
199
|
-
|
216
|
+
if self.seeds.length > 0
|
217
|
+
tree = { "SEEDS" => [] }
|
218
|
+
self.seeds.each do |name, seed|
|
219
|
+
tree["SEEDS"] << "#{name} (#{seed.version})"
|
220
|
+
end
|
221
|
+
File.write(self.lockfile_path, YAML.dump(tree))
|
200
222
|
end
|
201
|
-
File.write(self.lockfile_path, YAML.dump(tree))
|
202
223
|
end
|
224
|
+
|
203
225
|
end
|
204
226
|
end
|
data/lib/cocoaseeds/seed.rb
CHANGED
data/lib/cocoaseeds/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module
|
2
|
-
VERSION = '0.0.
|
1
|
+
module Seeds
|
2
|
+
VERSION = '0.0.4'
|
3
3
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Xcodeproj
|
2
|
+
class Project
|
3
|
+
def target_named(name)
|
4
|
+
self.targets.each do |target|
|
5
|
+
if target.name == name.to_s
|
6
|
+
return target
|
7
|
+
end
|
8
|
+
end
|
9
|
+
nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module Xcodeproj::Project::Object
|
15
|
+
class PBXNativeTarget
|
16
|
+
def sources_build_phase()
|
17
|
+
self.build_phases.each do |phase|
|
18
|
+
if phase.kind_of?(Xcodeproj::Project::Object::PBXSourcesBuildPhase)
|
19
|
+
return phase
|
20
|
+
end
|
21
|
+
end
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class PBXSourcesBuildPhase
|
27
|
+
def include_filename?(pattern)
|
28
|
+
filenames = self.file_display_names
|
29
|
+
if filenames.length == 0 and pattern
|
30
|
+
return false
|
31
|
+
end
|
32
|
+
filenames.each do |filename|
|
33
|
+
if not filename.match pattern
|
34
|
+
return false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
return true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/cocoaseeds.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
require 'fileutils'
|
1
3
|
require 'xcodeproj'
|
4
|
+
require 'yaml'
|
2
5
|
|
3
|
-
module
|
6
|
+
module Seeds
|
4
7
|
require 'cocoaseeds/version'
|
8
|
+
require_relative 'cocoaseeds/xcodehelper'
|
5
9
|
|
6
|
-
autoload :Command,
|
7
|
-
autoload :Core,
|
8
|
-
autoload :
|
10
|
+
autoload :Command, 'cocoaseeds/command'
|
11
|
+
autoload :Core, 'cocoaseeds/core'
|
12
|
+
autoload :Exception, 'cocoaseeds/exception'
|
13
|
+
autoload :Seed, 'cocoaseeds/seed'
|
9
14
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoaseeds
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Suyeol Jeon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xcodeproj
|
@@ -51,8 +51,10 @@ files:
|
|
51
51
|
- lib/cocoaseeds.rb
|
52
52
|
- lib/cocoaseeds/command.rb
|
53
53
|
- lib/cocoaseeds/core.rb
|
54
|
+
- lib/cocoaseeds/exception.rb
|
54
55
|
- lib/cocoaseeds/seed.rb
|
55
56
|
- lib/cocoaseeds/version.rb
|
57
|
+
- lib/cocoaseeds/xcodehelper.rb
|
56
58
|
homepage: https://github.com/devxoul/CocoaSeeds
|
57
59
|
licenses:
|
58
60
|
- MIT
|