xcode-install 2.1.1 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +53 -9
- data/Gemfile +3 -3
- data/Rakefile +1 -1
- data/bin//360/237/216/211 +1 -1
- data/lib/xcode/install.rb +38 -21
- data/lib/xcode/install/simulators.rb +4 -2
- data/lib/xcode/install/version.rb +1 -1
- data/spec/install_spec.rb +1 -1
- data/xcode-install.gemspec +1 -0
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d26fe330e988d0a313ffeac4386ffa27edeff03
|
4
|
+
data.tar.gz: c2d3bc67f1412c9e229697e9d7d7dcbbb96ff03a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b712a71ce8325eab4b1afc9ba3434ae93593b31c7987d0418062dde651d114ddffe39d6d155fa3e8ce44f88cd096e36cf84691ee2c99f03fb1af0b958b204c2c
|
7
|
+
data.tar.gz: fcf747735c56f7352bee1cc492dfe95813e3caa118ab8a49cd88058cd3ffa467920ee34edfbe8c3630536e8cd1ccf6403e226f5c7969f3c09832f5c7f63899b7
|
data/.rubocop_todo.yml
CHANGED
@@ -1,34 +1,78 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2017-06-12 12:01:46 +0100 using RuboCop version 0.49.1.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count:
|
9
|
+
# Offense count: 3
|
10
|
+
# Cop supports --auto-correct.
|
11
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
12
|
+
# SupportedStyles: auto_detection, squiggly, active_support, powerpack, unindent
|
13
|
+
Layout/IndentHeredoc:
|
14
|
+
Exclude:
|
15
|
+
- 'lib/xcode/install.rb'
|
16
|
+
|
17
|
+
# Offense count: 12
|
10
18
|
Metrics/AbcSize:
|
11
|
-
Max:
|
19
|
+
Max: 44
|
20
|
+
|
21
|
+
# Offense count: 4
|
22
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
23
|
+
Metrics/BlockLength:
|
24
|
+
Max: 76
|
12
25
|
|
13
26
|
# Offense count: 1
|
14
27
|
# Configuration parameters: CountComments.
|
15
28
|
Metrics/ClassLength:
|
16
|
-
Max:
|
29
|
+
Max: 252
|
17
30
|
|
18
31
|
# Offense count: 3
|
19
32
|
Metrics/CyclomaticComplexity:
|
20
|
-
Max:
|
33
|
+
Max: 10
|
21
34
|
|
22
|
-
# Offense count:
|
35
|
+
# Offense count: 12
|
23
36
|
# Configuration parameters: CountComments.
|
24
37
|
Metrics/MethodLength:
|
25
|
-
Max:
|
38
|
+
Max: 51
|
26
39
|
|
27
40
|
# Offense count: 1
|
28
41
|
# Configuration parameters: CountKeywordArgs.
|
29
42
|
Metrics/ParameterLists:
|
30
43
|
Max: 6
|
31
44
|
|
32
|
-
# Offense count:
|
45
|
+
# Offense count: 3
|
33
46
|
Metrics/PerceivedComplexity:
|
34
|
-
Max:
|
47
|
+
Max: 12
|
48
|
+
|
49
|
+
# Offense count: 1
|
50
|
+
# Cop supports --auto-correct.
|
51
|
+
Performance/CompareWithBlock:
|
52
|
+
Exclude:
|
53
|
+
- 'lib/xcode/install.rb'
|
54
|
+
|
55
|
+
# Offense count: 1
|
56
|
+
# Cop supports --auto-correct.
|
57
|
+
# Configuration parameters: IncludeActiveSupportAliases.
|
58
|
+
Performance/DoubleStartEndWith:
|
59
|
+
Exclude:
|
60
|
+
- 'lib/xcode/install.rb'
|
61
|
+
|
62
|
+
# Offense count: 1
|
63
|
+
Security/MarshalLoad:
|
64
|
+
Exclude:
|
65
|
+
- 'lib/xcode/install.rb'
|
66
|
+
|
67
|
+
# Offense count: 13
|
68
|
+
# Cop supports --auto-correct.
|
69
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
70
|
+
# SupportedStyles: only_raise, only_fail, semantic
|
71
|
+
Style/SignalException:
|
72
|
+
Exclude:
|
73
|
+
- 'lib/xcode/install.rb'
|
74
|
+
- 'lib/xcode/install/cli.rb'
|
75
|
+
- 'lib/xcode/install/install.rb'
|
76
|
+
- 'lib/xcode/install/select.rb'
|
77
|
+
- 'lib/xcode/install/simulators.rb'
|
78
|
+
- 'lib/xcode/install/uninstall.rb'
|
data/Gemfile
CHANGED
@@ -4,9 +4,9 @@ gemspec
|
|
4
4
|
|
5
5
|
group :development do
|
6
6
|
gem 'bacon'
|
7
|
-
gem '
|
7
|
+
gem 'coveralls', require: false
|
8
8
|
gem 'mocha', '~> 0.11.4'
|
9
|
+
gem 'mocha-on-bacon'
|
9
10
|
gem 'prettybacon'
|
10
|
-
gem 'rubocop', '0.
|
11
|
-
gem 'coveralls', require: false
|
11
|
+
gem 'rubocop', '~> 0.49.1', require: false
|
12
12
|
end
|
data/Rakefile
CHANGED
data/bin//360/237/216/211
CHANGED
@@ -1 +1 @@
|
|
1
|
-
xcversion
|
1
|
+
bin/xcversion
|
data/lib/xcode/install.rb
CHANGED
@@ -20,16 +20,25 @@ module XcodeInstall
|
|
20
20
|
output ||= File.basename(uri.path)
|
21
21
|
output = (Pathname.new(directory) + Pathname.new(output)) if directory
|
22
22
|
|
23
|
+
retry_options = ['--retry', '3']
|
23
24
|
progress = progress ? '--progress-bar' : '--silent'
|
24
|
-
command = ['curl', *options, '--location', '--continue-at', '-', progress, '--output', output, url].map(&:to_s)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
command = ['curl', *options, *retry_options, '--location', '--continue-at', '-', progress, '--output', output, url].map(&:to_s)
|
26
|
+
|
27
|
+
# Run the curl command in a loop, retry when curl exit status is 18
|
28
|
+
# "Partial file. Only a part of the file was transferred."
|
29
|
+
# https://curl.haxx.se/mail/archive-2008-07/0098.html
|
30
|
+
# https://github.com/KrauseFx/xcode-install/issues/210
|
31
|
+
3.times do
|
32
|
+
io = IO.popen(command)
|
33
|
+
io.each { |line| puts line }
|
34
|
+
io.close
|
35
|
+
|
36
|
+
exit_code = $?.exitstatus
|
37
|
+
return exit_code.zero? unless exit_code == 18
|
38
|
+
end
|
39
|
+
false
|
40
|
+
ensure
|
31
41
|
FileUtils.rm_f(COOKIES_PATH)
|
32
|
-
result
|
33
42
|
end
|
34
43
|
end
|
35
44
|
|
@@ -113,7 +122,7 @@ HELP
|
|
113
122
|
end
|
114
123
|
|
115
124
|
unless verify_integrity(xcode_path)
|
116
|
-
`sudo rm -
|
125
|
+
`sudo rm -rf #{xcode_path}`
|
117
126
|
return
|
118
127
|
end
|
119
128
|
|
@@ -251,7 +260,7 @@ HELP
|
|
251
260
|
names = @xcodes.map(&:name)
|
252
261
|
@xcodes += prereleases.reject { |pre| names.include?(pre.name) }
|
253
262
|
|
254
|
-
File.open(LIST_FILE, '
|
263
|
+
File.open(LIST_FILE, 'wb') do |f|
|
255
264
|
f << Marshal.dump(xcodes)
|
256
265
|
end
|
257
266
|
|
@@ -298,11 +307,11 @@ HELP
|
|
298
307
|
end
|
299
308
|
links = links.map { |pre| Xcode.new_prerelease(pre[2].strip.gsub(/.*Xcode /, ''), pre[0], pre[3]) }
|
300
309
|
|
301
|
-
if links.count
|
310
|
+
if links.count.zero?
|
302
311
|
rg = %r{platform-title.*Xcode.* beta.*<\/p>}
|
303
312
|
scan = body.scan(rg)
|
304
313
|
|
305
|
-
if scan.count
|
314
|
+
if scan.count.zero?
|
306
315
|
rg = %r{Xcode.* GM.*<\/p>}
|
307
316
|
scan = body.scan(rg)
|
308
317
|
end
|
@@ -325,14 +334,14 @@ HELP
|
|
325
334
|
|
326
335
|
def verify_integrity(path)
|
327
336
|
puts `/usr/sbin/spctl --assess --verbose=4 --type execute #{path}`
|
328
|
-
$?.exitstatus
|
337
|
+
$?.exitstatus.zero?
|
329
338
|
end
|
330
339
|
|
331
340
|
def hdiutil(*args)
|
332
341
|
io = IO.popen(['hdiutil', *args])
|
333
342
|
result = io.read
|
334
343
|
io.close
|
335
|
-
unless $?.exitstatus
|
344
|
+
unless $?.exitstatus.zero?
|
336
345
|
file_path = args[-1]
|
337
346
|
if `file -b #{file_path}`.start_with?('HTML')
|
338
347
|
fail Informative, "Failed to mount #{file_path}, logging into your account from a browser should tell you what is going wrong."
|
@@ -379,13 +388,13 @@ HELP
|
|
379
388
|
end
|
380
389
|
end
|
381
390
|
|
382
|
-
def download
|
383
|
-
result = Curl.new.fetch(source, CACHE_DIR)
|
391
|
+
def download(progress)
|
392
|
+
result = Curl.new.fetch(source, CACHE_DIR, nil, nil, progress)
|
384
393
|
result ? dmg_path : nil
|
385
394
|
end
|
386
395
|
|
387
|
-
def install
|
388
|
-
download
|
396
|
+
def install(progress)
|
397
|
+
download(progress)
|
389
398
|
prepare_package unless pkg_path.exist?
|
390
399
|
puts "Please authenticate to install #{name}..."
|
391
400
|
`sudo installer -pkg #{pkg_path} -target /`
|
@@ -491,11 +500,19 @@ HELP
|
|
491
500
|
@available_simulators ||= JSON.parse(`curl -Ls #{downloadable_index_url} | plutil -convert json -o - -`)['downloadables'].map do |downloadable|
|
492
501
|
Simulator.new(downloadable)
|
493
502
|
end
|
503
|
+
rescue JSON::ParserError
|
504
|
+
return []
|
494
505
|
end
|
495
506
|
|
496
507
|
def install_components
|
497
|
-
|
498
|
-
|
508
|
+
# starting with Xcode 9, we have `xcodebuild -runFirstLaunch` available to do package
|
509
|
+
# postinstalls using a documented option
|
510
|
+
if Gem::Version.new(@version) >= Gem::Version.new('9')
|
511
|
+
`sudo #{@path}/Contents/Developer/usr/bin/xcodebuild -runFirstLaunch`
|
512
|
+
else
|
513
|
+
Dir.glob("#{@path}/Contents/Resources/Packages/*.pkg").each do |pkg|
|
514
|
+
`sudo installer -pkg #{pkg} -target /`
|
515
|
+
end
|
499
516
|
end
|
500
517
|
osx_build_version = `sw_vers -buildVersion`.chomp
|
501
518
|
tools_version = `/usr/libexec/PlistBuddy -c "Print :ProductBuildVersion" "#{@path}/Contents/version.plist"`.chomp
|
@@ -511,7 +528,7 @@ HELP
|
|
511
528
|
|
512
529
|
def fetch_version
|
513
530
|
output = `DEVELOPER_DIR='' "#{@path}/Contents/Developer/usr/bin/xcodebuild" -version`
|
514
|
-
return '0.0' if output.nil? # ¯\_(ツ)_/¯
|
531
|
+
return '0.0' if output.nil? || output.empty? # ¯\_(ツ)_/¯
|
515
532
|
output.split("\n").first.split(' ')[1]
|
516
533
|
end
|
517
534
|
end
|
@@ -7,12 +7,14 @@ module XcodeInstall
|
|
7
7
|
self.summary = 'List or install iOS simulators.'
|
8
8
|
|
9
9
|
def self.options
|
10
|
-
[['--install=name', 'Install simulator beginning with name, e.g. \'iOS 8.4\', \'tvOS 9.0\'.']
|
10
|
+
[['--install=name', 'Install simulator beginning with name, e.g. \'iOS 8.4\', \'tvOS 9.0\'.'],
|
11
|
+
['--no-progress', 'Don’t show download progress.']].concat(super)
|
11
12
|
end
|
12
13
|
|
13
14
|
def initialize(argv)
|
14
15
|
@installed_xcodes = Installer.new.installed_versions
|
15
16
|
@install = argv.option('install')
|
17
|
+
@progress = argv.flag?('progress', true)
|
16
18
|
super
|
17
19
|
end
|
18
20
|
|
@@ -36,7 +38,7 @@ module XcodeInstall
|
|
36
38
|
simulator = filtered_simulators.first
|
37
39
|
fail Informative, "#{simulator.name} is already installed." if simulator.installed?
|
38
40
|
puts "Installing #{simulator.name} for Xcode #{simulator.xcode.bundle_version}..."
|
39
|
-
simulator.install
|
41
|
+
simulator.install(@progress)
|
40
42
|
else
|
41
43
|
puts "[!] More than one simulator matching #{@install} was found. Please specify the full version.".ansi.red
|
42
44
|
filtered_simulators.each do |candidate|
|
data/spec/install_spec.rb
CHANGED
@@ -48,7 +48,7 @@ module XcodeInstall
|
|
48
48
|
it 'gives more helpful error when downloaded DMG turns out to be HTML' do
|
49
49
|
installer = Installer.new
|
50
50
|
should.raise(Informative) { installer.mount('spec/fixtures/mail-verify.html') }.message
|
51
|
-
|
51
|
+
.should.include 'logging into your account from a browser'
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
data/xcode-install.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xcode-install
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boris Bügling
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: claide
|
@@ -158,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
158
|
version: '0'
|
159
159
|
requirements: []
|
160
160
|
rubyforge_project:
|
161
|
-
rubygems_version: 2.
|
161
|
+
rubygems_version: 2.6.11
|
162
162
|
signing_key:
|
163
163
|
specification_version: 4
|
164
164
|
summary: Xcode installation manager.
|
@@ -189,4 +189,3 @@ test_files:
|
|
189
189
|
- spec/prerelease_spec.rb
|
190
190
|
- spec/spec_helper.rb
|
191
191
|
- spec/uninstall_spec.rb
|
192
|
-
has_rdoc:
|