cocoapods-pack 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rubocop.yml +43 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +149 -0
- data/LICENSE +202 -0
- data/README.md +116 -0
- data/Rakefile +8 -0
- data/cocoapods-pack.gemspec +34 -0
- data/endToEndPackMySample.sh +13 -0
- data/lib/cocoapods-pack/command/pack.rb +497 -0
- data/lib/cocoapods-pack/command.rb +19 -0
- data/lib/cocoapods-pack/env_parser.rb +23 -0
- data/lib/cocoapods-pack/find_follow.rb +106 -0
- data/lib/cocoapods-pack/gem_version.rb +21 -0
- data/lib/cocoapods-pack/spec_generator.rb +154 -0
- data/lib/cocoapods-pack/xcode_builder.rb +193 -0
- data/lib/cocoapods-pack/zip_file_generator.rb +56 -0
- data/lib/cocoapods_pack.rb +19 -0
- data/lib/cocoapods_plugin.rb +19 -0
- data/local_pod.rb +7 -0
- data/packMySample.sh +8 -0
- data/samples/CLIConsumer/CLIConsumer/dummy.swift +1 -0
- data/samples/CLIConsumer/CLIConsumer/main.m +10 -0
- data/samples/CLIConsumer/CLIConsumer.xcodeproj/project.pbxproj +329 -0
- data/samples/CLIConsumer/CLIConsumer.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/samples/CLIConsumer/CLIConsumer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/samples/CLIConsumer/CLIConsumer.xcodeproj/xcshareddata/xcschemes/CLIConsumer.xcscheme +88 -0
- data/samples/CLIConsumer/CLIConsumer.xcworkspace/contents.xcworkspacedata +10 -0
- data/samples/CLIConsumer/CLIConsumer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/samples/CLIConsumer/Podfile +9 -0
- data/samples/CLIConsumer/build.sh +13 -0
- data/samples/MySample/MIT +1 -0
- data/samples/MySample/MySample/Internal/MySample_Internal.h +1 -0
- data/samples/MySample/MySample/MyObjCInSwiftSample.swift +7 -0
- data/samples/MySample/MySample/MySample.h +7 -0
- data/samples/MySample/MySample/MySample.m +10 -0
- data/samples/MySample/MySample/MySwiftSample.swift +7 -0
- data/samples/MySample/MySample.podspec +45 -0
- data/samples/MySample/MySample.xcodeproj/project.pbxproj +379 -0
- data/samples/MySample/MySample.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/samples/MySample/MySampleTests/Info.plist +24 -0
- data/samples/MySample/python/a.py +1 -0
- data/samples/MySample/python/subpython/b.py +1 -0
- data/samples/MySample/resources/a.png +1 -0
- data/samples/MySample/resources/lets/go/nuts/b.png +1 -0
- data/samples/MySample/resources/lets/go/runit.png +0 -0
- data/spec/acceptance_spec.rb +22 -0
- data/spec/env_parser_spec.rb +18 -0
- data/spec/spec_generator_spec.rb +247 -0
- data/spec/spec_helper.rb +47 -0
- data/spec/xcode_builder_spec.rb +113 -0
- metadata +207 -0
@@ -0,0 +1,247 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'ostruct'
|
5
|
+
require 'tempfile'
|
6
|
+
require_relative '../lib/cocoapods-pack/spec_generator'
|
7
|
+
|
8
|
+
describe_with_private_methods SpecGenerator do
|
9
|
+
def source_spec(opts = {})
|
10
|
+
fixed_root = {
|
11
|
+
name: 'MySample',
|
12
|
+
dependencies: [],
|
13
|
+
attributes_hash: { 'name' => 'MySample' }.merge(opts[:attributes_hash] || {})
|
14
|
+
}
|
15
|
+
OpenStruct.new(fixed_root.merge(opts[:root] || {}))
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'for dynamic frameworks' do
|
19
|
+
let(:use_frameworks) { true }
|
20
|
+
temp_file = Tempfile.new('MySample.zip')
|
21
|
+
|
22
|
+
it 'generates a ruby podspec' do
|
23
|
+
artifact_repo_url = 'http://example.com/MySample.zip'
|
24
|
+
spec = SpecGenerator.new source_podspec, artifact_repo_url, temp_file
|
25
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
26
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'works with multiple platforms' do
|
30
|
+
source_podspec = source_spec
|
31
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
32
|
+
spec.add_platform(Pod::Platform.new(:ios, '8.0'), 'MySample.xcframework')
|
33
|
+
spec.add_platform(Pod::Platform.new(:osx), 'MySample.xcframework')
|
34
|
+
spec.add_platform(Pod::Platform.new(:watchos, '3.0'), 'MySample.xcframework')
|
35
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
36
|
+
Pod::Spec.new do |s|
|
37
|
+
s.name = 'MySample'
|
38
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
39
|
+
|
40
|
+
s.ios.deployment_target = '8.0'
|
41
|
+
s.ios.vendored_frameworks = 'ios/MySample.xcframework'
|
42
|
+
|
43
|
+
s.osx.deployment_target = nil
|
44
|
+
s.osx.vendored_frameworks = 'osx/MySample.xcframework'
|
45
|
+
|
46
|
+
s.watchos.deployment_target = '3.0'
|
47
|
+
s.watchos.vendored_frameworks = 'watchos/MySample.xcframework'
|
48
|
+
end
|
49
|
+
)
|
50
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
51
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'works with a single platform' do
|
55
|
+
source_podspec = source_spec
|
56
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
57
|
+
spec.add_platform(Pod::Platform.new(:ios), 'MySample.xcframework')
|
58
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
59
|
+
Pod::Spec.new do |s|
|
60
|
+
s.name = 'MySample'
|
61
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
62
|
+
|
63
|
+
s.platform = :ios
|
64
|
+
|
65
|
+
s.ios.vendored_frameworks = 'ios/MySample.xcframework'
|
66
|
+
end
|
67
|
+
)
|
68
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
69
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'works with dependencies' do
|
73
|
+
source_podspec = source_spec(root: { dependencies: [Pod::Dependency.new('Dependency1', ['~> 1.0']),
|
74
|
+
Pod::Dependency.new('Dependency2', ['>= 0']),
|
75
|
+
Pod::Dependency.new('Dependency3', ['>= 0', '< 2.0'])] })
|
76
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
77
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
78
|
+
Pod::Spec.new do |s|
|
79
|
+
s.name = 'MySample'
|
80
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
81
|
+
|
82
|
+
s.dependency 'Dependency1', '~> 1.0'
|
83
|
+
s.dependency 'Dependency2', '>= 0'
|
84
|
+
s.dependency 'Dependency3', '< 2.0', '>= 0'
|
85
|
+
end
|
86
|
+
)
|
87
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
88
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'works with vendored_libraries' do
|
92
|
+
source_podspec = source_spec(attributes_hash: { 'vendored_libraries' => ['lib1.a', 'lib2.a'] })
|
93
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
94
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
95
|
+
Pod::Spec.new do |s|
|
96
|
+
s.name = 'MySample'
|
97
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
98
|
+
s.vendored_libraries = 'lib1.a', 'lib2.a'
|
99
|
+
end
|
100
|
+
)
|
101
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
102
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'works with platform vendored_libraries' do
|
106
|
+
source_podspec = source_spec(attributes_hash: { 'ios' => { 'vendored_libraries' => 'ioslib.a' } })
|
107
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
108
|
+
spec.add_platform(Pod::Platform.new(:ios), 'MySample.xcframework')
|
109
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
110
|
+
Pod::Spec.new do |s|
|
111
|
+
s.name = 'MySample'
|
112
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
113
|
+
|
114
|
+
s.platform = :ios
|
115
|
+
|
116
|
+
s.ios.vendored_frameworks = 'ios/MySample.xcframework'
|
117
|
+
s.ios.vendored_libraries = 'ioslib.a'
|
118
|
+
end
|
119
|
+
)
|
120
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
121
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'works with vendored_frameworks' do
|
125
|
+
source_podspec = source_spec(attributes_hash: { 'vendored_frameworks' => ['lib1.framework', 'lib2.framework'] })
|
126
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
127
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
128
|
+
Pod::Spec.new do |s|
|
129
|
+
s.name = 'MySample'
|
130
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
131
|
+
s.vendored_frameworks = 'lib1.framework', 'lib2.framework'
|
132
|
+
end
|
133
|
+
)
|
134
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
135
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'works with platform vendored_frameworks' do
|
139
|
+
source_podspec = source_spec(attributes_hash: { 'ios' => { 'vendored_frameworks' => 'ioslib.framework' } })
|
140
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
141
|
+
spec.add_platform(Pod::Platform.new(:ios), 'MySample.xcframework')
|
142
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
143
|
+
Pod::Spec.new do |s|
|
144
|
+
s.name = 'MySample'
|
145
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
146
|
+
|
147
|
+
s.platform = :ios
|
148
|
+
|
149
|
+
s.ios.vendored_frameworks = 'ios/MySample.xcframework', 'ioslib.framework'
|
150
|
+
end
|
151
|
+
)
|
152
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
153
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'works with glob paths' do
|
157
|
+
source_podspec = source_spec(attributes_hash: { 'ios' => { 'vendored_libraries' => '*.a' } })
|
158
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
159
|
+
spec.add_platform(Pod::Platform.new(:ios), 'MySample.xcframework')
|
160
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
161
|
+
Pod::Spec.new do |s|
|
162
|
+
s.name = 'MySample'
|
163
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
164
|
+
|
165
|
+
s.platform = :ios
|
166
|
+
|
167
|
+
s.ios.vendored_frameworks = 'ios/MySample.xcframework'
|
168
|
+
s.ios.vendored_libraries = '*.a'
|
169
|
+
end
|
170
|
+
)
|
171
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
172
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'works with resources' do
|
176
|
+
source_podspec = source_spec(attributes_hash: { 'resources' => ['a.png'], 'preserve_paths' => ['script.sh', 'run.sh'] })
|
177
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
178
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
179
|
+
Pod::Spec.new do |s|
|
180
|
+
s.name = 'MySample'
|
181
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
182
|
+
s.resources = 'a.png'
|
183
|
+
s.preserve_paths = 'script.sh', 'run.sh'
|
184
|
+
end
|
185
|
+
)
|
186
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
187
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
188
|
+
end
|
189
|
+
|
190
|
+
xit 'works with module maps and static libraries' do
|
191
|
+
source_podspec = source_spec(root: { module_map: 'module.modulemap' })
|
192
|
+
spec = SpecGenerator.new source_podspec, 'url/MySample.zip', temp_file
|
193
|
+
spec.add_platform(Pod::Platform.new(:ios, '7.0'), 'MySample.xcframework')
|
194
|
+
expected_output = %(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
195
|
+
Pod::Spec.new do |s|
|
196
|
+
s.name = 'MySample'
|
197
|
+
s.source = {:http=>"url/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
198
|
+
|
199
|
+
s.platform = :ios, '7.0'
|
200
|
+
|
201
|
+
s.ios.module_map = 'ios/include/module.modulemap'
|
202
|
+
s.ios.vendored_frameworks = 'ios/MySample.xcframework'
|
203
|
+
end
|
204
|
+
)
|
205
|
+
expect(spec.generate_ruby_string).to eq(expected_output)
|
206
|
+
expect(spec.generate.to_pretty_json).to eq(Pod::Specification.from_string(expected_output, 'name.podspec').to_pretty_json)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
let :source_podspec do
|
211
|
+
description = <<-DESCRIPTION
|
212
|
+
A longer description of MySample in Markdown format.
|
213
|
+
It's lines.
|
214
|
+
DESCRIPTION
|
215
|
+
source_spec(attributes_hash: { 'name' => 'MySample',
|
216
|
+
'version' => '0.0.1',
|
217
|
+
'summary' => 'A short description of MySample.',
|
218
|
+
'description' => description,
|
219
|
+
'homepage' => 'http://squareup.com/',
|
220
|
+
'license' =>
|
221
|
+
{ 'type' => 'MIT',
|
222
|
+
'text' => "Copyright 2012\nPermission is granted to...\n" },
|
223
|
+
'authors' => { 'Jack Dorsey' => 'notsoeasytogivethisaway@gmail.com' },
|
224
|
+
'swift_versions' => '5.0',
|
225
|
+
'platforms' => { 'ios' => nil },
|
226
|
+
'source' => { 'git' => 'local only', 'tag' => '0.0.1' },
|
227
|
+
'source_files' => ['MySample', 'MySample/**/*.{h,m,swift}'],
|
228
|
+
'exclude_files' => 'MySample/Exclude',
|
229
|
+
'artifact_repo_url' => 'http://example.com/my.zip' })
|
230
|
+
end
|
231
|
+
|
232
|
+
let :expected_output do
|
233
|
+
%(# Generated by cocoapods-pack #{CocoapodsPack::VERSION} - Do not manually modify.
|
234
|
+
Pod::Spec.new do |s|
|
235
|
+
s.name = 'MySample'
|
236
|
+
s.version = '0.0.1'
|
237
|
+
s.summary = 'A short description of MySample.'
|
238
|
+
s.license = {"type"=>"MIT", "text"=>"Copyright 2012\\nPermission is granted to...\\n"}
|
239
|
+
s.authors = {"Jack Dorsey"=>"notsoeasytogivethisaway@gmail.com"}
|
240
|
+
s.homepage = 'http://squareup.com/'
|
241
|
+
s.description = 'A longer description of MySample in Markdown format.\\nIt\\'s lines.\\n'
|
242
|
+
s.source = {:http=>"http://example.com/MySample.zip", :sha256=>"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
|
243
|
+
s.swift_versions = '5.0'
|
244
|
+
end
|
245
|
+
)
|
246
|
+
end
|
247
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'pp'
|
5
|
+
require 'rspec'
|
6
|
+
require 'cocoapods'
|
7
|
+
|
8
|
+
module Kernel
|
9
|
+
# Like describe, but makes all private/protected instance methods of the clazz public
|
10
|
+
def describe_with_private_methods(clazz, *additional_desc, &block)
|
11
|
+
if clazz.is_a?(Module)
|
12
|
+
methods = clazz.private_instance_methods(false) + clazz.protected_methods(false)
|
13
|
+
clazz.send(:public, *methods)
|
14
|
+
end
|
15
|
+
describe(clazz, *additional_desc, &block)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Pod
|
20
|
+
# Disable the wrapping so the output is deterministic in the tests.
|
21
|
+
#
|
22
|
+
UI.disable_wrap = true
|
23
|
+
|
24
|
+
# Redirects the messages to an internal store.
|
25
|
+
#
|
26
|
+
module UI
|
27
|
+
@output = ''
|
28
|
+
@warnings = ''
|
29
|
+
|
30
|
+
class << self
|
31
|
+
attr_accessor :output
|
32
|
+
attr_accessor :warnings
|
33
|
+
|
34
|
+
def puts(message = '')
|
35
|
+
@output << "#{message}\n"
|
36
|
+
end
|
37
|
+
|
38
|
+
def warn(message = '', _actions = [])
|
39
|
+
@warnings << "#{message}\n"
|
40
|
+
end
|
41
|
+
|
42
|
+
def print(message)
|
43
|
+
@output << message
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require_relative '../lib/cocoapods-pack/xcode_builder'
|
5
|
+
|
6
|
+
describe_with_private_methods XcodeBuilder do
|
7
|
+
let(:xcodebuild_opts) { nil }
|
8
|
+
|
9
|
+
subject do
|
10
|
+
ui = spy
|
11
|
+
XcodeBuilder.new('xcodeproject_path', xcodebuild_opts, 'xcodebuild_outdir', ui)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'breaks when giving a bad platform' do
|
15
|
+
expect { subject.build(:windows, 'target') }.to raise_error("Unknown platform: 'windows'")
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'raises BuildError if shellout fails' do
|
19
|
+
expect { subject.build(:windows, 'target') }.to raise_error("Unknown platform: 'windows'")
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'breaks with unknown type' do
|
23
|
+
builder = subject
|
24
|
+
mock_status = instance_double(Process::Status, success?: false, exitstatus: 42)
|
25
|
+
allow(builder).to receive(:warn)
|
26
|
+
allow(builder).to receive(:shellout).and_return(['error stderr', mock_status])
|
27
|
+
expected_error_message = "Failed to execute 'xcodebuild this will totally fail'. Exit status: 42"
|
28
|
+
expect { builder.run('xcodebuild this will totally fail') }.to raise_error(XcodeBuilder::BuildError, expected_error_message)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'executes xcodebuild in shell for osx' do
|
32
|
+
builder = subject
|
33
|
+
allow(builder).to receive(:run)
|
34
|
+
builder.build(:osx, 'PodsTarget')
|
35
|
+
expect(builder).to have_received(:run).with(%w[xcodebuild ONLY_ACTIVE_ARCH=NO SKIP_INSTALL=NO
|
36
|
+
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
37
|
+
-project xcodeproject_path
|
38
|
+
-scheme "PodsTarget"
|
39
|
+
-configuration Release
|
40
|
+
EXCLUDED_SOURCE_FILE_NAMES=*-dummy.m
|
41
|
+
-destination "generic/platform=macOS"
|
42
|
+
archive
|
43
|
+
-archivePath xcodebuild_outdir/PodsTarget.xcarchive].join(' '))
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'executes xcodebuild in shell for ios' do
|
47
|
+
builder = subject
|
48
|
+
allow(builder).to receive(:run)
|
49
|
+
builder.build(:ios, 'PodsTarget')
|
50
|
+
expect(builder).to have_received(:run).twice
|
51
|
+
expect(builder).to have_received(:run).with(%w[xcodebuild ONLY_ACTIVE_ARCH=NO SKIP_INSTALL=NO
|
52
|
+
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
53
|
+
-project xcodeproject_path
|
54
|
+
-scheme "PodsTarget"
|
55
|
+
-configuration Release
|
56
|
+
EXCLUDED_SOURCE_FILE_NAMES=*-dummy.m
|
57
|
+
-destination "generic/platform=iOS Simulator"
|
58
|
+
archive
|
59
|
+
-archivePath xcodebuild_outdir/PodsTarget-simulator.xcarchive].join(' '))
|
60
|
+
expect(builder).to have_received(:run).with(%w[xcodebuild ONLY_ACTIVE_ARCH=NO SKIP_INSTALL=NO
|
61
|
+
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
62
|
+
-project xcodeproject_path
|
63
|
+
-scheme "PodsTarget"
|
64
|
+
-configuration Release
|
65
|
+
EXCLUDED_SOURCE_FILE_NAMES=*-dummy.m
|
66
|
+
-destination "generic/platform=iOS"
|
67
|
+
archive
|
68
|
+
-archivePath xcodebuild_outdir/PodsTarget-device.xcarchive].join(' '))
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'executes xcodebuild in shell for watchos' do
|
72
|
+
builder = subject
|
73
|
+
allow(builder).to receive(:run)
|
74
|
+
builder.build(:watchos, 'PodsTarget')
|
75
|
+
expect(builder).to have_received(:run).twice
|
76
|
+
expect(builder).to have_received(:run).with(%w[xcodebuild ONLY_ACTIVE_ARCH=NO SKIP_INSTALL=NO
|
77
|
+
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
78
|
+
-project xcodeproject_path
|
79
|
+
-scheme "PodsTarget"
|
80
|
+
-configuration Release
|
81
|
+
EXCLUDED_SOURCE_FILE_NAMES=*-dummy.m
|
82
|
+
-destination "generic/platform=watchOS Simulator"
|
83
|
+
archive
|
84
|
+
-archivePath xcodebuild_outdir/PodsTarget-simulator.xcarchive].join(' '))
|
85
|
+
expect(builder).to have_received(:run).with(%w[xcodebuild ONLY_ACTIVE_ARCH=NO SKIP_INSTALL=NO
|
86
|
+
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
87
|
+
-project xcodeproject_path
|
88
|
+
-scheme "PodsTarget"
|
89
|
+
-configuration Release
|
90
|
+
EXCLUDED_SOURCE_FILE_NAMES=*-dummy.m
|
91
|
+
-destination "generic/platform=watchOS"
|
92
|
+
archive
|
93
|
+
-archivePath xcodebuild_outdir/PodsTarget-device.xcarchive].join(' '))
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'with non-nil xcodebuild_opts' do
|
97
|
+
let(:xcodebuild_opts) { 'CODE_SIGNING_REQUIRED=NO' }
|
98
|
+
it 'passes xcodebuild_opts to xcodebuild' do
|
99
|
+
allow(subject).to receive(:run)
|
100
|
+
subject.build(:osx, 'PodsTarget')
|
101
|
+
expect(subject).to have_received(:run).with(%w[xcodebuild ONLY_ACTIVE_ARCH=NO SKIP_INSTALL=NO
|
102
|
+
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
103
|
+
-project xcodeproject_path
|
104
|
+
-scheme "PodsTarget"
|
105
|
+
-configuration Release
|
106
|
+
EXCLUDED_SOURCE_FILE_NAMES=*-dummy.m
|
107
|
+
-destination "generic/platform=macOS"
|
108
|
+
CODE_SIGNING_REQUIRED=NO
|
109
|
+
archive
|
110
|
+
-archivePath xcodebuild_outdir/PodsTarget.xcarchive].join(' '))
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
metadata
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cocoapods-pack
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Square Inc.
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-11-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: cocoapods
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.10'
|
48
|
+
- - "<"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '2.0'
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '1.10'
|
58
|
+
- - "<"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: pry
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.10'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0.10'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rake
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '13.0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '13.0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rspec
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '3.0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '3.0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rubyzip
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.1'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '1.1'
|
117
|
+
description: |
|
118
|
+
A CocoaPods plugin that converts a given podspec into its binary version.
|
119
|
+
For a given podspec, a zip file will be produced containing the binary representation of the original podspec sources.
|
120
|
+
Each platform is packed as an `xcframework` within the zip file.
|
121
|
+
Other attributes such as `resource_bundles` specified in the source podspec will also be packed.
|
122
|
+
A binary podspec is also generated that can be published to a CocoaPods specs repo.
|
123
|
+
email:
|
124
|
+
executables: []
|
125
|
+
extensions: []
|
126
|
+
extra_rdoc_files: []
|
127
|
+
files:
|
128
|
+
- ".gitignore"
|
129
|
+
- ".rubocop.yml"
|
130
|
+
- Gemfile
|
131
|
+
- Gemfile.lock
|
132
|
+
- LICENSE
|
133
|
+
- README.md
|
134
|
+
- Rakefile
|
135
|
+
- cocoapods-pack.gemspec
|
136
|
+
- endToEndPackMySample.sh
|
137
|
+
- lib/cocoapods-pack/command.rb
|
138
|
+
- lib/cocoapods-pack/command/pack.rb
|
139
|
+
- lib/cocoapods-pack/env_parser.rb
|
140
|
+
- lib/cocoapods-pack/find_follow.rb
|
141
|
+
- lib/cocoapods-pack/gem_version.rb
|
142
|
+
- lib/cocoapods-pack/spec_generator.rb
|
143
|
+
- lib/cocoapods-pack/xcode_builder.rb
|
144
|
+
- lib/cocoapods-pack/zip_file_generator.rb
|
145
|
+
- lib/cocoapods_pack.rb
|
146
|
+
- lib/cocoapods_plugin.rb
|
147
|
+
- local_pod.rb
|
148
|
+
- packMySample.sh
|
149
|
+
- samples/CLIConsumer/CLIConsumer.xcodeproj/project.pbxproj
|
150
|
+
- samples/CLIConsumer/CLIConsumer.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
151
|
+
- samples/CLIConsumer/CLIConsumer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
|
152
|
+
- samples/CLIConsumer/CLIConsumer.xcodeproj/xcshareddata/xcschemes/CLIConsumer.xcscheme
|
153
|
+
- samples/CLIConsumer/CLIConsumer.xcworkspace/contents.xcworkspacedata
|
154
|
+
- samples/CLIConsumer/CLIConsumer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
|
155
|
+
- samples/CLIConsumer/CLIConsumer/dummy.swift
|
156
|
+
- samples/CLIConsumer/CLIConsumer/main.m
|
157
|
+
- samples/CLIConsumer/Podfile
|
158
|
+
- samples/CLIConsumer/build.sh
|
159
|
+
- samples/MySample/MIT
|
160
|
+
- samples/MySample/MySample.podspec
|
161
|
+
- samples/MySample/MySample.xcodeproj/project.pbxproj
|
162
|
+
- samples/MySample/MySample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
163
|
+
- samples/MySample/MySample/Internal/MySample_Internal.h
|
164
|
+
- samples/MySample/MySample/MyObjCInSwiftSample.swift
|
165
|
+
- samples/MySample/MySample/MySample.h
|
166
|
+
- samples/MySample/MySample/MySample.m
|
167
|
+
- samples/MySample/MySample/MySwiftSample.swift
|
168
|
+
- samples/MySample/MySampleTests/Info.plist
|
169
|
+
- samples/MySample/python/a.py
|
170
|
+
- samples/MySample/python/subpython/b.py
|
171
|
+
- samples/MySample/resources/a.png
|
172
|
+
- samples/MySample/resources/lets/go/nuts/b.png
|
173
|
+
- samples/MySample/resources/lets/go/runit.png
|
174
|
+
- spec/acceptance_spec.rb
|
175
|
+
- spec/env_parser_spec.rb
|
176
|
+
- spec/spec_generator_spec.rb
|
177
|
+
- spec/spec_helper.rb
|
178
|
+
- spec/xcode_builder_spec.rb
|
179
|
+
homepage: https://github.com/square/cocoapods-pack
|
180
|
+
licenses:
|
181
|
+
- Apache-2.0
|
182
|
+
metadata: {}
|
183
|
+
post_install_message:
|
184
|
+
rdoc_options: []
|
185
|
+
require_paths:
|
186
|
+
- lib
|
187
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: 2.5.0
|
192
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '0'
|
197
|
+
requirements: []
|
198
|
+
rubygems_version: 3.0.9
|
199
|
+
signing_key:
|
200
|
+
specification_version: 4
|
201
|
+
summary: Converts a source podspec into its binary form.
|
202
|
+
test_files:
|
203
|
+
- spec/acceptance_spec.rb
|
204
|
+
- spec/env_parser_spec.rb
|
205
|
+
- spec/spec_generator_spec.rb
|
206
|
+
- spec/spec_helper.rb
|
207
|
+
- spec/xcode_builder_spec.rb
|