xcoder 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  require 'xcode/shell'
2
2
  require 'xcode/provisioning_profile'
3
3
  require 'xcode/test/parsers/ocunit_parser.rb'
4
- require 'xcode/testflight'
4
+ require 'xcode/deploy/testflight'
5
5
  require 'xcode/builder/base_builder.rb'
6
6
  require 'xcode/builder/project_target_config_builder.rb'
7
7
  require 'xcode/builder/scheme_builder.rb'
@@ -78,11 +78,19 @@ module Xcode
78
78
  report
79
79
  end
80
80
 
81
+ #
82
+ # Upload to testflight
83
+ #
84
+ # The testflight object is yielded so further configuration can be performed before uploading
85
+ #
86
+ # @param api_token the API token for your testflight account
87
+ # @param team_token the token for the team you want to deploy to
88
+ #
81
89
  def testflight(api_token, team_token)
82
90
  raise "Can't find #{ipa_path}, do you need to call builder.package?" unless File.exists? ipa_path
83
- raise "Can't fins #{dsym_zip_path}, do you need to call builder.package?" unless File.exists? dsym_zip_path
91
+ raise "Can't find #{dsym_zip_path}, do you need to call builder.package?" unless File.exists? dsym_zip_path
84
92
 
85
- testflight = Xcode::Testflight.new(api_token, team_token)
93
+ testflight = Xcode::Deploy::Testflight.new(api_token, team_token)
86
94
  yield(testflight) if block_given?
87
95
  testflight.upload(ipa_path, dsym_zip_path)
88
96
  end
@@ -0,0 +1,60 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+
4
+ module Xcode
5
+ module Deploy
6
+ class Testflight
7
+ attr_accessor :api_token, :team_token, :notify, :proxy, :notes, :lists
8
+
9
+ def initialize(api_token, team_token)
10
+ @api_token = api_token
11
+ @team_token = team_token
12
+ @notify = true
13
+ @notes = nil
14
+ @lists = []
15
+ @proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
16
+ end
17
+
18
+ def upload(ipa_path, dsymzip_path=nil)
19
+ puts "Uploading to Testflight..."
20
+
21
+ # RestClient.proxy = @proxy || ENV['http_proxy'] || ENV['HTTP_PROXY']
22
+ # RestClient.log = '/tmp/restclient.log'
23
+ #
24
+ # response = RestClient.post('http://testflightapp.com/api/builds.json',
25
+ # :file => File.new(ipa_path),
26
+ # :dsym => File.new(dsymzip_path),
27
+ # :api_token => @api_token,
28
+ # :team_token => @team_token,
29
+ # :notes => @notes,
30
+ # :notify => @notify ? 'True' : 'False',
31
+ # :distribution_lists => @lists.join(',')
32
+ # )
33
+ #
34
+ # json = JSON.parse(response)
35
+ # puts " + Done, got: #{json.inspect}"
36
+ # json
37
+
38
+ cmd = Xcode::Shell::Command.new 'curl'
39
+ cmd << "--proxy #{@proxy}" unless @proxy.nil? or @proxy==''
40
+ cmd << "-X POST http://testflightapp.com/api/builds.json"
41
+ cmd << "-F file=@\"#{ipa_path}\""
42
+ cmd << "-F dsym=@\"#{dsymzip_path}\"" unless dsymzip_path.nil?
43
+ cmd << "-F api_token='#{@api_token}'"
44
+ cmd << "-F team_token='#{@team_token}'"
45
+ cmd << "-F notes=\"#{@notes}\"" unless @notes.nil?
46
+ cmd << "-F notify=#{@notify ? 'True' : 'False'}"
47
+ cmd << "-F distribution_lists='#{@lists.join(',')}'" unless @lists.count==0
48
+
49
+ response = Xcode::Shell.execute(cmd)
50
+
51
+ json = JSON.parse(response.join(''))
52
+ puts " + Done, got: #{json.inspect}"
53
+
54
+ yield(json) if block_given?
55
+
56
+ json
57
+ end
58
+ end
59
+ end
60
+ end
@@ -5,9 +5,9 @@ module Xcode
5
5
 
6
6
  class ExecutionError < StandardError; end
7
7
 
8
- def self.execute(bits, show_output=true)
8
+ def self.execute(cmd, show_output=true)
9
9
  out = []
10
- cmd = bits.is_a?(Xcode::Shell::Command) ? bits.to_s : bits
10
+ cmd = cmd.to_s
11
11
 
