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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8fe83f612365b4245d11ad2f1590e5bbe9ca7e41
4
- data.tar.gz: e81a6d18d6b3e1fee1bf5858ea33821c45822f5f
3
+ metadata.gz: 724330a00e775b6a876548b7163b4fd578ac247f
4
+ data.tar.gz: 0d6073a5069e1f2943f5bad83ea610dc575a73df
5
5
  SHA512:
6
- metadata.gz: c9d4ed1a0bdf51c68394d7ceab1903a3c2b89377a78d962ea60f7cfce7de99a60ac76e28411ca388fe6278645334f302ca185d5164617a5b5cdf613bc6ac2559
7
- data.tar.gz: 50099b6e992d865d6ca0b017a075ec40864fa4216add39620909301d487865ec41450f63e14e51d6859204eb8b1c9aca521636ff56d30cfa9a555fbd41efbccc
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: eaf7e6c786fd5ccc6fb88e943bf7c5e6c27569a3
3
+ revision: 1eeb06f7d381acd65414b86b42fdf3538faae01c
4
4
  branch: master
5
5
  specs:
6
- prettybacon (0.0.1)
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.16)
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.4.0)
22
- cocoapods (0.29.0)
21
+ claide (0.6.1)
22
+ cocoapods (0.33.1)
23
23
  activesupport (>= 3.2.15, < 4)
24
- claide (~> 0.4.0)
25
- cocoapods-core (= 0.29.0)
26
- cocoapods-downloader (~> 0.3.0)
27
- cocoapods-try-release-fix (~> 0.1.1)
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.5)
31
+ nap (~> 0.7)
32
32
  open4 (~> 1.3)
33
- xcodeproj (~> 0.14.1)
34
- cocoapods-core (0.29.0)
35
- activesupport (>= 3.2.15, < 4)
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.3.0)
40
- cocoapods-try-release-fix (0.1.1)
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.9)
45
+ i18n (0.6.11)
45
46
  json_pure (1.8.1)
46
- metaclass (0.0.2)
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.8.4)
52
- nap (0.6.0)
53
- open4 (1.3.0)
54
- rake (10.1.1)
55
- xcodeproj (0.14.1)
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
 
@@ -1,5 +1,5 @@
1
1
  module Pod
2
2
  module Packager
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
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
@@ -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
- builder = SpecBuilder.new(@spec)
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
- `cp #{sandbox.public_headers.root}/#{@spec.name}/*.h #{headers_path}`
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
- `lipo #{config.sandbox_root}/build/libPods.a #{config.sandbox_root}/build-sim/libPods.a -create -output #{versions_path}/#{@spec.name}`
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
- `cp #{config.sandbox_root}/build/libPods.a #{versions_path}/#{@spec.name}`
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
- root_path = Pathname.new(@spec.name + '-' + platform + '.framework')
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 = @spec.name + '-' + platform.name.to_s + '.framework'
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
- #s.#{platform.name}.resource = '#{fwk_base}/Versions/A/Resources/#{fwk_base}.bundle'
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 = #{@spec.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.1.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-14 00:00:00.000000000 Z
11
+ date: 2014-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler