xcode-installer 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Zjc3Mzg0MjFkODNhOTUzYWFjMDI4ODhiYjRlNmY3YzVlZDNiNjUxOA==
5
+ data.tar.gz: !binary |-
6
+ MGY0ODZhMjc1NDlhNmY4YmZlNTQ3YjUzNTZmMWZmNmVlNWRlN2U0MQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZDA5YjY0MGE2MWJhMGM1ZTlhNzkyNjJlZDQ1ZDg1Njk1NjViNjQ1ZDI1NDZl
10
+ ZGUwM2E0MTFkMDU5Yzg0YjI3ODk3OTVmYzkwMGY5NjAxYzU5ODNhMWM5MTMw
11
+ Y2Q0N2I2YWFiMjhkZDljYjc3MWIwMWZmMWEyZGIzMzY2MjkyYjQ=
12
+ data.tar.gz: !binary |-
13
+ YTRmMDdhZDRlNGE3ZDE4YTI0OTIzZmVlZTJjYzE2YTcwNTI3YzQ0NmIyY2Qx
14
+ ODViZTdkZjhlMmFlZjI0YWFkYTk2ZWUwOGFiNjM2MmRiYWRlNTdmM2I1ODJi
15
+ ZGI2ZmFjNmRlMmM1YzU3NTY2ODRiNjI0YzdiYWM2YWRmZDk5YWE=
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'mechanize-progressbar', :git => 'git://github.com/phatblat/Mechanize-ProgressBar.git', :branch => 'devel'
data/Gemfile.lock ADDED
@@ -0,0 +1,68 @@
1
+ GIT
2
+ remote: git://github.com/phatblat/Mechanize-ProgressBar.git
3
+ revision: d95190161e50cbf8a18ee3263cc5255edc389004
4
+ branch: devel
5
+ specs:
6
+ mechanize-progressbar (0.2.0)
7
+ mechanize (>= 1.0.0)
8
+ progressbar (>= 0.9.0)
9
+
10
+ PATH
11
+ remote: .
12
+ specs:
13
+ xcode-installer (0.1)
14
+ commander (~> 4.1.2)
15
+ mechanize (~> 2.5.1)
16
+ mechanize-progressbar (~> 0.2.0)
17
+ security (~> 0.1.2)
18
+ terminal-table (~> 1.4.5)
19
+ trash (~> 0.2.0)
20
+
21
+ GEM
22
+ remote: https://rubygems.org/
23
+ specs:
24
+ commander (4.1.3)
25
+ highline (~> 1.6.11)
26
+ diff-lcs (1.2.4)
27
+ domain_name (0.5.11)
28
+ unf (>= 0.0.5, < 1.0.0)
29
+ highline (1.6.19)
30
+ mechanize (2.5.1)
31
+ domain_name (~> 0.5, >= 0.5.1)
32
+ mime-types (~> 1.17, >= 1.17.2)
33
+ net-http-digest_auth (~> 1.1, >= 1.1.1)
34
+ net-http-persistent (~> 2.5, >= 2.5.2)
35
+ nokogiri (~> 1.4)
36
+ ntlm-http (~> 0.1, >= 0.1.1)
37
+ webrobots (~> 0.0, >= 0.0.9)
38
+ mime-types (1.23)
39
+ net-http-digest_auth (1.3)
40
+ net-http-persistent (2.8)
41
+ nokogiri (1.5.9)
42
+ ntlm-http (0.1.1)
43
+ progressbar (0.20.0)
44
+ rake (10.0.4)
45
+ rspec (2.13.0)
46
+ rspec-core (~> 2.13.0)
47
+ rspec-expectations (~> 2.13.0)
48
+ rspec-mocks (~> 2.13.0)
49
+ rspec-core (2.13.1)
50
+ rspec-expectations (2.13.0)
51
+ diff-lcs (>= 1.1.3, < 2.0)
52
+ rspec-mocks (2.13.1)
53
+ security (0.1.2)
54
+ terminal-table (1.4.5)
55
+ trash (0.2.0)
56
+ unf (0.1.1)
57
+ unf_ext
58
+ unf_ext (0.0.6)
59
+ webrobots (0.1.1)
60
+
61
+ PLATFORMS
62
+ ruby
63
+
64
+ DEPENDENCIES
65
+ mechanize-progressbar!
66
+ rake
67
+ rspec
68
+ xcode-installer!
data/README.md ADDED
@@ -0,0 +1 @@
1
+ ### gem install xcode-installer
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require "bundler"
2
+ Bundler.setup
3
+
4
+ gemspec = eval(File.read("xcode-installer.gemspec"))
5
+
6
+ task :build => "#{gemspec.full_name}.gem"
7
+
8
+ file "#{gemspec.full_name}.gem" => gemspec.files + ["xcode-installer.gemspec"] do
9
+ system "gem build xcode-installer.gemspec"
10
+ end
11
+
12
+ task :install => ["#{gemspec.full_name}.gem"] do |t|
13
+ system "gem install ./#{gemspec.full_name}.gem"
14
+ end
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'commander/import'
4
+ require 'terminal-table'
5
+ # require 'term/ansicolor'
6
+ require 'trash'
7
+
8
+ require 'xcode-installer'
9
+
10
+ HighLine.track_eof = false # Fix for built-in Ruby
11
+ Signal.trap("INT") { exit }
12
+
13
+ program :version, '0.1' #XcodeInstaller::VERSION
14
+ program :description, 'A command-line interface for downloading Xcode'
15
+
16
+ program :help, 'Author', 'Ben Chatelain <benchatelain@gmail.com>'
17
+ program :help, 'Website', 'https://github.com/phatblat/xcode-installer'
18
+ program :help_formatter, :compact
19
+
20
+ default_command :help
21
+
22
+ global_option '--verbose'
23
+
24
+ require 'xcode-installer/apple-developer-center'
25
+ require 'xcode-installer/xcode-versions'
26
+ require 'xcode-installer/helpers'
27
+ require 'xcode-installer/agent'
28
+ require 'xcode-installer/commands'
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>baseURL</key>
6
+ <string>https://developer.apple.com/downloads/index.action</string>
7
+ <key>followRedirect</key>
8
+ <true/>
9
+ <key>handleJSONPCallbacks</key>
10
+ <false/>
11
+ <key>headers</key>
12
+ <array/>
13
+ <key>httpMethod</key>
14
+ <string>GET</string>
15
+ <key>jsonpScript</key>
16
+ <string></string>
17
+ <key>paramBodyUIChoice</key>
18
+ <integer>2</integer>
19
+ <key>parameters</key>
20
+ <array/>
21
+ <key>parametersType</key>
22
+ <integer>0</integer>
23
+ <key>presentBeforeChallenge</key>
24
+ <false/>
25
+ <key>stringEncoding</key>
26
+ <integer>4</integer>
27
+ <key>usingHTTPBody</key>
28
+ <false/>
29
+ </dict>
30
+ </plist>
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>baseURL</key>
6
+ <string>https://daw.apple.com/cgi-bin/WebObjects/DSAuthWeb.woa/wa/login?appIdKey=d4f7d769c2abecc664d0dadfed6a67f943442b5e9c87524d4587a95773750cea&amp;path=%2F%2Fdownloads%2Findex.action</string>
7
+ <key>followRedirect</key>
8
+ <true/>
9
+ <key>handleJSONPCallbacks</key>
10
+ <false/>
11
+ <key>headers</key>
12
+ <array/>
13
+ <key>httpMethod</key>
14
+ <string>GET</string>
15
+ <key>jsonpScript</key>
16
+ <string></string>
17
+ <key>paramBodyUIChoice</key>
18
+ <integer>0</integer>
19
+ <key>parameters</key>
20
+ <array/>
21
+ <key>parametersType</key>
22
+ <integer>0</integer>
23
+ <key>presentBeforeChallenge</key>
24
+ <false/>
25
+ <key>stringEncoding</key>
26
+ <integer>4</integer>
27
+ <key>usingHTTPBody</key>
28
+ <false/>
29
+ </dict>
30
+ </plist>
@@ -0,0 +1,47 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>baseURL</key>
6
+ <string>https://daw.apple.com/cgi-bin/WebObjects/DSAuthWeb.woa/882/wo/HGmoVjj5TruD6JxtNC1KHg/0.1.3.1.1.2.1.1.3.1.1</string>
7
+ <key>followRedirect</key>
8
+ <true/>
9
+ <key>handleJSONPCallbacks</key>
10
+ <false/>
11
+ <key>headers</key>
12
+ <array/>
13
+ <key>httpMethod</key>
14
+ <string>POST</string>
15
+ <key>jsonpScript</key>
16
+ <string></string>
17
+ <key>paramBodyUIChoice</key>
18
+ <integer>0</integer>
19
+ <key>parameters</key>
20
+ <array>
21
+ <dict>
22
+ <key>inUse</key>
23
+ <true/>
24
+ <key>parameter</key>
25
+ <string>theAccountName</string>
26
+ <key>value</key>
27
+ <string>ben.d.chatelain@kp.org</string>
28
+ </dict>
29
+ <dict>
30
+ <key>inUse</key>
31
+ <true/>
32
+ <key>parameter</key>
33
+ <string>theAccountPW</string>
34
+ <key>value</key>
35
+ <string>pharse</string>
36
+ </dict>
37
+ </array>
38
+ <key>parametersType</key>
39
+ <integer>0</integer>
40
+ <key>presentBeforeChallenge</key>
41
+ <false/>
42
+ <key>stringEncoding</key>
43
+ <integer>4</integer>
44
+ <key>usingHTTPBody</key>
45
+ <false/>
46
+ </dict>
47
+ </plist>
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>baseURL</key>
6
+ <string>https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.2/xcode4620419895a.dmg</string>
7
+ <key>followRedirect</key>
8
+ <true/>
9
+ <key>handleJSONPCallbacks</key>
10
+ <false/>
11
+ <key>headers</key>
12
+ <array/>
13
+ <key>httpMethod</key>
14
+ <string>HEAD</string>
15
+ <key>jsonpScript</key>
16
+ <string></string>
17
+ <key>paramBodyUIChoice</key>
18
+ <integer>0</integer>
19
+ <key>parameters</key>
20
+ <array/>
21
+ <key>parametersType</key>
22
+ <integer>0</integer>
23
+ <key>presentBeforeChallenge</key>
24
+ <false/>
25
+ <key>stringEncoding</key>
26
+ <integer>4</integer>
27
+ <key>usingHTTPBody</key>
28
+ <false/>
29
+ </dict>
30
+ </plist>
@@ -0,0 +1,5 @@
1
+ module XcodeInstaller
2
+ VERSION = '0.1.1'
3
+
4
+ class UnsuccessfulAuthenticationError < RuntimeError; end
5
+ end
@@ -0,0 +1,92 @@
1
+ require 'mechanize'
2
+ # require 'mechanize/progressbar'
3
+ require 'security'
4
+
5
+ module XcodeInstaller
6
+ class Agent < ::Mechanize
7
+ attr_accessor :username, :password, :verbose, :dry_run
8
+
9
+ def initialize
10
+ super
11
+ self.user_agent_alias = 'Mac Safari'
12
+
13
+ pw = Security::InternetPassword.find(:server => XcodeInstaller::AppleDeveloperCenter::HOST)
14
+ @username, @password = pw.attributes['acct'], pw.password if pw
15
+ end
16
+
17
+ def download(xcode_url)
18
+ adc_login_url = XcodeInstaller::AppleDeveloperCenter::LOGIN_URL
19
+ downloads_url = XcodeInstaller::AppleDeveloperCenter::DOWNLOADS_URL
20
+
21
+ begin
22
+ # Request login response
23
+ puts "\n>>> Login response >>>" if @verbose
24
+ response = get(adc_login_url)
25
+ if @verbose
26
+ puts "status code: #{response.code}\n"
27
+ pp response
28
+ puts cookie_jar.jar
29
+ end
30
+
31
+ # Submit login form
32
+ puts "\n>>> Submit Login Form >>>" if @verbose
33
+ form = response.form_with(:name => 'appleConnectForm')
34
+ form.theAccountName = username
35
+ form.theAccountPW = password
36
+ response = form.submit
37
+ if @verbose
38
+ puts "status code: #{response.code}\n"
39
+ pp response
40
+ puts cookie_jar.jar
41
+ end
42
+
43
+ # Request downloads response
44
+ puts "\n>>> Downloads >>>" if @verbose
45
+ response = get(downloads_url)
46
+ if @verbose
47
+ puts "status code: #{response.code}\n"
48
+ pp response
49
+ puts cookie_jar.jar
50
+ end
51
+ # Shouldn't get the login form if login was successful
52
+ form = response.form_with(:name => 'appleConnectForm')
53
+ raise UnsuccessfulAuthenticationError if form
54
+
55
+ # Download
56
+ puts "\n>>> Xcode >>>" if @verbose
57
+
58
+ if @dry_run
59
+ # HEAD request for testing
60
+ response = head(xcode_url)
61
+ if @verbose
62
+ puts "status code: #{response.code}\n"
63
+ pp response
64
+ else
65
+ puts "filename: #{response.filename}"
66
+ puts "size: #{response.header['content-length']}"
67
+ puts "last-modified: #{response.header['last-modified']}"
68
+ return response.filename
69
+ end
70
+ else
71
+ # GET request for actual download
72
+ pluggable_parser.default = Mechanize::Download
73
+ # self.progressbar{ file = get(xcode_url) }
74
+ file = get(xcode_url)
75
+ file.save
76
+ return file.filename
77
+ end
78
+
79
+ rescue Mechanize::ResponseCodeError => exception
80
+ if exception.response_code == '403'
81
+ response = exception.page
82
+ puts "status code: #{response.code}\n"
83
+ pp response
84
+ puts cookie_jar.jar
85
+ else
86
+ raise # Some other error, re-raise
87
+ end
88
+ end
89
+ end
90
+
91
+ end
92
+ end
@@ -0,0 +1,10 @@
1
+ module XcodeInstaller
2
+ module AppleDeveloperCenter
3
+
4
+ HOST = "developer.apple.com"
5
+
6
+ LOGIN_URL = 'https://daw.apple.com/cgi-bin/WebObjects/DSAuthWeb.woa/wa/login?appIdKey=d4f7d769c2abecc664d0dadfed6a67f943442b5e9c87524d4587a95773750cea&path=%2F%2Fdownloads%2Findex.action'
7
+ DOWNLOADS_URL = 'https://developer.apple.com/downloads/index.action'
8
+
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ include XcodeInstaller
2
+ include XcodeInstaller::Helpers
3
+ include XcodeInstaller::XcodeVersions
4
+
5
+ require 'xcode-installer/commands/download'
6
+ require 'xcode-installer/commands/install'
7
+ require 'xcode-installer/commands/list'
8
+ require 'xcode-installer/commands/login'
9
+ require 'xcode-installer/commands/logout'
@@ -0,0 +1,37 @@
1
+ command :'download' do |c|
2
+ c.syntax = 'xcode-installer download [options]'
3
+ c.option '--dry-run', 'Enables a HEAD request instead of downloading the file'
4
+ c.option '--release STRING', 'Used to specify an old or pre-release version of Xcode. Otherwise, latest GA release of Xcode is downloaded.'
5
+ c.option '--pre-release', 'Specifies to download the latest pre-release version of Xcode.'
6
+ c.summary = 'Initiates the download'
7
+ c.description = ''
8
+
9
+ c.action do |args, options|
10
+ if options.release
11
+ xcode_version = options.release
12
+ else
13
+ if options.pre_release
14
+ xcode_version = XcodeInstaller::XcodeVersions::LATEST_DP
15
+ else
16
+ xcode_version = XcodeInstaller::XcodeVersions::LATEST_GA
17
+ end
18
+ end
19
+
20
+ if XcodeInstaller::XcodeVersions::GUI.has_key?(xcode_version)
21
+ xcode_url = XcodeInstaller::XcodeVersions::GUI[xcode_version]
22
+ else
23
+ puts "No Xcode release with number #{xcode_version}. Use the 'list' command to see a list of known releases."
24
+ exit
25
+ end
26
+
27
+ puts "Downloading Xcode #{xcode_version}"
28
+ puts xcode_url
29
+
30
+ agent.verbose = options.verbose
31
+ agent.dry_run = options.dry_run
32
+ try {
33
+ filename = agent.download(xcode_url)
34
+ puts "File saved to: #{Dir.pwd}/#{filename}"
35
+ }
36
+ end
37
+ end
@@ -0,0 +1,33 @@
1
+ command :'install' do |c|
2
+ c.syntax = 'xcode-installer install [options]'
3
+ c.option '--release STRING', 'Used to specify an old or pre-release version of Xcode. Otherwise, latest GA release of Xcode is installed.'
4
+ c.summary = 'Installs xcode from a previous download'
5
+ c.description = 'NEEDS SOME WORK - Use download and mount .dmg manually for now'
6
+
7
+ c.action do |args, options|
8
+ files = Dir.glob('*.dmg')
9
+ if files.length == 0
10
+ puts 'No .dmg files found in current directory. Run the download command first.'
11
+ return
12
+ elsif files.length > 1
13
+ puts 'Multiple .dmg files found in the current directory. Currently no support for specifying file.'
14
+ return
15
+ end
16
+ dmg_file = files[0]
17
+
18
+ # Mount disk image
19
+ mountpoint = '/Volumes/Xcode'
20
+ # TODO: get file name from elsewhere (ideally a model object)
21
+ system 'hdiutil attach -quiet xcode4620419895a.dmg'
22
+
23
+ # Trash existing install (so command is rerunnable)
24
+ destination = '/Applications/Xcode.app'
25
+ Trash.new.throw_out(destination)
26
+
27
+ # Copy into /Applications
28
+ puts 'Copying Xcode.app into Applications directory (this can take a little while)'
29
+ system "cp -R #{mountpoint}/Xcode.app #{destination}"
30
+
31
+ system 'hdiutil detach -quiet #{mountpoint}'
32
+ end
33
+ end
@@ -0,0 +1,51 @@
1
+ command :'list' do |c|
2
+ c.syntax = 'xcode-installer list'
3
+ c.summary = 'Lists the versions of Xcode available for downloading'
4
+ c.description = 'Shows only the Xcode GUI versions by default. Specify "all" or "cli" to show command-line tools'
5
+
6
+ c.action do |args, options|
7
+ # puts "args: #{args}"
8
+
9
+ show_all = args.include? 'all'
10
+ show_gui = args.include? 'gui'
11
+ show_cli = args.include? 'cli'
12
+ # Show GUI when no args given
13
+ show_gui = true if !show_all && !show_gui && !show_cli
14
+
15
+ # latest = XcodeInstaller::XcodeVersions::LATEST
16
+ gui_versions = XcodeInstaller::XcodeVersions::GUI
17
+ cli_versions = XcodeInstaller::XcodeVersions::CLI
18
+
19
+ if show_all || show_gui
20
+ title = 'Xcode GUI'
21
+ table = Terminal::Table.new :title => title do |t|
22
+ t << ['Version', 'Download URL']
23
+ gui_versions.keys.each do |version|
24
+ t << :separator
25
+
26
+ row = [version, gui_versions[version]]
27
+ t << row
28
+ end
29
+ end
30
+ puts table
31
+ end
32
+
33
+ # Extra line between tables
34
+ puts if show_all
35
+
36
+ if show_all || show_cli
37
+ title = 'Xcode Command-Line'
38
+ table = Terminal::Table.new :title => title do |t|
39
+ t << ['Version', 'Download URL']
40
+ cli_versions.keys.each do |version|
41
+ t << :separator
42
+
43
+ row = [version, cli_versions[version]]
44
+ t << row
45
+ end
46
+ end
47
+ puts table
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,16 @@
1
+ command :login do |c|
2
+ c.syntax = 'xcode-installer login'
3
+ c.summary = 'Save account credentials'
4
+ c.description = ''
5
+
6
+ c.action do |args, options|
7
+ say_warning "You are already authenticated" if Security::InternetPassword.find(:server => XcodeInstaller::AppleDeveloperCenter::HOST)
8
+
9
+ user = ask "Username:"
10
+ pass = password "Password:"
11
+
12
+ Security::InternetPassword.add(XcodeInstaller::AppleDeveloperCenter::HOST, user, pass)
13
+
14
+ say_ok "Account credentials saved"
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ command :logout do |c|
2
+ c.syntax = 'xcode-installer logout'
3
+ c.summary = 'Remove account credentials'
4
+ c.description = ''
5
+
6
+ c.action do |args, options|
7
+ say_error "You are not authenticated" and abort unless Security::InternetPassword.find(:server => XcodeInstaller::AppleDeveloperCenter::HOST)
8
+
9
+ Security::InternetPassword.delete(:server => XcodeInstaller::AppleDeveloperCenter::HOST)
10
+
11
+ say_ok "Account credentials removed"
12
+ end
13
+ end
@@ -0,0 +1,55 @@
1
+ # Monkey Patch Commander::UI to alias password to avoid conflicts
2
+ module Commander::UI
3
+ alias :pw :password
4
+ end
5
+
6
+ # class String
7
+ # include Term::ANSIColor
8
+ # end
9
+
10
+ module XcodeInstaller
11
+ module Helpers
12
+ def agent
13
+ unless @agent
14
+ @agent = XcodeInstaller::Agent.new
15
+
16
+ @agent.instance_eval do
17
+ def username
18
+ @username ||= ask "Username:"
19
+ end
20
+
21
+ def password
22
+ @password ||= pw "Password:"
23
+ end
24
+
25
+ # def team
26
+ # teams_by_name = {}
27
+ # page.form_with(:name => 'saveTeamSelection').radiobuttons.each do |radio|
28
+ # name = page.search("label[for=\"#{radio.dom_id}\"]").first.text.strip
29
+ # teams_by_name[name] = radio.value
30
+ # end
31
+
32
+ # name = choose "Select a team:", *teams_by_name.keys
33
+ # @team ||= teams_by_name[name]
34
+ # end
35
+ end
36
+ end
37
+
38
+ @agent
39
+ end
40
+
41
+ def pluralize(n, singular, plural = nil)
42
+ n.to_i == 1 ? "1 #{singular}" : "#{n} #{plural || singular + 's'}"
43
+ end
44
+
45
+ def try
46
+ return unless block_given?
47
+
48
+ begin
49
+ yield
50
+ rescue UnsuccessfulAuthenticationError
51
+ say_error "Could not authenticate with Apple Developer Center. Check that your username & password are correct, and that your membership is valid and all pending Terms of Service & agreements are accepted. If this problem continues, try logging into https://developer.apple.com/membercenter/ from a browser to see what's going on." and abort
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,31 @@
1
+ module XcodeInstaller
2
+ module XcodeVersions
3
+
4
+ # General availability
5
+ LATEST_GA = '4.6.3'
6
+ # Developer preview
7
+ LATEST_DP = '5-DP'
8
+
9
+ GUI = {
10
+ '5-DP' => 'https://developer.apple.com/devcenter/download.action?path=/wwdc_2013/xcode_5_developer_preview/xcode_5_developer_preview.dmg', # 2013-06-10
11
+ '4.6.3' => 'https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg', # 2013-06-13
12
+ '4.6.2' => 'https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.2/xcode4620419895a.dmg', # 2013-04-15
13
+ '4.6.1' => 'https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.1/xcode4610419628a.dmg', # 2013-03-14
14
+ '4.6' => 'https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6/xcode460417218a.dmg' # 2013-02-20
15
+ }
16
+
17
+ # Assuming Mountain Lion for now
18
+ CLI = {
19
+ '5-DP' => 'https://developer.apple.com/downloads/download.action?path=Developer_Tools/command_line_tools_os_x_mountain_lion_for_xcode_5__june_2013/command_line_tools_mountain_lion_for_xcode_5_june_2013.dmg', # 2013-06-10
20
+ '4.6.3' => 'https://developer.apple.com/downloads/download.action?path=wwdc_2013/command_line_tools_os_x_v10.9_for_xcode_5__june_2013/command_line_tools_os_x_v10.9_for_xcode_5_developer_preview.dmg', # 2013-06-14
21
+ '4.6.2' => 'https://developer.apple.com/downloads/download.action?path=Developer_Tools/command_line_tools_os_x_mountain_lion_for_xcode__april_2013/xcode462_cltools_10_86938259a.dmg', # 2013-04-15
22
+ '4.6.1' => 'https://developer.apple.com/downloads/download.action?path=Developer_Tools/command_line_tools_os_x_mountain_lion_for_xcode__march_2013/xcode461_cltools_10_86938245a.dmg', # 2013-03-14
23
+ '4.6' => 'https://developer.apple.com/downloads/download.action?path=Developer_Tools/command_line_tools_os_x_mountain_lion_for_xcode__january_2013/xcode46cltools_10_86938131a.dmg' # 2013-02-19
24
+ }
25
+
26
+ # Lion => {
27
+ # '4.6.2' => 'https://developer.apple.com/downloads/download.action?path=Developer_Tools/command_line_tools_os_x_lion_for_xcode__april_2013/xcode462_cltools_10_76938260a.dmg'
28
+ # }
29
+
30
+ end
31
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xcode-installer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Ben Chatelain
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: commander
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 4.1.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 4.1.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: terminal-table
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.4.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.4.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: mechanize
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 2.5.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 2.5.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: mechanize-progressbar
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.2.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.2.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: security
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 0.1.2
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 0.1.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: trash
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.2.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.2.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: A command-line interface for the downloading Xcode
126
+ email: benchatelain@gmail.com
127
+ executables:
128
+ - xcode-installer
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ./Gemfile
133
+ - ./Gemfile.lock
134
+ - ./http/downloads-get.request
135
+ - ./http/login-get.request
136
+ - ./http/login-post.request
137
+ - ./http/xcode-get.request
138
+ - ./lib/xcode-installer/agent.rb
139
+ - ./lib/xcode-installer/apple-developer-center.rb
140
+ - ./lib/xcode-installer/commands/download.rb
141
+ - ./lib/xcode-installer/commands/install.rb
142
+ - ./lib/xcode-installer/commands/list.rb
143
+ - ./lib/xcode-installer/commands/login.rb
144
+ - ./lib/xcode-installer/commands/logout.rb
145
+ - ./lib/xcode-installer/commands.rb
146
+ - ./lib/xcode-installer/helpers.rb
147
+ - ./lib/xcode-installer/xcode-versions.rb
148
+ - ./lib/xcode-installer.rb
149
+ - ./Rakefile
150
+ - ./README.md
151
+ - bin/xcode-installer
152
+ homepage: https://github.com/phatblat/xcode-installer
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.0.3
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: XcodeInstaller
176
+ test_files: []