briar 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YWQxYjFjZTk0YzdhM2U1ZDE1OGNhMGJiMTM1YzdiM2ViNDJjN2I3Ng==
4
+ ZGUwMTZlM2YwODZmMTIwMzI3YjBiYWIzYjcwNGRiYjcxMzRmNjQ2NQ==
5
5
  data.tar.gz: !binary |-
6
- YzUwZTIwMzg1YjRlMjllYjhiZDhiNzkzYzcyZTliOWI3ZDYzNWM3Mg==
7
- !binary "U0hBNTEy":
6
+ YjM4NWExMzEyNGU3Nzk3MWFlZjdhYmRkYTg5ZWExOWFhNzZjODA5MA==
7
+ SHA512:
8
8
  metadata.gz: !binary |-
9
- MTc4NzUwMzUxYjc3OTkwOGYxNjdhNWEwZDYwZTQ3OGM3ZDFmODlhM2Q5Nzg4
10
- ZGVjZTJhMWU3NDcxMGIxNzExMzk3MzFiNDE4OTUzNjYxMTM0MzkxY2ViY2Zk
11
- YTIzNTU4MDBhOWE5NWQ1NTM2ZDBjZjQzNzMyMjlkZjMxZGM3ZjA=
9
+ ZGQ3NmUzYTQwY2M0YzU4Y2Q0OThhMDIzYWVlNzU0NTA5MDZlOWIxYmQ4OWQz
10
+ YzQ3YmI1NDg3OWRiMGRlYjQ5ZmRkODU0MmViMDE4YWNkMTg5NWRhYTZjZmI0
11
+ NmE5MzNhMGVmNDc3YTE5YjdiMmZkYjZhOTc0NmY1YWM3MDM5Njc=
12
12
  data.tar.gz: !binary |-
13
- YjA3YTRhNTFlODZlMGU1ODJhMzMzM2Q1ZTZhYjg0ZWUxN2E4ZmQ4ZTI2YzE4
14
- OGRiMTA4YjM4MDZiZWRkZjE3MjdlMzI0OWM3MDRjOGUyMjk1MThkYzYxNWFi
15
- NGY3NTg3OWZkOTNmOTk5MWU0N2Y2ZWQxMGM3YzQ3YjUzMDFmMzM=
13
+ YTNhNGQ1OTg3NjFlNmMzNGI3NjBiOWUwZDE1MzZjNmZhYmI3ODc1MDUzNGVk
14
+ Yzg2NDNmZTFhNzU2ODFmMmNmNTVmMDYwOWNjNGJkYjZlOGMzZTRjZTMzNTVl
15
+ YWIzMWE5MjkzMDIwYzNlNWYwMjhlMjYyOTU2YTY1NThkNjc1MTQ=
data/README.md CHANGED
@@ -1,30 +1,28 @@
1
1
  # Briar
2
2
 
