testflight 0.1.5 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +2 -2
- data/README.rdoc +107 -18
- data/lib/templates/testflight.yml.erb +3 -1
- data/lib/testflight/builder.rb +18 -11
- data/lib/testflight/cli.rb +142 -37
- data/lib/testflight/config.rb +12 -0
- data/lib/testflight/version.rb +1 -1
- metadata +7 -13
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 68d832ec0989a3ae7b1b3775d2c04e9676ea36e3
|
4
|
+
data.tar.gz: e76b82525992abdef89dc77c42b3148ccbe94a6a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 33b548b785b57ebc71db62d67ab72ffc8b9d74dbf7f3ee91f7e6b7bac213ad06b29e8c8129b4d99caabc33606201563bb69182f7f8b24679e9eb9d90425583f3
|
7
|
+
data.tar.gz: 059043814ffbdb73b35892b3cb37b929748449f00ec1b318ce76dae2e2a4605b1b918aa6d50d7f0e19af13309159c8282eee7d4f0d8c8f224c8af4498788427f
|
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c)
|
1
|
+
Copyright (c) 2013 Michael Berkovich, mobtouch.com
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
@@ -17,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
17
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
18
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
19
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
CHANGED
@@ -1,23 +1,45 @@
|
|
1
|
+
\----------------------------------\
|
2
|
+
\ \ __
|
3
|
+
\ The best way to build and \ | \
|
4
|
+
> deploy your iOS apps to: >------| \ ______
|
5
|
+
/ www.testflightapp.com / --- \_____/**|_|_\____ |
|
6
|
+
/ / \_______ --------- __>-}
|
7
|
+
/----------------------------------/ / \_____|_____/ |
|
8
|
+
* |
|
9
|
+
{O}
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
/*\ /*\ /*\ /*\ /*\ /*\ /*\
|
14
|
+
|***| |***| |***| |***| |***| |***| |***|
|
15
|
+
\*/ \*/ ____ \*/ \*/ \*/ \*/ \*/
|
16
|
+
| | | | | | | | |
|
17
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
18
|
+
art by Denis Rabusseau, rabussea@jack.greco-prog.fr
|
19
|
+
|
20
|
+
|
1
21
|
= Introduction
|
2
22
|
|
3
|
-
If you
|
4
|
-
|
5
|
-
|
23
|
+
If you ever developed an iOS app, you most likely had to deal with the tedious tasks of manually building, packaging,
|
24
|
+
checking in, tagging, and distributing your iOS application to your testers through testflightapp.com.
|
25
|
+
|
26
|
+
If you haven't, i would highly recommend you do this, at least once, manually! Then you would truly be able to appreciate this gem.
|
27
|
+
|
6
28
|
|
7
|
-
|
29
|
+
This gem is going to make your life much easier, hopefully. Here is what it does:
|
8
30
|
|
9
|
-
1. Reads your
|
10
|
-
2.
|
31
|
+
1. Reads your Xcode project file to determine your app version and build number
|
32
|
+
2. Optionally, commits all your changes to the git repository (by, first, asking you about what has changed)
|
11
33
|
3. Builds your project (or workspace)
|
12
34
|
4. Packages your application into an IPA file
|
13
35
|
5. Uploads the IPA file to testflightapp.com
|
14
|
-
6.
|
15
|
-
7.
|
36
|
+
6. Optinally, tags your project with the version and the build
|
37
|
+
7. Optionally, increments your app build number and commits it to the repo
|
16
38
|
8. Keeps a log of all your deployments to testflightapp.com in a FLIGHTLOG file
|
17
39
|
|
18
40
|
All that with a simple command:
|
19
41
|
|
20
|
-
$ testflight takeoff
|
42
|
+
$ testflight takeoff
|
21
43
|
|
22
44
|
|
23
45
|
|
@@ -25,35 +47,102 @@ $ testflight takeoff
|
|
25
47
|
|
26
48
|
gem install testflight
|
27
49
|
|
50
|
+
if you are using rbenv, you might need to run:
|
51
|
+
|
52
|
+
$ rbenv rehash
|
53
|
+
|
28
54
|
|
29
55
|
= Configuration
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
_______
|
60
|
+
\=====/
|
61
|
+
|||
|
62
|
+
#
|
63
|
+
|
|
64
|
+
---------------------------
|
65
|
+
| www.testflightapp.com |
|
66
|
+
---------------------------
|
67
|
+
\ | | /
|
68
|
+
\ | | /
|
69
|
+
\ | | /
|
70
|
+
\ | | /
|
71
|
+
###################
|
72
|
+
|| ||
|
73
|
+
|| ||
|
74
|
+
|| ||
|
75
|
+
|| ||
|
76
|
+
|| ||
|
77
|
+
|| || ___
|
78
|
+
|| || | \______________
|
79
|
+
|| #### || ====( oooooooooo O\__
|
80
|
+
|| # # || (________/=====>______)--
|
81
|
+
|| # # || OO O
|
82
|
+
--------------------------------------------------------------------------------
|
83
|
+
|
84
|
+
|
30
85
|
|
31
86
|
To setup your project with the deployment script, run the following command from within your Xcode project folder:
|
32
87
|
|
33
88
|
$ testflight checkin
|
34
89
|
|
35
|
-
This command will ask you a few questions about your project
|
90
|
+
This command will ask you a few questions about your project, which will result in creation of .tesflight file in your project folder.
|
91
|
+
|
92
|
+
If you don't like being asked questions and prefer to configure your project manually, just create a .tesflight file yourself and provide the following information:
|
36
93
|
|
37
94
|
build:
|
38
|
-
developer_name: #
|
39
|
-
increment_bundle: true
|
95
|
+
developer_name: "My Company Inc" # Must match your company name as it appears in your .cer from Apple
|
96
|
+
increment_bundle: true # Increments your build number
|
97
|
+
architecture: armv7
|
98
|
+
configuration: Release # In Xcode 5, it must be set to Release
|
99
|
+
sdk: iphoneos
|
40
100
|
git:
|
41
|
-
commit_changes: true
|
42
|
-
tag_build: true
|
101
|
+
commit_changes: true # If you want to commit changes before each build
|
102
|
+
tag_build: true # Will tag each build in git
|
43
103
|
testflight:
|
44
|
-
api_token: # Get it from https://testflightapp.com/account/#api
|
45
|
-
team_token: # Get it from https://testflightapp.com/dashboard/team/edit/
|
46
|
-
distribution_lists: ["
|
104
|
+
api_token: "abcdefghijklmnop" # Get it from https://testflightapp.com/account/#api
|
105
|
+
team_token: "abcdefghijklmnop" # Get it from https://testflightapp.com/dashboard/team/edit/
|
106
|
+
distribution_lists: ["Developers", "Testers", "Everyone"] # Configure your lists at https://testflightapp.com
|
47
107
|
|
48
108
|
|
49
109
|
= Execution
|
50
110
|
|
51
|
-
Once you have checked in (
|
111
|
+
Once you have checked in (which is done only once per project), you are ready for takeoff.
|
112
|
+
|
113
|
+
Go to your project folder and simply type:
|
52
114
|
|
53
115
|
$ testflight takeoff
|
54
116
|
|
55
117
|
Have a safe flight!
|
56
118
|
|
119
|
+
|
120
|
+
___.----.____
|
121
|
+
__,--(_,-' ,-'
|
122
|
+
_,-' ,-'
|
123
|
+
_,-' () ,-'
|
124
|
+
,-' () ,-'
|
125
|
+
,-' () ,-'
|
126
|
+
,-' __..--'' ,-'
|
127
|
+
,-'.--'' ,-' ,-'
|
128
|
+
|\ __..--'' ,-' ,-':
|
129
|
+
| \__..--'' ______ ,-' _,-' :
|
130
|
+
__..--'' ,-'\_____/-' _,-' :
|
131
|
+
__..--'' ,-' ,-' ,-' _,-'____/ :
|
132
|
+
`---...___ ,-' ,-' ,-' _,-' _,-' :
|
133
|
+
``````-,-' ,-' ,-' _,-' _,-' :
|
134
|
+
\,-'___,-'--''___,-'-...___ :
|
135
|
+
```---..:
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
= Authors
|
143
|
+
|
144
|
+
Michael Berkovich
|
145
|
+
|
57
146
|
|
58
147
|
= Contribution
|
59
148
|
|
@@ -1,8 +1,10 @@
|
|
1
1
|
build:
|
2
2
|
developer_name: "<%= @company_name %>"
|
3
3
|
increment_bundle: <%= @should_increment_bundle == true %>
|
4
|
+
architecture: <%= @architecture %>
|
5
|
+
configuration: <%= @configuration %>
|
4
6
|
sdk: <%= @sdk %>
|
5
|
-
git:
|
7
|
+
git:
|
6
8
|
commit_changes: <%= @should_commit_changes == true %>
|
7
9
|
tag_build: <%= @should_tag_build == true %>
|
8
10
|
testflight:
|
data/lib/testflight/builder.rb
CHANGED
@@ -21,7 +21,6 @@
|
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
22
|
#++
|
23
23
|
|
24
|
-
require 'appscript'
|
25
24
|
require 'yaml'
|
26
25
|
|
27
26
|
module Testflight
|
@@ -31,8 +30,6 @@ module Testflight
|
|
31
30
|
XCODE_PACKAGER = "/usr/bin/xcrun"
|
32
31
|
TESTFLIGHT_ENDPOINT = "http://testflightapp.com/api/builds.json"
|
33
32
|
|
34
|
-
include Appscript
|
35
|
-
|
36
33
|
def initialize(opts = {})
|
37
34
|
t0 = Time.now
|
38
35
|
|
@@ -48,6 +45,7 @@ module Testflight
|
|
48
45
|
build_workspace(opts)
|
49
46
|
package_workspace(opts)
|
50
47
|
else
|
48
|
+
clean_project(opts)
|
51
49
|
build_project(opts)
|
52
50
|
package_project(opts)
|
53
51
|
end
|
@@ -65,7 +63,7 @@ module Testflight
|
|
65
63
|
|
66
64
|
t1 = Time.now
|
67
65
|
|
68
|
-
puts("
|
66
|
+
puts("\n\nBuild took #{t1-t0} seconds.")
|
69
67
|
end
|
70
68
|
|
71
69
|
####################################################################################
|
@@ -82,10 +80,20 @@ module Testflight
|
|
82
80
|
execute(cmd, opts)
|
83
81
|
end
|
84
82
|
|
83
|
+
def clean_project(opts = {})
|
84
|
+
cmd = "#{XCODE_BUILDER} -project '#{Testflight::Config.application_name}.xcodeproj' "
|
85
|
+
cmd << "-configuration '#{Testflight::Config.configuration}' "
|
86
|
+
cmd << "-alltargets clean "
|
87
|
+
execute(cmd, opts)
|
88
|
+
end
|
89
|
+
|
85
90
|
def build_project(opts = {})
|
86
|
-
cmd = "#{XCODE_BUILDER} -
|
87
|
-
cmd << "-
|
88
|
-
cmd << "-
|
91
|
+
cmd = "#{XCODE_BUILDER} -project '#{Testflight::Config.application_name}.xcodeproj' "
|
92
|
+
cmd << "-arch #{Testflight::Config.architecture} "
|
93
|
+
cmd << "-target '#{Testflight::Config.application_name}' "
|
94
|
+
cmd << "-configuration '#{Testflight::Config.configuration}' "
|
95
|
+
cmd << "-sdk '#{Testflight::Config.sdk}' "
|
96
|
+
cmd << "build VALID_ARCHS='#{Testflight::Config.architecture}' "
|
89
97
|
execute(cmd, opts)
|
90
98
|
end
|
91
99
|
|
@@ -104,7 +112,7 @@ module Testflight
|
|
104
112
|
|
105
113
|
def package_project(opts = {})
|
106
114
|
cmd = "#{XCODE_PACKAGER} -sdk iphoneos PackageApplication "
|
107
|
-
cmd << "-v '#{Testflight::Config.build_dir}/
|
115
|
+
cmd << "-v '#{Testflight::Config.build_dir}/Release-iphoneos/#{Testflight::Config.application_name}.app' "
|
108
116
|
cmd << "-o '#{Testflight::Config.distribution_file}' "
|
109
117
|
cmd << "--sign '#{Testflight::Config.developer_name}' "
|
110
118
|
cmd << "--embed '#{Testflight::Config.provisioning_dir}/#{Testflight::Config.ad_hoc_provisioning_name}'"
|
@@ -203,9 +211,8 @@ module Testflight
|
|
203
211
|
return if opts[:ignore_result]
|
204
212
|
|
205
213
|
unless result
|
206
|
-
|
207
|
-
|
208
|
-
end
|
214
|
+
raise "Build failed"
|
215
|
+
end
|
209
216
|
end
|
210
217
|
|
211
218
|
end
|
data/lib/testflight/cli.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2013 Michael Berkovich
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -34,51 +34,73 @@ module Testflight
|
|
34
34
|
end
|
35
35
|
|
36
36
|
map 'c' => :checkin
|
37
|
-
|
38
|
-
|
39
|
-
desc 'checkin', 'Initializes project configuration file and prepares you for takeoff'
|
37
|
+
desc 'checkin', 'Initializes your project configuration file and prepares it for takeoff'
|
40
38
|
def checkin
|
41
39
|
return unless is_project_folder?
|
42
40
|
|
43
|
-
say("\
|
41
|
+
say("\n\n")
|
42
|
+
say(" \n")
|
43
|
+
say(" TEST FLIGHT CHECK-IN \n")
|
44
|
+
say(" \n")
|
45
|
+
say(" \n")
|
46
|
+
say(" \\----------------------------------\\ \n")
|
47
|
+
say(" \\ \\ __ \n")
|
48
|
+
say(" \\ Please proceed with your \\ | \\ \n")
|
49
|
+
say(" > check-in by answering the >------| \\ ______ \n")
|
50
|
+
say(" / following questions: / --- \\_____/**|_|_\\____ | \n")
|
51
|
+
say(" / / \\_______ --------- __>-} \n")
|
52
|
+
say(" /----------------------------------/ / \\_____|_____/ | \n")
|
53
|
+
say(" * | \n")
|
54
|
+
say(" {O} \n")
|
55
|
+
say(" \n")
|
56
|
+
say(" \n")
|
57
|
+
say(" /*\\ /*\\ /*\\ /*\\ /*\\ /*\\ /*\\ \n")
|
58
|
+
say(" |***| |***| |***| |***| |***| |***| |***| \n")
|
59
|
+
say(" \\*/ \\*/ ____ \\*/ \\*/ \\*/ \\*/ \\*/ \n")
|
60
|
+
say(" | | | | | | | | | \n")
|
61
|
+
say("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n")
|
62
|
+
say("^^^^^^^^^ art by Denis Rabusseau, rabussea@jack.greco-prog.fr ^^^^^^^^^^^ \n")
|
63
|
+
say("\n\n")
|
64
|
+
|
65
|
+
|
66
|
+
say("\nConfiguring #{Testflight::Config.application_name} #{Testflight::Config.type} for deployment to testflightapp.com...")
|
44
67
|
["Provisioning", "Distributions", "build"].each do |name|
|
45
68
|
create_folder(name)
|
46
69
|
end
|
47
70
|
|
48
|
-
|
71
|
+
@company_name = ask("\nWhat is the name of your company, as it appears in your Apple certificate?")
|
72
|
+
@should_increment_bundle = yes_no?("Would you like to automatically increment the build number after every deployment?", "Y")
|
49
73
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
say("\r\nConfiguring Git commands...")
|
54
|
-
if yes?("Do you use git as your SCM? (y/n)")
|
55
|
-
@should_commit_changes = yes?("Would you like to commit and push your changes to git as the first step of your deployment? (y/n)")
|
74
|
+
if File.exist?("./.git")
|
75
|
+
say("\nIt looks like you are using git as your SCM.")
|
76
|
+
@should_commit_changes = yes_no?("Would you like to commit and push your changes to git before deployment?", "N")
|
56
77
|
if @should_increment_bundle
|
57
|
-
@should_tag_build =
|
78
|
+
@should_tag_build = yes_no?("Would you like to tag every build in git with the version/build number of your application?", "Y")
|
58
79
|
end
|
59
80
|
end
|
60
81
|
|
61
|
-
say("\r\nConfiguring Build commands
|
62
|
-
say("What
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
@
|
73
|
-
|
74
|
-
|
75
|
-
say("
|
82
|
+
#say("\r\nConfiguring Build commands...\n")
|
83
|
+
#say("What iOS architecture are you using?")
|
84
|
+
#architectures = [
|
85
|
+
# ["1:", "armv5"],
|
86
|
+
# ["2:", "armv6"],
|
87
|
+
# ["3:", "armv7"],
|
88
|
+
#]
|
89
|
+
#print_table(architectures)
|
90
|
+
#num = ask_for_number(3)
|
91
|
+
#@architecture = architectures[num-1].last
|
92
|
+
@architecture = 'armv7'
|
93
|
+
@configuration = 'Release'
|
94
|
+
@sdk = 'iphoneos'
|
95
|
+
|
96
|
+
say("\r\nConfiguring testflightapp.com commands...")
|
97
|
+
say("Please get your API TOKEN from the following URL: https://testflightapp.com/account/#api")
|
76
98
|
@api_token = ask("Paste your API TOKEN here:")
|
77
99
|
|
78
|
-
say("
|
100
|
+
say("Please get your TEAM TOKEN from the following URL: https://testflightapp.com/dashboard/team/edit")
|
79
101
|
@team_token = ask("Paste your TEAM TOKEN here:")
|
80
102
|
|
81
|
-
@teams = ask("\r\nPlease enter your distribution lists as
|
103
|
+
@teams = ask("\r\nPlease enter your distribution lists as they appear on testflightapp.com (separated with comma):")
|
82
104
|
@teams = @teams.split(",").collect{|t| t.strip}
|
83
105
|
|
84
106
|
template 'templates/testflight.yml.erb', "./#{Testflight::Config.path}"
|
@@ -87,32 +109,115 @@ module Testflight
|
|
87
109
|
|
88
110
|
say("Configuration file '.testflight' has been created. You can edit it manually or run the init command again.")
|
89
111
|
say("\r\nOnly a few steps left, but make sure you do them all.")
|
90
|
-
say("1). Copy your Ad Hoc Provisioning Profile (.mobileprovision) into the 'Provisioning' folder.")
|
91
|
-
say("2).
|
112
|
+
say("1). Copy your Ad Hoc Provisioning Profile (.mobileprovision) into the 'Provisioning' folder that was created earlier.")
|
113
|
+
say("2). Make sure your Release configuration uses your Ad-Hoc profile. You can follow these instructions to learn more: http://help.testflightapp.com/customer/portal/articles/1333914-how-to-create-an-ipa-xcode-5-")
|
92
114
|
say("\r\nOnce you are done, you can run: testflight takeoff")
|
93
115
|
end
|
94
116
|
|
117
|
+
map 't' => :takeoff
|
95
118
|
desc 'takeoff', 'Builds and deploys your project based on your configuration.'
|
96
119
|
method_option :cold, :type => :boolean, :aliases => "c", :required => false
|
97
120
|
def takeoff
|
98
121
|
return unless ready_for_takeoff?
|
99
122
|
|
100
|
-
say("Preparing #{Testflight::Config.application_name} #{Testflight::Config.type} #{Testflight::Config.project_version} for deployment to testflightapp.com...")
|
101
123
|
|
102
|
-
|
124
|
+
say("\n\n")
|
125
|
+
say(" _______ \n")
|
126
|
+
say(" \\=====/ \n")
|
127
|
+
say(" ||| \n")
|
128
|
+
say(" # \n")
|
129
|
+
say(" | \n")
|
130
|
+
say(" =========================== \n")
|
131
|
+
say(" | www.testflightapp.com | \n")
|
132
|
+
say(" =========================== \n")
|
133
|
+
say(" \\ | | / \n")
|
134
|
+
say(" \\ | | / \n")
|
135
|
+
say(" \\ | | / \n")
|
136
|
+
say(" \\ | | / \n")
|
137
|
+
say(" ################### \n")
|
138
|
+
say(" || || \n")
|
139
|
+
say(" || || \n")
|
140
|
+
say(" || || \n")
|
141
|
+
say(" || || \n")
|
142
|
+
say(" || || \n")
|
143
|
+
say(" || || ___ \n")
|
144
|
+
say(" || || | \\______________ \n")
|
145
|
+
say(" || #### || ====( oooooooooo O\\__ \n")
|
146
|
+
say(" || # # || (________/=====>______)-- \n")
|
147
|
+
say(" || # # || OO O \n")
|
148
|
+
say("===================================================================================== \n")
|
149
|
+
say(" art by Ian Astley, astley@Papin.HRZ.Uni-Marburg.DE \n")
|
150
|
+
say("\n\n")
|
151
|
+
|
152
|
+
say("Preparing #{Testflight::Config.application_name} #{Testflight::Config.type} #{Testflight::Config.project_version} for departure to testflightapp.com...")
|
153
|
+
|
154
|
+
|
155
|
+
@message = ask("\r\nWhat changes did you make in this build (will be used in git commit and notes)?")
|
103
156
|
@teams = ask_with_multiple_options("Which team(s) would you like to distirbute the build to? Provide team number(s, separated by a comma)",
|
104
157
|
Testflight::Config.distribution_lists)
|
105
158
|
|
106
|
-
@notify =
|
159
|
+
@notify = yes_no?("\r\nWould you like to notify the team members by email about this build?", "N")
|
107
160
|
|
108
161
|
Testflight::Builder.new(:message => @message, :teams => @teams, :notify => @notify, :cold => options['cold'])
|
109
162
|
|
110
|
-
say("
|
163
|
+
say(" \n")
|
164
|
+
say(" \n")
|
165
|
+
say(" ___.----.____ \n")
|
166
|
+
say(" __,--(_,-' ,-' \n")
|
167
|
+
say(" _,-' ,-' \n")
|
168
|
+
say(" _,-' () ,-' \n")
|
169
|
+
say(" ,-' () ,-' \n")
|
170
|
+
say(" ,-' () ,-' \n")
|
171
|
+
say(" ,-' __..--'' ,-' \n")
|
172
|
+
say(" ,-'.--'' ,-' ,-' \n")
|
173
|
+
say(" |\\ __..--'' ,-' ,-': \n")
|
174
|
+
say(" | \\__..--'' ______ ,-' _,-' : \n")
|
175
|
+
say(" __..--'' ,-'\\_____/-' _,-' : \n")
|
176
|
+
say("__..--'' ,-' ,-' ,-' _,-'____/ : \n")
|
177
|
+
say("`---...___ ,-' ,-' ,-' _,-' _,-' : \n")
|
178
|
+
say(" ``````-,-' ,-' ,-' _,-' _,-' : \n")
|
179
|
+
say(" \\,-'___,-'--''___,-'-...___ : \n")
|
180
|
+
say(" ```---..: \n")
|
181
|
+
say(" \n")
|
182
|
+
say(" \n")
|
183
|
+
say(" \n")
|
184
|
+
say(" \n")
|
185
|
+
|
186
|
+
say("\r\nCongratulations, your build has been departed! Have a safe flight!")
|
111
187
|
say
|
188
|
+
rescue
|
189
|
+
|
190
|
+
say(" \n")
|
191
|
+
say(" \n")
|
192
|
+
say(" \n")
|
193
|
+
say(" .-------------------. ___ \n")
|
194
|
+
say(" ( OUCH !!! ) / /] \n")
|
195
|
+
say(" `-------------- --' / / ] \n")
|
196
|
+
say(" \\ | _____,.-' /__] \n")
|
197
|
+
say(" ) \\| ,-' _> \n")
|
198
|
+
say(" ( ` _/ ,.-'` \n")
|
199
|
+
say(" ) / | _,.-'`` \n")
|
200
|
+
say(" ( /. / | \n")
|
201
|
+
say(" ) , /` ./ \n")
|
202
|
+
say(" ( \\_/ // _ \n")
|
203
|
+
say(" ) / //==(_) \n")
|
204
|
+
say(" _,~'# (/. \n")
|
205
|
+
say("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n")
|
206
|
+
say(" \n")
|
207
|
+
|
208
|
+
say("\r\nBuild failed")
|
112
209
|
end
|
113
210
|
|
114
211
|
protected
|
115
|
-
|
212
|
+
|
213
|
+
def yes_no?(question, default = "Y")
|
214
|
+
answer = ask("#{question} #{default ? "(Y/n)" : "(y/N)"}")
|
215
|
+
if default == "Y"
|
216
|
+
return (["Y", "y", "yes", "YES", "Yes", ""].include?(answer))
|
217
|
+
end
|
218
|
+
(["N", "n", "no", "NO", "No", ""].include?(answer))
|
219
|
+
end
|
220
|
+
|
116
221
|
def is_project_folder?
|
117
222
|
unless Testflight::Config.application_name
|
118
223
|
say("This folder does not contain an xCode project or a workspace.")
|
data/lib/testflight/config.rb
CHANGED
@@ -56,6 +56,18 @@ module Testflight
|
|
56
56
|
build["sdk"]
|
57
57
|
end
|
58
58
|
|
59
|
+
def self.architecture
|
60
|
+
build["architecture"]
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.configuration
|
64
|
+
build["configuration"]
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.sdk
|
68
|
+
build["sdk"]
|
69
|
+
end
|
70
|
+
|
59
71
|
def self.git
|
60
72
|
config["git"]
|
61
73
|
end
|
data/lib/testflight/version.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: testflight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Michael Berkovich
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-11-10 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: thor
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: plist
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -63,27 +58,26 @@ files:
|
|
63
58
|
- README.rdoc
|
64
59
|
homepage: https://github.com/berk/testflight
|
65
60
|
licenses: []
|
61
|
+
metadata: {}
|
66
62
|
post_install_message:
|
67
63
|
rdoc_options: []
|
68
64
|
require_paths:
|
69
65
|
- - lib
|
70
66
|
- lib/testflight
|
71
67
|
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
68
|
requirements:
|
74
|
-
- -
|
69
|
+
- - '>='
|
75
70
|
- !ruby/object:Gem::Version
|
76
71
|
version: '0'
|
77
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
-
none: false
|
79
73
|
requirements:
|
80
|
-
- -
|
74
|
+
- - '>='
|
81
75
|
- !ruby/object:Gem::Version
|
82
76
|
version: '0'
|
83
77
|
requirements: []
|
84
78
|
rubyforge_project:
|
85
|
-
rubygems_version:
|
79
|
+
rubygems_version: 2.0.3
|
86
80
|
signing_key:
|
87
|
-
specification_version:
|
81
|
+
specification_version: 4
|
88
82
|
summary: iOS application deployment automation
|
89
83
|
test_files: []
|