12
12
  puts "EXECUTE: #{cmd}"
13
13
  IO.popen (cmd) do |f|
@@ -3,7 +3,7 @@ require 'set'
3
3
  module Xcode
4
4
  module Shell
5
5
  class Command
6
- attr_accessor :env
6
+ attr_accessor :env, :cmd, :args
7
7
 
8
8
  def initialize(cmd, environment={})
9
9
  @cmd = cmd
@@ -1,3 +1,3 @@
1
1
  module Xcode
2
- VERSION = "0.1.14"
2
+ VERSION = "0.1.15"
3
3
  end
@@ -46,30 +46,31 @@ describe Xcode::Builder do
46
46
 
47
47
  describe "#testflight" do
48
48
 
49
- let(:testflight_parameters) do
50
- ['curl',
51
- "--proxy http://proxyhost:8080",
52
- "-X POST http://testflightapp.com/api/builds.json",
53
- "-F file=@\"#{subject.ipa_path}\"",
54
- "-F dsym=@\"#{subject.dsym_zip_path}\"",
55
- "-F api_token='api_token'",
56
- "-F team_token='team_token'",
57
- "-F notes=\"some notes\"",
58
- "-F notify=True",
59
- "-F distribution_lists='List1,List2'"]
60
- end
49
+ # let(:testflight_parameters) do
50
+ # ['curl',
51
+ # "--proxy http://proxyhost:8080",
52
+ # "-X POST http://testflightapp.com/api/builds.json",
53
+ # "-F file=@\"#{subject.ipa_path}\"",
54
+ # "-F dsym=@\"#{subject.dsym_zip_path}\"",
55
+ # "-F api_token='api_token'",
56
+ # "-F team_token='team_token'",
57
+ # "-F notes=\"some notes\"",
58
+ # "-F notify=True",
59
+ # "-F distribution_lists='List1,List2'"]
60
+ # end
61
61
 
62
62
  it "should upload ipa and dsym to testflight" do
63
63
  subject.build.package
64
64
 
65
- Xcode::Shell.should_receive(:execute).with(testflight_parameters).and_return(['{}'])
66
- subject.testflight("api_token", "team_token") do |tf|
65
+ result = subject.testflight("api_token", "team_token") do |tf|
66
+ tf.should_receive(:upload).with(subject.ipa_path, subject.dsym_zip_path).and_return('result')
67
67
  tf.proxy = "http://proxyhost:8080"
68
68
  tf.notes = "some notes"
69
69
  tf.lists << "List1"
70
70
  tf.lists << "List2"
71
71
  end
72
72
 
73
+ result.should == 'result'
73
74
  end
74
75
  end
75
76
 
@@ -0,0 +1,27 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe Xcode::Deploy::Testflight do
4
+
5
+ let(:testflight) { Xcode::Deploy::Testflight.new 'api token', 'team token' }
6
+
7
+ it "should be configured with api and team token" do
8
+ testflight.api_token.should == 'api token'
9
+ testflight.team_token.should == 'team token'
10
+ end
11
+
12
+ it "should call curl with correct bulld paths" do
13
+ Xcode::Shell.should_receive(:execute) do |arg|
14
+ arg.is_a? Xcode::Shell::Command
15
+ arg.cmd.should == 'curl'
16
+ arg.args.should include('-F file=@"ipa path"')
17
+ arg.args.should include('-F dsym=@"dsym path"')
18
+ arg.args.should include("-F api_token='api token'")
19
+ arg.args.should include("-F team_token='team token'")
20
+
21
+ ['{"response":"ok"}']
22
+ end
23
+ response = testflight.upload('ipa path', 'dsym path')
24
+ response['response'].should == 'ok'
25
+ end
26
+
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcoder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-11-26 00:00:00.000000000Z
13
+ date: 2012-12-05 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
17
- requirement: &70273992124040 !ruby/object:Gem::Requirement
17
+ requirement: &70353485685920 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70273992124040
25
+ version_requirements: *70353485685920
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: plist
28
- requirement: &70274003815880 !ruby/object:Gem::Requirement
28
+ requirement: &70353473165820 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70274003815880
36
+ version_requirements: *70353473165820
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: nokogiri
39
- requirement: &70274003815460 !ruby/object:Gem::Requirement
39
+ requirement: &70353473165400 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *70274003815460
47
+ version_requirements: *70353473165400
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: builder
50
- requirement: &70274003815040 !ruby/object:Gem::Requirement
50
+ requirement: &70353473164980 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70274003815040
58
+ version_requirements: *70353473164980
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rest-client
61
- requirement: &70274003814620 !ruby/object:Gem::Requirement
61
+ requirement: &70353473164560 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,7 +66,7 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70274003814620
69
+ version_requirements: *70353473164560
70
70
  description: Provides a ruby based object-model for parsing project structures and
