xcoder 0.0.15 → 0.0.16

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.
data/lib/xcode/builder.rb CHANGED
@@ -3,7 +3,8 @@ require 'xcode/provisioning_profile'
3
3
 
4
4
  module Xcode
5
5
  class Builder
6
- attr_accessor :profile, :identity, :build_path
6
+ attr_accessor :profile, :identity, :build_path, :keychain
7
+
7
8
  def initialize(config)
8
9
  if config.is_a? Xcode::Scheme
9
10
  @scheme = config
@@ -41,6 +42,7 @@ module Xcode
41
42
  cmd << "-target \"#{@target.name}\"" if @scheme.nil?
42
43
  cmd << "-configuration \"#{@config.name}\"" if @scheme.nil?
43
44
 
45
+ cmd << "OTHER_CODE_SIGN_FLAGS=\"--keychain #{@keychain.path}\"" unless @keychain.nil?
44
46
  cmd << "CODE_SIGN_IDENTITY=\"#{@identity}\"" unless @identity.nil?
45
47
  cmd << "OBJROOT=\"#{@build_path}\""
46
48
  cmd << "SYMROOT=\"#{@build_path}\""
@@ -104,6 +106,8 @@ module Xcode
104
106
  cmd << "-v \"#{app_path}\""
105
107
  cmd << "-o \"#{ipa_path}\""
106
108
 
109
+ cmd << "OTHER_CODE_SIGN_FLAGS=\"--keychain #{@keychain.path}\"" unless @keychain.nil?
110
+
107
111
  unless @identity.nil?
108
112
  cmd << "--sign \"#{@identity}\""
109
113
  end
@@ -44,41 +44,48 @@ module Xcode
44
44
  end
45
45
  builder = config.builder
46
46
 
47
- unless @values[:identity].nil?
48
- builder.identity = @values[:identity]
49
- puts "[#{label}] Set build identity to #{@values[:identity]}"
50
- end
47
+ # unless @values[:identity].nil?
48
+ # builder.identity = @values[:identity]
49
+ # puts "[#{label}] Set build identity to #{@values[:identity]}"
50
+ # end
51
51
 
52
52
  unless @values[:profile].nil?
53
53
  builder.profile = @values[:profile]
54
54
  puts "[#{label}] Set build profile to #{@values[:profile]}"
55
55
  end
56
56
 
57
- puts "[#{label}] CLEAN"
58
- @before[:clean].each do |b|
59
- b.call(builder)
60
- end
61
- builder.clean
62
- @after[:clean].each do |b|
63
- b.call(builder)
64
- end
57
+ Keychain.temp_keychain(@values[:project]) do |kc|
58
+ kc.import @values[:certificate], @values[:password]
59
+
60
+ builder.identity = @values[:identity] || kc.certificates.first
61
+ builder.keychain = kc
62
+
63
+ puts "[#{label}] CLEAN"
64
+ @before[:clean].each do |b|
65
+ b.call(builder)
66
+ end
67
+ builder.clean
68
+ @after[:clean].each do |b|
69
+ b.call(builder)
70
+ end
65
71
 
66
- puts "[#{label}] BUILD"
67
- @before[:build].each do |b|
68
- b.call(builder)
69
- end
70
- builder.build
71
- @after[:build].each do |b|
72
- b.call(builder)
73
- end
72
+ puts "[#{label}] BUILD"
73
+ @before[:build].each do |b|
74
+ b.call(builder)
75
+ end
76
+ builder.build
77
+ @after[:build].each do |b|
78
+ b.call(builder)
79
+ end
74
80
 
75
- puts "[#{label}] PACKAGE"
76
- @before[:package].each do |b|
77
- b.call(builder)
78
- end
79
- builder.package
80
- @after[:package].each do |b|
81
- b.call(builder)
81
+ puts "[#{label}] PACKAGE"
82
+ @before[:package].each do |b|
83
+ b.call(builder)
84
+ end
85
+ builder.package
86
+ @after[:package].each do |b|
87
+ b.call(builder)
88
+ end
82
89
  end
83
90
 
84
91
 
@@ -1,29 +1,77 @@
1
1
  module Xcode
2
2
  class Keychain
3
- def initialize(path)
4
- @path = File.expand_path path
3
+ attr_accessor :name, :path
4
+
5
+ TEMP_PASSWORD = "build_keychain_password"
6
+ def initialize(name)
7
+ @name = name
8
+ @path = File.expand_path "~/Library/Keychains/#{name}"
5
9
  end
6
10
 
7
11
  def import(cert, password)
8
12
  cmd = []
9
13
  cmd << "security"
10
14
  cmd << "import '#{cert}'"
11
- cmd << "-k #{@path}"
15
+ cmd << "-k '#{@path}'"
12
16
  cmd << "-P #{password}"
13
17
  cmd << "-T /usr/bin/codesign"
14
18
  Xcode::Shell.execute(cmd)
15
19
  end
16
20
 
21
+ def certificates
22
+ names = []
23
+ cmd = []
24
+ cmd << "security"
25
+ cmd << "find-certificate"
26
+ cmd << "-a"
27
+ cmd << "#{@name}"
28
+ data = Xcode::Shell.execute(cmd, false).join("")
29
+ data.scan /\s+"labl"<blob>="([^"]+)"/ do |m|
30
+ names << m[0]
31
+ end
32
+ names
33
+ end
34
+
17
35
  def unlock(password)