3
- extends calabash-ios steps to provide steps for controlling complex ui
4
- elements like tables and pickers.
3
+ extends the steps defined in [calabash-ios](https://github.com/calabash/calabash-ios.git) to help
4
+ your write cucumber Scenarios that interact with complex ui elements like tables, pickers, and sliders.
5
5
 
6
- briar is not trying to provide steps that will work for every project
7
- - it is neccessary that every project develop its own venacular.
8
- instead, briar provides a library [lib] of ruby methods to build
9
- application-specific steps from. the steps in the features directory
10
- are meant to be examples of what briar can offer.
6
+ ### WARNING: briar is not trying to provide steps that will work for every project
11
7
 
12
- https://github.com/calabash/calabash-ios.git
8
+ Every project should cultivate its own [venacular](http://en.wikipedia.org/wiki/Vernacular) -
9
+ a shared language between developers, clients, and users. the steps that briar provides
10
+ are not meant to be dropped into into your projects (although they can be). briar provides a
11
+ library [lib] of ruby methods to build application-specific steps from. the steps in the features
12
+ directory are meant to be examples of what briar can offer.
13
13
 
14
- to see briar in action, have a look at
15
- https://github.com/jmoody/briar-ios-example
14
+ to see briar in action, take a look at https://github.com/jmoody/briar-ios-example
16
15
 
17
16
  ### motivation
18
17
 
19
- DRY: i have several ios projects that use calabash-cucumber and i
20
- found i was rewriting lots of steps and supporting code.
18
+ DRY: i have several ios projects that use calabash-cucumber and i found i was rewriting lots of steps
19
+ and supporting code.
21
20
 
22
21
  ## version numbers
23
22
 
24
- i will try my best to follow http://semver.org/ when naming the
25
- versions.
23
+ i will try my best to follow http://semver.org/ when naming the versions.
26
24
 
27
- ## Why briar?
25
+ ## Why call it briar?
28
26
 
29
27
  * http://en.wikipedia.org/wiki/Smoking_pipe_(tobacco)#Calabash
30
28
  * http://en.wikipedia.org/wiki/Smoking_pipe_(tobacco)#Briar
@@ -34,8 +32,8 @@ versions.
34
32
  getting closer to stability
35
33
 
36
34
  * there are still major problems with date picking
37
- * still problems running tests on lesspainful - can upload to LP but
38
- still cannot get all tests to run
35
+ * can now run tests on lesspainful! woot!
36
+ * there are lot's of wait_for_animation calls that should be replaced with wait_for methods
39
37
 
40
38
  ## Usage
41
39
 
data/bin/briar CHANGED
@@ -4,16 +4,100 @@ require 'find'
4
4
 
5
5
 
6
6
  require File.join(File.dirname(__FILE__), 'briar_helpers')
7
+ require File.join(File.dirname(__FILE__), 'briar_resign')
7
8
 
8
9
  if ARGV.length == 0
9
10
  print_usage
10
11
  exit 0
11
12
  end
12
13
 
14
+ if ARGV.length == 2
15
+ arg1 = ARGV[0]
16
+ unless arg1 == BRIAR_CMD_INSTALL
17
+ print_usage
18
+ exit 1
19
+ end
20
+ allowed = [BRIAR_INSTALL_GEM, BRIAR_INSTALL_CALABASH_GEM, BRIAR_INSTALL_CALABASH_SERVER]
21
+ arg2 = ARGV[1]
22
+ unless allowed.include?(arg2)
23
+ print_usage
24
+ exit 1
25
+ end
26
+
27
+ if arg2 == BRIAR_INSTALL_GEM
28
+
29
+ puts 'will install briar gem'
30
+ gem_dir = "#{ENV['HOME']}/git/briar"
31
+ unless File.exists?(gem_dir)
32
+ puts "expected gem '#{gem_dir}' - cannot install the briar gem"
33
+ exit 1
34
+ end
35
+ system("cd #{gem_dir}; rake install")
36
+ exit 0
37
+ elsif arg2 == BRIAR_INSTALL_CALABASH_GEM
38
+
39
+ puts 'will install calabash-cucumber gem'
40
+ gem_dir = "#{ENV['HOME']}/git/calabash-ios/calabash-cucumber"
41
+ unless File.exists?(gem_dir)
42
+ puts "expected gem '#{gem_dir}' - cannot install the calabash-cucumber gem"
43
+ exit 1
44
+ end
45
+ system("cd #{gem_dir}; rake install")
46
+ exit 0
47
+ elsif arg2 == BRIAR_INSTALL_CALABASH_SERVER
48
+
49
+ puts 'will install calabash-ios server'
50
+ cal_framework = 'calabash.framework'
51
+ unless File.exists?(cal_framework)
52
+ puts "expected '#{cal_framework}' to be in the local directory."
53
+ puts "run this command in the directory that contins '#{cal_framework}'"
54
+ exit 1
55
+ end
56
+
57
+ gem_dir = "#{ENV['HOME']}/git/calabash-ios/calabash-cucumber"
58
+ unless File.exists?(gem_dir)
59
+ puts "expected gem '#{gem_dir}' - cannot install the calabash server"
60
+ exit 1
61
+ end
62
+
63
+ server_dir = "#{ENV['HOME']}/git/calabash-ios-server"
64
+ unless File.exists?(server_dir)
65
+ puts "expected calabash-ios server to be in dir '#{server_dir}'"
66
+ puts "will not be able run '#{gem_dir}/rake build_server'"
67
+ exit 1
68
+ end
69
+
70
+ version_file = File.read("#{server_dir}/calabash/Classes/FranklyServer/Routes/LPVersionRoute.h")
71
+ tokens = version_file.split(/define kLPCALABASHVERSION/)
72
+ line = tokens[1].split("\n").first
73
+ version = line.tr('^A-Za-z0-9.\-\_', '')
74
+
75
+ puts "building calabash server using 'rake build_server'"
76
+ system("cd #{gem_dir}; rake build_server")
77
+ puts 'remove old cal simulator targets'
78
+ system('briar rm-cal-targets')
79
+ puts 'copying new framework to ./'
80
+ system("cp #{gem_dir}/staticlib/#{cal_framework}.zip ./")
81
+ puts 'removing old framework'
82
+ system("rm -rf #{cal_framework}")
83
+ puts 'unzipping new framework'
84
+ system("unzip #{cal_framework}.zip")
85
+ puts 'cleaning up'
86
+ system("rm -rf #{cal_framework}.zip")
87
+ puts "installed new server version '#{version}'"
88
+
89
+ exit 0
90
+ end
91
+ puts 'fell through install conditional'
92
+ exit 1
93
+ end
94
+
13
95
  cmd = ARGV.shift
14
96
  if cmd == 'help'
15
97
  print_usage
16
98
  exit 0
99
+ elsif cmd == BRIAR_VERSION_CMD
100
+ puts "#{Briar::VERSION}"
17
101
  elsif cmd == BRIAR_RM_CAL_TARGETS
18
102
  puts 'quiting the simulator'
19
103
  `/usr/bin/osascript -e 'tell application "iPhone Simulator" to quit'`
@@ -39,63 +123,18 @@ elsif cmd == BRIAR_RM_CAL_TARGETS
39
123
  end
40
124
 
41
125
  elsif cmd == BRIAR_INSTALL_CALABASH_GEM
42
- puts 'will install calabash-cucumber gem'
43
- gem_dir = "#{ENV['HOME']}/git/calabash-ios/calabash-cucumber"
44
- unless File.exists?(gem_dir)
45
- puts "expected gem '#{gem_dir}' - cannot install the calabash-cucumber gem"
46
- exit 1
47
- end
48
- system("cd #{gem_dir}; rake install")
49
-
126
+ puts "use 'briar install calabash-gem'"
127
+ exit 1
50
128
  elsif cmd == BRIAR_INSTALL_GEM
51
- puts 'will install briar gem'
52
- gem_dir = "#{ENV['HOME']}/git/briar"
53
- unless File.exists?(gem_dir)
54
- puts "expected gem '#{gem_dir}' - cannot install the briar gem"
55
- exit 1
56
- end
57
- system("cd #{gem_dir}; rake install")
58
-
129
+ puts "use 'briar install gem'"
130
+ exit 1
59
131
  elsif cmd == BRIAR_INSTALL_CALABASH_SERVER
60
- puts 'will install calabash-ios server'
61
- cal_framework = 'calabash.framework'
62
- unless File.exists?(cal_framework)
63
- puts "expected '#{cal_framework}' to be in the local directory."
64
- puts "run this command in the directory that contins '#{cal_framework}'"
65
- exit 1
66
- end
67
-
68
- gem_dir = "#{ENV['HOME']}/git/calabash-ios/calabash-cucumber"
69
- unless File.exists?(gem_dir)
70
- puts "expected gem '#{gem_dir}' - cannot install the calabash server"
71
- exit 1
72
- end
73
-
74
- server_dir = "#{ENV['HOME']}/git/calabash-ios-server"
75
- unless File.exists?(server_dir)
76
- puts "expected calabash-ios server to be in dir '#{server_dir}'"
77
- puts "will not be able run '#{gem_dir}/rake build_server'"
78
- exit 1
79
- end
80
-
81
- version_file = File.read("#{server_dir}/calabash/Classes/FranklyServer/Routes/LPVersionRoute.h")
82
- tokens = version_file.split(/define kLPCALABASHVERSION/)
83
- line = tokens[1].split("\n").first
84
- version = line.tr('^A-Za-z0-9.\-\_', '')
85
-
86
- puts "building calabash server using 'rake build_server'"
87
- system("cd #{gem_dir}; rake build_server")
88
- puts 'remove old cal simulator targets'
89
- system('briar rm-cal-targets')
90
- puts 'copying new framework to ./'
91
- system("cp #{gem_dir}/staticlib/#{cal_framework}.zip ./")
92
- puts 'removing old framework'
93
- system("rm -rf #{cal_framework}")
94
- puts 'unzipping new framework'
95
- system("unzip #{cal_framework}.zip")
96
- puts 'cleaning up'
97
- system("rm -rf #{cal_framework}.zip")
98
- puts "installed new server version '#{version}'"
132
+ puts "use 'briar install calabash-server'"
133
+ exit 1
134
+ elsif cmd == BRIAR_RESIGN_IPA
135
+ puts 'will resign'
136
+ briar_resign(ARGV)
137
+ exit 0
99
138
  else
100
139
  print_usage
101
140
  exit 1
data/bin/briar_helpers.rb CHANGED
@@ -1,14 +1,22 @@
1
1
  require 'briar'
2
2
 
3
3
  BRIAR_RM_CAL_TARGETS='rm-cal-targets'
4
- BRIAR_INSTALL_CALABASH_GEM='install-calabash-gem'
5
- BRIAR_INSTALL_CALABASH_SERVER='install-calabash-server'
4
+ BRIAR_INSTALL_CALABASH_GEM='calabash-gem'
5
+ BRIAR_INSTALL_CALABASH_SERVER='calabash-server'
6
6
  BRIAR_INSTALL_GEM='gem'
7
+ BRIAR_RESIGN_IPA='resign'
8
+ BRIAR_VERSION_CMD='version'
9
+
10
+ BRIAR_CMD_INSTALL='install'
11
+
7
12
 
8
13
  def print_usage
9
14
  puts <<EOF
10
15
  briar #{Briar::VERSION}
11
16
 
17
+ briar #{BRIAR_VERSION_CMD}
18
+ print the current briar version
19
+
12
20
  briar #{BRIAR_RM_CAL_TARGETS}
13
21
  WARN: this is a destructive operation!
14
22
  * deletes all *-cal targets from simulator
@@ -17,16 +25,19 @@ def print_usage
17
25
  targets and deletes the enclosing directory. useful for clearing out old
18
26
  calabash targets when the framework needs to be updated.
19
27
 
20
- briar #{BRIAR_INSTALL_GEM}
28
+ briar #{BRIAR_CMD_INSTALL} { gem | calabash-gem | calabash-server }
29
+ subcommand to perform various installation tasks
30
+
31
+ briar #{BRIAR_CMD_INSTALL} #{BRIAR_INSTALL_GEM}
21
32
  looks for ~/git/briar and runs 'rake install'. useful for developing and
22
33
  testing the briar gem
23
34
 
24
- briar #{BRIAR_INSTALL_CALABASH_GEM}
35
+ briar #{BRIAR_CMD_INSTALL} #{BRIAR_INSTALL_CALABASH_GEM}
25
36
  looks for ~/git/calabash-ios/calabash-cucumber directory and runs
26
37
  'rake install' to install the calabash-cucumber gem. useful for developing
27
38
  and testing the calabash-cucumber gem.
28
39
 
29
- briar #{BRIAR_INSTALL_CALABASH_SERVER}
40
+ briar #{BRIAR_CMD_INSTALL} #{BRIAR_INSTALL_CALABASH_SERVER}
30
41
  WARN: this is a destructive operation!
31
42
  * replaces calabash.framework in current directory
32
43
  * deletes all *-cal targets from simulator
@@ -36,5 +47,7 @@ def print_usage
36
47
  'rake rake build_server', removes all *-cal targets from simulator, and
37
48
  replaces calabash.framework in local directory. useful for developing and
38
49
  testing the calabash-ios-server.
50
+
51
+ briar: #{BRIAR_RESIGN_IPA} (experimental)
39
52
  EOF
40
53
  end
@@ -0,0 +1,272 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+ require 'CFPropertyList'
5
+ require 'rexml/document'
6
+ require 'tmpdir'
7
+ require 'find'
8
+
9
+ def msg(title, &block)
10
+ puts "\n" + '-'*10 + title + '-'*10
11
+ block.call
12
+ puts '-'*10 + '-------' + '-'*10 + "\n"
13
+ end
14
+
15
+ def briar_resign(args)
16
+ if args.length != 4
17
+ msg('Usage') do
18
+ puts 'briar resign </path/to/your.ipa> </path/to/your.mobileprovision> <wildcard-prefix> <signing-identity>'
19
+ end
20
+ exit 1
21
+ end
22
+
23
+ ipa = args[0]
24
+ unless ipa.end_with?('.ipa')
25
+ msg('Error') do
26
+ puts 'first arg must be an ipa'
27
+ end
28
+ exit 1
29
+ end
30
+
31
+ unless File.exist? ipa
32
+ msg('Error') do
33
+ puts ".ipa must exist at path '#{ipa}'"
34
+ end
35
+ exit 1
36
+ end
37
+
38
+ mobile_prov = args[1]
39
+ unless mobile_prov.end_with?('.mobileprovision')
40
+ msg('Error') do
41
+ puts 'second arg must be a path to a mobileprovision'
42
+ end
43
+ exit 1
44
+ end
45
+
46
+ unless File.exist? mobile_prov
47
+ msg('Error') do
48
+ puts "'#{mobile_prov}' must exist at path"
49
+ end
50
+ exit 1
51
+ end
52
+
53
+ wildcard = args[2]
54
+ unless wildcard.length == 10
55
+ msg 'error' do
56
+ puts "'#{wildcard}' must have 10 characters eg 'RWTD8QPG2C'"
57
+ end
58
+ exit 1
59
+ end
60
+
61
+ unless system("grep #{wildcard} #{mobile_prov}")
62
+ msg 'error' do
63
+ puts "could not find wildcard '#{wildcard}' in '#{mobile_prov}'"
64
+ end
65
+ exit 1
66
+ end
67
+
68
+ signing_id = args[3]
69
+ msg ('Info') do
70
+ puts "will resign with identity '#{signing_id}'"
71
+ end
72
+
73
+ resign_ipa({ipa:ipa, provision:mobile_prov, id:signing_id, wildcard:wildcard})
74
+
75
+ end
76
+
77
+ def resign_ipa(options)
78
+ work_dir = 'resigned'
79
+ ipa = File.join(work_dir, File.basename(options[:ipa]))
80
+ mp = File.join(work_dir, File.basename(options[:provision]))
81
+
82
+ puts 'INFO: making a directory to put the resigned ipa in'
83
+ if File.exist? work_dir
84
+ puts "INFO: found an existing work directory at '#{work_dir}' - removing it"
85
+ unless system("rm -rf #{work_dir}")
86
+ msg 'Error' do
87
+ puts "could not remove existing work dir '#{work_dir}'"
88
+ end
89
+ exit 1
90
+ end
91
+ end
92
+
93
+ unless system("mkdir #{work_dir}")
94
+ msg 'Error' do
95
+ puts "could not create a work directory '#{work_dir}'"
96
+ end
97
+ exit 1
98
+ end
99
+
100
+ puts "INFO: copying assets to '#{work_dir}'"
101
+ unless system("cp #{options[:ipa]} #{ipa}")
102
+ msg 'Error' do
103
+ puts "could not copy '#{options[:ipa]}' to '#{ipa}'"
104
+ end
105
+ exit 1
106
+ end
107
+
108
+ unless system("cp #{options[:provision]} #{mp}")
109
+ msg 'Error' do
110
+ puts "could not copy #{options[:provision]} to #{mp}"
111
+ end
112
+ exit 1
113
+ end
114
+
115
+ puts "unzipping '#{ipa}'"
116
+ unless system("unzip -qq #{ipa} -d #{work_dir}")
117
+ msg ('Error') do
118
+ puts "could not unzip -qq #{ipa} to '#{work_dir}'"
119
+ end
120
+ exit 1
121
+ end
122
+
123
+ payload_dir = "#{work_dir}/Payload"
124
+ unless File.directory?(payload_dir)
125
+ msg 'error' do
126
+ puts "Did not find a 'Payload' directory inside .ipa"
127
+ end
128
+ exit 1
129
+ end
130
+
131
+ app_path = Dir.foreach(payload_dir).find { |x| /.*\.app/.match(x) }
132
+
133
+ abs_app_path = "#{payload_dir}/#{app_path}"
134
+ puts "INFO: found app at '#{abs_app_path}'"
135
+
136
+
137
+ info_plist = Dir.foreach(abs_app_path).find { |x| /^Info\.plist$/.match(x) }
138
+
139
+ if info_plist.nil?
140
+ msg 'error' do
141
+ puts 'could not find an *-Info.plist file'
142
+ end
143
+ exit 1
144
+ end
145
+
146
+ info_plist_path = "#{abs_app_path}/#{info_plist}"
147
+ puts "INFO: found info plist at '#{info_plist_path}'"
148
+
149
+
150
+ mp_id = File.basename(mp, '.mobileprovision')
151
+ puts "INFO: found mobile provision id '#{mp_id}'"
152
+
153
+ puts "INFO: replacing embedded.mobileprovision with '#{mp}'"
154
+
155
+ unless system("cp \"#{mp}\" \"#{abs_app_path}/embedded.mobileprovision\"")
156
+ msg 'error' do
157
+ puts "could not cp '#{mp}' to '#{abs_app_path}/embedded.mobileprovision'"
158
+ end
159
+ exit 1
160
+ end
161
+
162
+
163
+ plist = CFPropertyList::List.new(:file => info_plist_path)
164
+ data = CFPropertyList.native_types(plist.value)
165
+
166
+ if data.nil? or !data.is_a? Hash
167
+ msg 'error' do
168
+ puts "Unable to parse binary plist: #{info_plist_path}"
169
+ end
170
+ end
171
+
172
+ puts "INFO: parsed plist at '#{info_plist_path}'"
173
+
174
+ app_id = data['CFBundleIdentifier']
175
+
176
+ unless app_id
177
+ msg 'error' do
178
+ puts "Unable to find CFBundleIdentifier in plist '#{data}'"
179
+ end
180
+ exit 1
181
+ end
182
+
183
+ puts "INFO: found bundle identifier '#{app_id}'"
184
+
185
+
186
+ bundle_exec = data['CFBundleExecutable']
187
+
188
+ unless bundle_exec
189
+ msg 'error' do
190
+ puts "unable to find CFBundleExecutable in plist '#{data}'"
191
+ end
192
+ exit 1
193
+ end
194
+
195
+ puts "INFO: found bundle executable '#{bundle_exec}'"
196
+
197
+ appname = app_path.split('.app')[0]
198
+
199
+ puts "INFO: found appname '#{appname}'"
200
+
201
+ wildcard = options[:wildcard]
202
+ puts "INFO: creating new entitlements with '#{wildcard}'"
203
+ ios_entitlements_path = File.join(work_dir, 'new-entitlements.plist')
204
+ File.open(ios_entitlements_path, 'a+') do |file|
205
+ file.puts "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
206
+ file.puts "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">"
207
+ file.puts "<plist version=\"1.0\">"
208
+ file.puts '<dict>'
209
+ file.puts ' <key>application-identifier</key>'
210
+ file.puts " <string>#{wildcard}.#{app_id}</string>"
211
+ file.puts ' <key>keychain-access-groups</key>'
212
+ file.puts ' <array>'
213
+ file.puts " <string>#{wildcard}.#{app_id}</string>"
214
+ file.puts ' </array>'
215
+ file.puts ' <key>get-task-allow</key>'
216
+ file.puts ' <true/>'
217
+ file.puts '</dict>'
218
+ file.puts '</plist>'
219
+ end
220
+
221
+ # did _not_ work
222
+ #entitlements = CFPropertyList::List.new(:file => ios_entitlements_path)
223
+ #data = CFPropertyList.native_types(entitlements.value)
224
+ #data['application-identifier']= "#{wildcard}.#{app_id}"
225
+ #data['keychain-access-groups']=["#{wildcard}.#{app_id}"]
226
+ #data['get-task-allow'] = true
227
+ #
228
+ #
229
+ #plist = CFPropertyList::List.new
230
+ #plist.value = CFPropertyList.guess(data)
231
+ #plist.save(ios_entitlements_path, CFPropertyList::List::FORMAT_XML)
232
+ #puts "INFO: saved new entitlements to '#{ios_entitlements_path}'"
233
+
234
+ sign_cmd = "codesign -f -s \"#{options[:id]}\" -vv \"#{abs_app_path}\" --entitlements \"#{ios_entitlements_path}\""
235
+ puts "INFO: signing with '#{sign_cmd}'"
236
+
237
+ unless system(sign_cmd)
238
+ msg 'error' do
239
+ puts 'could not sign application'
240
+ end
241
+ exit 1
242
+ end
243
+
244
+ unless system("rm -rf '#{ipa}'")
245
+ msg 'error' do
246
+ puts "could not remove the old ipa at '#{ipa}'"
247
+ end
248
+ exit 1
249
+ end
250
+
251
+ puts 'INFO: zipping up Payload'
252
+
253
+ FileUtils.cd(work_dir) do
254
+
255
+ unless system("zip -qr #{File.basename(options[:ipa])} Payload")
256
+ msg 'error' do
257
+ puts "could not zip '#{File.basename(options[:ipa])}' from 'Payload'"
258
+ end
259
+ exit 1
260
+ end
261
+
262
+ end
263
+
264
+ puts "INFO: finished signing '#{ipa}'"
265
+
266
+
267
+ system("open #{work_dir}")
268
+
269
+
270
+ end
271
+
272
+