testflight 0.1.5 → 1.0.1
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.
- 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: []
|