cocoapods-packager 0.1.0 → 0.2.0
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/Gemfile.lock +23 -23
- data/TODO.md +0 -2
- data/lib/cocoapods_packager.rb +1 -1
- data/lib/mangle.rb +1 -1
- data/lib/pod/command/package.rb +62 -9
- data/lib/spec_builder.rb +17 -5
- data/lib/symbols.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 724330a00e775b6a876548b7163b4fd578ac247f
|
4
|
+
data.tar.gz: 0d6073a5069e1f2943f5bad83ea610dc575a73df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09cff1c8012595848b4e3fa270cf34e6e634774e8236cbf987339218e624edf4ec944bc977f2fdb11fdb2d1c55b389ddd93df3962e231b4caa6596722889e190
|
7
|
+
data.tar.gz: 273ba43f82ae0d9807c45455db9db0c37ca699ed93a45d56db2d9075b56d2ec6e856df95df35ea67007c3ae2604740e0bada22a10fd64e158776884622fe6d75
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
GIT
|
2
2
|
remote: https://github.com/irrationalfab/PrettyBacon.git
|
3
|
-
revision:
|
3
|
+
revision: 1eeb06f7d381acd65414b86b42fdf3538faae01c
|
4
4
|
branch: master
|
5
5
|
specs:
|
6
|
-
prettybacon (0.0.
|
6
|
+
prettybacon (0.0.2)
|
7
7
|
bacon (~> 1.2)
|
8
8
|
|
9
9
|
PATH
|
@@ -14,48 +14,48 @@ PATH
|
|
14
14
|
GEM
|
15
15
|
remote: https://rubygems.org/
|
16
16
|
specs:
|
17
|
-
activesupport (3.2.
|
17
|
+
activesupport (3.2.19)
|
18
18
|
i18n (~> 0.6, >= 0.6.4)
|
19
19
|
multi_json (~> 1.0)
|
20
20
|
bacon (1.2.0)
|
21
|
-
claide (0.
|
22
|
-
cocoapods (0.
|
21
|
+
claide (0.6.1)
|
22
|
+
cocoapods (0.33.1)
|
23
23
|
activesupport (>= 3.2.15, < 4)
|
24
|
-
claide (~> 0.
|
25
|
-
cocoapods-core (= 0.
|
26
|
-
cocoapods-downloader (~> 0.
|
27
|
-
cocoapods-
|
24
|
+
claide (~> 0.6.1)
|
25
|
+
cocoapods-core (= 0.33.1)
|
26
|
+
cocoapods-downloader (~> 0.6.1)
|
27
|
+
cocoapods-plugins (~> 0.2.0)
|
28
28
|
colored (~> 1.2)
|
29
29
|
escape (~> 0.0.4)
|
30
30
|
json_pure (~> 1.8)
|
31
|
-
nap (~> 0.
|
31
|
+
nap (~> 0.7)
|
32
32
|
open4 (~> 1.3)
|
33
|
-
xcodeproj (~> 0.
|
34
|
-
cocoapods-core (0.
|
35
|
-
activesupport (>= 3.2.15
|
33
|
+
xcodeproj (~> 0.17.0)
|
34
|
+
cocoapods-core (0.33.1)
|
35
|
+
activesupport (>= 3.2.15)
|
36
36
|
fuzzy_match (~> 2.0.4)
|
37
37
|
json_pure (~> 1.8)
|
38
38
|
nap (~> 0.5)
|
39
|
-
cocoapods-downloader (0.
|
40
|
-
cocoapods-
|
39
|
+
cocoapods-downloader (0.6.1)
|
40
|
+
cocoapods-plugins (0.2.0)
|
41
|
+
nap
|
41
42
|
colored (1.2)
|
42
43
|
escape (0.0.4)
|
43
44
|
fuzzy_match (2.0.4)
|
44
|
-
i18n (0.6.
|
45
|
+
i18n (0.6.11)
|
45
46
|
json_pure (1.8.1)
|
46
|
-
metaclass (0.0.
|
47
|
+
metaclass (0.0.4)
|
47
48
|
mocha (0.11.4)
|
48
49
|
metaclass (~> 0.0.1)
|
49
50
|
mocha-on-bacon (0.2.1)
|
50
51
|
mocha (>= 0.9.8)
|
51
|
-
multi_json (1.
|
52
|
-
nap (0.
|
53
|
-
open4 (1.3.
|
54
|
-
rake (10.
|
55
|
-
xcodeproj (0.
|
52
|
+
multi_json (1.10.1)
|
53
|
+
nap (0.8.0)
|
54
|
+
open4 (1.3.4)
|
55
|
+
rake (10.3.2)
|
56
|
+
xcodeproj (0.17.0)
|
56
57
|
activesupport (~> 3.0)
|
57
58
|
colored (~> 1.2)
|
58
|
-
rake
|
59
59
|
|
60
60
|
PLATFORMS
|
61
61
|
ruby
|
data/TODO.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
[ ] Handle license file in generated podspec
|
2
|
-
[ ] Handle frameworks in generated podspec
|
3
2
|
[ ] Handle resources
|
4
3
|
[ ] Write tests
|
5
4
|
[ ] Implement various commandline options
|
6
5
|
[ ] Make symbol aliasing configurable
|
7
|
-
[ ] Pods with only one platform lead to lint errors
|
8
6
|
|
data/lib/cocoapods_packager.rb
CHANGED
data/lib/mangle.rb
CHANGED
@@ -19,7 +19,7 @@ module Symbols
|
|
19
19
|
all_syms += syms.map! { |sym| sym + "=Pod#{pod_name}_" + sym }
|
20
20
|
end
|
21
21
|
|
22
|
-
"GCC_PREPROCESSOR_DEFINITIONS='${inherited} #{all_syms.join(' ')}'"
|
22
|
+
"GCC_PREPROCESSOR_DEFINITIONS='${inherited} #{all_syms.uniq.join(' ')}'"
|
23
23
|
end
|
24
24
|
|
25
25
|
module_function :mangle_for_pod_dependencies
|
data/lib/pod/command/package.rb
CHANGED
@@ -1,11 +1,22 @@
|
|
1
|
+
require 'tmpdir'
|
2
|
+
|
1
3
|
module Pod
|
2
4
|
class Command
|
3
5
|
class Package < Command
|
4
6
|
self.summary = 'Package a podspec into a static library.'
|
5
|
-
self.arguments = [['NAME', :required]]
|
7
|
+
self.arguments = [['NAME', :required], ['SOURCE']]
|
8
|
+
|
9
|
+
def self.options
|
10
|
+
[
|
11
|
+
['--force', 'Overwrite existing files.']
|
12
|
+
]
|
13
|
+
end
|
6
14
|
|
7
15
|
def initialize(argv)
|
16
|
+
@force = argv.flag?('force')
|
8
17
|
@name = argv.shift_argument
|
18
|
+
@source = argv.shift_argument
|
19
|
+
|
9
20
|
@spec = spec_with_path(@name)
|
10
21
|
@spec = spec_with_name(@name) unless @spec
|
11
22
|
super
|
@@ -18,7 +29,24 @@ module Pod
|
|
18
29
|
|
19
30
|
def run
|
20
31
|
if @spec
|
21
|
-
|
32
|
+
target_dir = "#{Dir.pwd}/#{@spec.name}-#{@spec.version}"
|
33
|
+
if File.exist? target_dir
|
34
|
+
if @force
|
35
|
+
Pathname.new(target_dir).rmtree
|
36
|
+
else
|
37
|
+
UI.puts "Target directory '#{target_dir}' already exists."
|
38
|
+
return
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
work_dir = Dir.tmpdir + '/cocoapods-' + Array.new(8) { rand(36).to_s(36) }.join
|
43
|
+
|
44
|
+
UI.puts 'Using build directory ' + work_dir
|
45
|
+
Pathname.new(work_dir).mkdir
|
46
|
+
`cp #{@path} #{work_dir}`
|
47
|
+
Dir.chdir(work_dir)
|
48
|
+
|
49
|
+
builder = SpecBuilder.new(@spec, @source)
|
22
50
|
newspec = builder.spec_metadata
|
23
51
|
|
24
52
|
@spec.available_platforms.each do |platform|
|
@@ -29,6 +57,8 @@ module Pod
|
|
29
57
|
|
30
58
|
newspec += builder.spec_close
|
31
59
|
File.open(@spec.name + '.podspec', 'w') { |file| file.write(newspec) }
|
60
|
+
|
61
|
+
`mv #{work_dir} #{target_dir}`
|
32
62
|
else
|
33
63
|
help! 'Unable to find a podspec with path or name.'
|
34
64
|
end
|
@@ -60,29 +90,49 @@ module Pod
|
|
60
90
|
|
61
91
|
UI.puts 'Building framework'
|
62
92
|
xcodebuild
|
93
|
+
UI.puts 'Mangling symbols'
|
63
94
|
defines = Symbols.mangle_for_pod_dependencies(@spec.name, config.sandbox_root)
|
95
|
+
UI.puts 'Building mangled framework'
|
64
96
|
xcodebuild(defines)
|
65
97
|
|
66
|
-
versions_path, headers_path = create_framework_tree(platform.name.to_s)
|
67
|
-
|
98
|
+
versions_path, headers_path, resources_path = create_framework_tree(platform.name.to_s)
|
99
|
+
headers_source_root = "#{sandbox.public_headers.root}/#{@spec.name}"
|
100
|
+
Dir.glob("#{headers_source_root}/**/*.h").
|
101
|
+
each { |h| `ditto #{h} #{headers_path}/#{h.sub(headers_source_root, '')}` }
|
102
|
+
`cp -rp #{config.sandbox_root}/build/*.bundle #{resources_path} 2>&1`
|
103
|
+
|
104
|
+
static_libs = Dir.glob("#{config.sandbox_root}/build/*.a").reject { |e| e =~ /libPods\.a$/ }
|
68
105
|
|
69
106
|
if platform.name == :ios
|
107
|
+
`libtool -static -o #{config.sandbox_root}/build/package.a #{static_libs.join(' ')}`
|
108
|
+
|
70
109
|
xcodebuild(defines, '-sdk iphonesimulator', 'build-sim')
|
71
|
-
|
110
|
+
sim_libs = static_libs.map { |path| "#{config.sandbox_root}/build-sim/#{File.basename(path)}" }
|
111
|
+
`libtool -static -o #{config.sandbox_root}/build-sim/package.a #{sim_libs.join(' ')}`
|
112
|
+
|
113
|
+
`lipo #{config.sandbox_root}/build/package.a #{config.sandbox_root}/build-sim/libPods.a -create -output #{versions_path}/#{@spec.name}`
|
72
114
|
else
|
73
|
-
`
|
115
|
+
`libtool -static -o #{versions_path}/#{@spec.name} #{static_libs.join(' ')}`
|
74
116
|
end
|
75
117
|
|
118
|
+
#bundle_path = resources_path + Pathname.new("#{spec.name}.bundle")
|
119
|
+
#bundle_path.mkpath unless bundle_path.exist?
|
120
|
+
|
121
|
+
license_file = @spec.license[:file]
|
122
|
+
license_file = 'LICENSE' unless license_file
|
123
|
+
`cp "#{config.sandbox_root}/#{@spec.name}/#{license_file}" .`
|
124
|
+
|
76
125
|
Pathname.new(config.sandbox_root).rmtree
|
77
126
|
Pathname.new('Podfile.lock').delete
|
78
127
|
end
|
79
128
|
|
80
129
|
def xcodebuild(defines = '', args = '', build_dir = 'build')
|
81
|
-
`xcodebuild #{defines} CONFIGURATION_BUILD_DIR=#{build_dir} clean build #{args} -project #{config.sandbox_root}/Pods.xcodeproj 2>&1`
|
130
|
+
`xcodebuild #{defines} CONFIGURATION_BUILD_DIR=#{build_dir} clean build #{args} -configuration Release -target Pods -project #{config.sandbox_root}/Pods.xcodeproj 2>&1`
|
82
131
|
end
|
83
132
|
|
84
133
|
def create_framework_tree(platform)
|
85
|
-
|
134
|
+
Pathname.new(platform).mkdir
|
135
|
+
root_path = Pathname.new(platform + '/' + @spec.name + '.framework')
|
86
136
|
root_path.mkdir unless root_path.exist?
|
87
137
|
|
88
138
|
versions_path = root_path + Pathname.new('Versions/A')
|
@@ -90,12 +140,15 @@ module Pod
|
|
90
140
|
headers_path = versions_path + Pathname.new('Headers')
|
91
141
|
headers_path.mkpath unless headers_path.exist?
|
92
142
|
|
143
|
+
resources_path = versions_path + Pathname.new('Resources')
|
144
|
+
resources_path.mkpath unless resources_path.exist?
|
145
|
+
|
93
146
|
current_version_path = versions_path + Pathname.new('../Current')
|
94
147
|
`ln -sf A #{current_version_path}`
|
95
148
|
`ln -sf Versions/Current/Headers #{root_path}/`
|
96
149
|
`ln -sf Versions/Current/#{@spec.name} #{root_path}/`
|
97
150
|
|
98
|
-
return versions_path, headers_path
|
151
|
+
return versions_path, headers_path, resources_path
|
99
152
|
end
|
100
153
|
|
101
154
|
def podfile_from_spec(platform_name, deployment_target)
|
data/lib/spec_builder.rb
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
module Pod
|
2
2
|
class SpecBuilder
|
3
|
-
def initialize(spec)
|
3
|
+
def initialize(spec, source)
|
4
4
|
@spec = spec
|
5
|
+
@source = source.nil? ? '{}' : source
|
5
6
|
end
|
6
7
|
|
7
8
|
def spec_platform(platform)
|
8
|
-
fwk_base =
|
9
|
+
fwk_base = platform.name.to_s + '/' + @spec.name + '.framework'
|
9
10
|
<<SPEC
|
10
11
|
s.#{platform.name}.platform = :#{platform.symbolic_name}, '#{platform.deployment_target}'
|
11
12
|
s.#{platform.name}.preserve_paths = '#{fwk_base}'
|
12
13
|
s.#{platform.name}.public_header_files = '#{fwk_base}/Versions/A/Headers/*.h'
|
13
|
-
|
14
|
+
s.#{platform.name}.resource = '#{fwk_base}/Versions/A/Resources/*.bundle'
|
14
15
|
s.#{platform.name}.vendored_frameworks = '#{fwk_base}'
|
15
16
|
|
16
17
|
SPEC
|
17
18
|
end
|
18
19
|
|
19
20
|
def spec_metadata
|
20
|
-
<<SPEC
|
21
|
+
spec = <<SPEC
|
21
22
|
Pod::Spec.new do |s|
|
22
23
|
s.name = "#{@spec.name}"
|
23
24
|
s.version = "#{@spec.version}"
|
@@ -25,9 +26,20 @@ Pod::Spec.new do |s|
|
|
25
26
|
s.license = #{@spec.license}
|
26
27
|
s.authors = #{@spec.authors}
|
27
28
|
s.homepage = "#{@spec.homepage}"
|
28
|
-
s.source = #{@
|
29
|
+
s.source = #{@source}
|
30
|
+
|
31
|
+
SPEC
|
32
|
+
|
33
|
+
if @spec.available_platforms.length == 1
|
34
|
+
platform = @spec.available_platforms.first
|
35
|
+
|
36
|
+
spec += <<SPEC
|
37
|
+
s.platform = :#{platform.symbolic_name}, '#{platform.deployment_target}'
|
29
38
|
|
30
39
|
SPEC
|
40
|
+
end
|
41
|
+
|
42
|
+
spec
|
31
43
|
end
|
32
44
|
|
33
45
|
def spec_close
|
data/lib/symbols.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Symbols
|
2
2
|
def symbols_from_library(library)
|
3
|
-
syms = `nm #{library}`.split("\n")
|
3
|
+
syms = `nm -g #{library}`.split("\n")
|
4
4
|
|
5
5
|
result = classes_from_symbols(syms)
|
6
6
|
result + constants_from_symbols(syms)
|
@@ -21,11 +21,11 @@ module Symbols
|
|
21
21
|
consts = syms.select { |const| const[/ S /] }
|
22
22
|
consts = consts.select { |const| const !~ /OBJC|\.eh/ }
|
23
23
|
consts = consts.uniq
|
24
|
-
consts = consts.map! { |const| const.gsub(/^.*_/, '') }
|
24
|
+
consts = consts.map! { |const| const.gsub(/^.* _/, '') }
|
25
25
|
|
26
26
|
other_consts = syms.select { |const| const[/ T /] }
|
27
27
|
other_consts = other_consts.uniq
|
28
|
-
other_consts = other_consts.map! { |const| const.gsub(/^.*_/, '') }
|
28
|
+
other_consts = other_consts.map! { |const| const.gsub(/^.* _/, '') }
|
29
29
|
|
30
30
|
consts + other_consts
|
31
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-packager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyle Fuller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|