18
36
  cmd = []
19
37
  cmd << "security"
20
- cmd << "unlock-keychain #{@path}"
38
+ cmd << "unlock-keychain"
39
+ cmd << "-p #{password}"
40
+ cmd << "#{@name}"
41
+ Xcode::Shell.execute(cmd)
42
+ end
43
+
44
+ def self.create(name, password)
45
+ cmd = []
46
+ cmd << "security"
47
+ cmd << "create-keychain"
21
48
  cmd << "-p #{password}"
49
+ cmd << "#{name}"
22
50
  Xcode::Shell.execute(cmd)
51
+
52
+ Xcode::Keychain.new(name)
53
+ end
54
+
55
+ # FIXME: dangerous
56
+ def delete
57
+ cmd = []
58
+ cmd << "security"
59
+ cmd << "delete-keychain #{name}"
60
+ Xcode::Shell.execute(cmd)
61
+ end
62
+
63
+ def self.temp_keychain(name, &block)
64
+ kc = Xcode::Keychain.create(name, TEMP_PASSWORD)
65
+ begin
66
+ kc.unlock(TEMP_PASSWORD)
67
+ block.call(kc)
68
+ ensure
69
+ kc.delete
70
+ end
23
71
  end
24
72
 
25
73
  def self.login_keychain
26
- Xcode::Keychain.new("~/Library/Keychains/login.keychain")
74
+ Xcode::Keychain.new("login.keychain")
27
75
  end
28
76
  end
29
77
  end
data/lib/xcode/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Xcode
2
- VERSION = "0.0.15"
2
+ VERSION = "0.0.16"
3
3
  end
Binary file
@@ -0,0 +1,25 @@
1
+ require 'rspec'
2
+ require 'xcoder'
3
+
4
+ describe Xcode::Keychain do
5
+ it "should create a keychain" do
6
+ kc = Xcode::Keychain.temp_keychain('Test.keychain') do |kc|
7
+ puts kc.path
8
+ File.exists?(kc.path).should==true
9
+ end
10
+ File.exists?(Xcode::Keychain.new('Test.keychain').path).should==false
11
+ end
12
+
13
+ it "should import a certificate" do
14
+ Xcode::Keychain.temp_keychain('Test2.keychain') do |kc|
15
+ kc.import "#{File.dirname(__FILE__)}/Provisioning/TestUser.p12", 'testpassword'
16
+ kc.certificates.size.should==1
17
+ kc.certificates[0].should=="Test User"
18
+ end
19
+ end
20
+
21
+ it "should fetch the login keychain" do
22
+ kc = Xcode::Keychain.login_keychain
23
+ File.exists?(kc.path).should==true
24
+ end
25
+ 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.0.15
4
+ version: 0.0.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-31 00:00:00.000000000Z
12
+ date: 2012-02-06 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &70233550609660 !ruby/object:Gem::Requirement
16
+ requirement: &70335891561420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70233550609660
24
+ version_requirements: *70335891561420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: plist
27
- requirement: &70233550609240 !ruby/object:Gem::Requirement
27
+ requirement: &70335891561000 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70233550609240
35
+ version_requirements: *70335891561000
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: nokogiri
38
- requirement: &70233550608820 !ruby/object:Gem::Requirement
38
+ requirement: &70335891560580 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70233550608820
46
+ version_requirements: *70335891560580
47
47
  description: Provides a ruby based object-model for parsing project structures and
48
48
  invoking builds
49
49
  email:
@@ -72,6 +72,7 @@ files:
72
72
  - lib/xcode/version.rb
73
73
  - lib/xcode/workspace.rb
74
74
  - lib/xcoder.rb
75
+ - spec/Provisioning/TestUser.p12
75
76
  - spec/TestProject/Buildfile
76
77
  - spec/TestProject/TestProject.xcodeproj/project.pbxproj
77
78
  - spec/TestProject/TestProject.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/TestProject.xcscheme
@@ -91,6 +92,7 @@ files:
91
92
  - spec/TestWorkspace.xcworkspace/contents.xcworkspacedata
92
93
  - spec/TestWorkspace.xcworkspace/xcuserdata/ray.xcuserdatad/UserInterfaceState.xcuserstate
93
94
  - spec/configuration_spec.rb
95
+ - spec/keychain_spec.rb
94
96
  - spec/project_spec.rb
95
97
  - spec/scheme_spec.rb
96
98
  - spec/target_spec.rb
@@ -121,6 +123,7 @@ signing_key:
121
123
  specification_version: 3
122
124
  summary: Ruby wrapper around xcodebuild, xcrun, agvtool and pbxproj files
123
125
  test_files:
126
+ - spec/Provisioning/TestUser.p12
124
127
  - spec/TestProject/Buildfile
125
128
  - spec/TestProject/TestProject.xcodeproj/project.pbxproj
126
129
  - spec/TestProject/TestProject.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/TestProject.xcscheme
@@ -140,6 +143,7 @@ test_files:
140
143
  - spec/TestWorkspace.xcworkspace/contents.xcworkspacedata
141
144
  - spec/TestWorkspace.xcworkspace/xcuserdata/ray.xcuserdatad/UserInterfaceState.xcuserstate
142
145
  - spec/configuration_spec.rb
146
+ - spec/keychain_spec.rb
143
147
  - spec/project_spec.rb
144
148
  - spec/scheme_spec.rb
145
149
  - spec/target_spec.rb