71
71
  invoking builds
72
72
  email:
@@ -105,6 +105,7 @@ files:
105
105
  - lib/xcode/core_ext/fixnum.rb
106
106
  - lib/xcode/core_ext/hash.rb
107
107
  - lib/xcode/core_ext/string.rb
108
+ - lib/xcode/deploy/testflight.rb
108
109
  - lib/xcode/file_reference.rb
109
110
  - lib/xcode/group.rb
110
111
  - lib/xcode/info_plist.rb
@@ -127,7 +128,6 @@ files:
127
128
  - lib/xcode/test/report.rb
128
129
  - lib/xcode/test/report/suite_result.rb
129
130
  - lib/xcode/test/report/test_result.rb
130
- - lib/xcode/testflight.rb
131
131
  - lib/xcode/variant_group.rb
132
132
  - lib/xcode/version.rb
133
133
  - lib/xcode/workspace.rb
@@ -165,6 +165,7 @@ files:
165
165
  - spec/builder_spec.rb
166
166
  - spec/configuration_list_spec.rb
167
167
  - spec/configuration_spec.rb
168
+ - spec/deploy_testflight_spec.rb
168
169
  - spec/group_spec.rb
169
170
  - spec/integration/builder_spec.rb
170
171
  - spec/integration/cedar_install_spec.rb
@@ -239,6 +240,7 @@ test_files:
239
240
  - spec/builder_spec.rb
240
241
  - spec/configuration_list_spec.rb
241
242
  - spec/configuration_spec.rb
243
+ - spec/deploy_testflight_spec.rb
242
244
  - spec/group_spec.rb
243
245
  - spec/integration/builder_spec.rb
244
246
  - spec/integration/cedar_install_spec.rb
@@ -1,59 +0,0 @@
1
- require 'rest-client'
2
- require 'json'
3
-
4
- module Xcode
5
- class Testflight
6
- attr_accessor :api_token, :team_token, :notify, :proxy, :notes, :lists
7
-
8
- def initialize(api_token, team_token)
9
- @api_token = api_token
10
- @team_token = team_token
11
- @notify = true
12
- @notes = nil
13
- @lists = []
14
- @proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
15
- end
16
-
17
- def upload(ipa_path, dsymzip_path=nil)
18
- puts "Uploading to Testflight..."
19
-
20
- # RestClient.proxy = @proxy || ENV['http_proxy'] || ENV['HTTP_PROXY']
21
- # RestClient.log = '/tmp/restclient.log'
22
- #
23
- # response = RestClient.post('http://testflightapp.com/api/builds.json',
24
- # :file => File.new(ipa_path),
25
- # :dsym => File.new(dsymzip_path),
26
- # :api_token => @api_token,
27
- # :team_token => @team_token,
28
- # :notes => @notes,
29
- # :notify => @notify ? 'True' : 'False',
30
- # :distribution_lists => @lists.join(',')
31
- # )
32
- #
33
- # json = JSON.parse(response)
34
- # puts " + Done, got: #{json.inspect}"
35
- # json
36
-
37
- cmd = []
38
- cmd << 'curl'
39
- cmd << "--proxy #{@proxy}" unless @proxy.nil? or @proxy==''
40
- cmd << "-X POST http://testflightapp.com/api/builds.json"
41
- cmd << "-F file=@\"#{ipa_path}\""
42
- cmd << "-F dsym=@\"#{dsymzip_path}\"" unless dsymzip_path.nil?
43
- cmd << "-F api_token='#{@api_token}'"
44
- cmd << "-F team_token='#{@team_token}'"
45
- cmd << "-F notes=\"#{@notes}\"" unless @notes.nil?
46
- cmd << "-F notify=#{@notify ? 'True' : 'False'}"
47
- cmd << "-F distribution_lists='#{@lists.join(',')}'" unless @lists.count==0
48
-
49
- response = Xcode::Shell.execute(cmd)
50
-
51
- json = JSON.parse(response.join(''))
52
- puts " + Done, got: #{json.inspect}"
53
-
54
- yield(json) if block_given?
55
-
56
- json
57
- end
58
- end
59
- end