appflight 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8f586335963c357a6cce7d574de0c1031cb08152
4
+ data.tar.gz: 9e00b5e56895a473e21c39d5f84ec7c96d1475ea
5
+ SHA512:
6
+ metadata.gz: b380e91355f47c07f60a8a53eacc2db934a54ad20f1f946938934eff31481707fe9925ef590eba328db997d98d8ab142ebbc4f297931bc213d80545dbc1154ee
7
+ data.tar.gz: e2ad14470564b53f4080e4ea1dd4141105213e451c9f9c4e8ca9d02f14099b5bb4d58a0dec69ef3f250f7dc0fc1896bddfc63e263c76ad7105695535934bf546
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 Masaaki Isozu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,46 @@
1
+ # AppFlight
2
+
3
+ Release .ipa file over the cloud storage privately like TestFlight. All files related to .ipa was uploaded to the cloud storage, then S3 and Route53 configurations are strongly required for your convinience.
4
+
5
+ ## Installation
6
+
7
+ $ gem install appflight
8
+
9
+ ## Building & Releasing
10
+
11
+ `appflight` can build the .ipa file by `ipa` command of shenzhen in your PATH. In prior to building the app, .env file will be required with filled environmental variables. The env.appflight file would be helpful.
12
+ Normally S3 bucket name is assigned as get.YOURDOMAIN to avoid some trouble.
13
+
14
+ $ cd /path/to/iOS_Project/
15
+ $ appflight generate
16
+ $ vim .env.app
17
+ $ vim .env.s3
18
+ $ appflight build
19
+ $ appflight release:s3
20
+
21
+ ## Get Your App
22
+
23
+ Please make sure that your S3 bucket is public, then the end-point of S3 could be found in the S3 dashboard. Within Route 53, any A record would have directed to that end-point. So you can specify the landing page like get.YOURAPP.com.
24
+
25
+ ## .env Sample file
26
+
27
+ ```
28
+ ### Aws
29
+ AWS_ACCESS_KEY_ID: AKIAB132JA711UOJPWA
30
+ AWS_SECRET_ACCESS_KEY: ZclgzgPHzuaxIkaLIuEOlhn3DcWXt1umxA7
31
+ S3_BUCKET: get.yourapp.com
32
+ AWS_REGION: ap-northeast-1
33
+
34
+ ### Build Context
35
+ provision: 57A87197-DE9D-DEAD-BEEF-89DFF4F18A91
36
+ configure: "Release"
37
+
38
+ ### plist Context
39
+ ipa_name: yourapp.ipa
40
+ bundle_id: com.yourapp
41
+
42
+ ### Web Page Context
43
+ app_name: YourAppName
44
+ app_desc: YourApp is great.
45
+ get_domain: get.yourapp.com
46
+ ```
@@ -0,0 +1,9 @@
1
+ require "bundler/setup"
2
+
3
+ gemspec = eval(File.read("appflight.gemspec"))
4
+
5
+ task :build => "#{gemspec.full_name}.gem"
6
+
7
+ file "#{gemspec.full_name}.gem" => gemspec.files + ["appflight.gemspec"] do
8
+ system "gem build appflight.gemspec"
9
+ end
Binary file
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require File.expand_path('../lib/appflight/version', __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = "appflight"
7
+ gem.authors = ["Masaaki Isozu"]
8
+ gem.email = "m.isozu@gmail.com"
9
+ gem.license = "MIT"
10
+ gem.version = AppFlight::VERSION
11
+ gem.platform = Gem::Platform::RUBY
12
+ gem.summary = "AppFlight"
13
+ gem.description = "Release .ipa file on cloud storage for distribution like TestFlight."
14
+ gem.homepage = "https://github.com/isozu/appflight"
15
+
16
+ gem.add_dependency "shenzhen", "~> 0.5.1"
17
+ gem.add_dependency "commander", "~> 4.1"
18
+ gem.add_dependency "dotenv", "~> 0.7"
19
+ gem.add_dependency "aws-sdk", "~> 1.0"
20
+ gem.add_dependency "highline", "~> 1.6.20"
21
+
22
+ gem.add_development_dependency "rspec"
23
+ gem.add_development_dependency "rake"
24
+
25
+ gem.files = Dir["./**/*"].reject { |file| file =~ /\.\/(bin|log|pkg|script|spec|test|vendor)/ }
26
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
27
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
28
+ gem.require_paths = ["lib"]
29
+ end
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'dotenv'
4
+ Dotenv.load
5
+
6
+ require 'commander/import'
7
+
8
+ $:.push File.expand_path("../../lib", __FILE__)
9
+ require 'appflight'
10
+
11
+ program :version, AppFlight::VERSION
12
+ program :description, 'Release iOS apps in private cloud storage.'
13
+
14
+ program :help, 'Website', 'http://github.com/isozu/appflight'
15
+
16
+ default_command :help
17
+
18
+ require 'appflight/commands'
@@ -0,0 +1,20 @@
1
+ # Please copy this file to your local directory as '.env.appflight'.
2
+ #
3
+ ### AWS
4
+ AWS_ACCESS_KEY_ID:
5
+ AWS_SECRET_ACCESS_KEY:
6
+ S3_BUCKET:
7
+ AWS_REGION:
8
+
9
+ ### Build Context
10
+ provision:
11
+ configure:
12
+
13
+ ### plist Context
14
+ ipa_name:
15
+ bundle_id:
16
+
17
+ ### Page Context
18
+ app_name:
19
+ app_desc:
20
+ get_domain:
@@ -0,0 +1,3 @@
1
+ require 'appflight/version'
2
+ require 'appflight/web'
3
+ require 'pry'
@@ -0,0 +1,6 @@
1
+ $:.push File.expand_path('../', __FILE__)
2
+
3
+ require 'plugins/s3'
4
+ require 'commands/build'
5
+ require 'commands/generate'
6
+ require 'commands/release'
@@ -0,0 +1,23 @@
1
+ require 'fileutils'
2
+
3
+ command :build do |c|
4
+ c.syntax = 'appflight build [options]'
5
+ c.summary = 'Build a new .ipa file'
6
+ c.description = ''
7
+
8
+ c.action do |arg, options|
9
+ @provision ||= ENV['provision']
10
+ @provision ||= ask "Mobile Provision:"
11
+
12
+ @configure ||= ENV['configure']
13
+ @configure ||= ask "Configuration:"
14
+
15
+ build_file
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def build_file
22
+ system %{ipa build --clean --destination . --configuration #{@configure} -m "#{@provision}"}
23
+ end
@@ -0,0 +1,36 @@
1
+ require 'fileutils'
2
+ require 'highline'
3
+
4
+ command :generate do |c|
5
+ c.syntax = 'appflight generate [options]'
6
+ c.summary = 'Generate a new web page'
7
+ c.description = ''
8
+
9
+ c.option '-d', '--destination DESTINATION', 'Destination. Defaults to current directory'
10
+
11
+ c.action do |arg, options|
12
+ @h = HighLine.new
13
+ @destination = options.destination || "flight"
14
+
15
+ @files = generate_files()
16
+ FileUtils.mkdir(@destination)
17
+ puts "\t#{@h.color('create', :green)}"
18
+ @files.each { |key, fd|
19
+ File.open("#{key}", "w").write(File.read(fd))
20
+ puts "\t#{@h.color('create', :green)}\t#{key}"
21
+ }
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def generate_files()
28
+ files = []
29
+ files << [".env.app", File.open("#{AppFlight::Utils.gem_webdir}/template/dot.env.app")]
30
+ files << [".env.s3", File.open("#{AppFlight::Utils.gem_webdir}/template/dot.env.s3")]
31
+ files << ["#{@destination}/1.jpg", File.open("#{AppFlight::Utils.gem_webdir}/template/1.jpg")]
32
+ files << ["#{@destination}/style.css", File.open("#{AppFlight::Utils.gem_webdir}/template/style.css")]
33
+ files << ["#{@destination}/index.html.erb", File.open("#{AppFlight::Utils.gem_webdir}/template/index.html.erb")]
34
+ files << ["#{@destination}/plist.erb", File.open("#{AppFlight::Utils.gem_webdir}/template/plist.erb")]
35
+ files
36
+ end
@@ -0,0 +1,4 @@
1
+ private
2
+
3
+ def upload_file
4
+ end
@@ -0,0 +1,118 @@
1
+ require 'aws-sdk'
2
+ require 'fileutils'
3
+ require_relative '../utils'
4
+
5
+ Dotenv.load ".env.s3"
6
+
7
+ module AppFlight::Plugins
8
+ module S3
9
+ class Client
10
+ def initialize(access_key_id, secret_access_key, region)
11
+ @s3 = AWS::S3.new(:access_key_id => access_key_id,
12
+ :secret_access_key => secret_access_key,
13
+ :region => region)
14
+ @h = HighLine.new
15
+ end
16
+
17
+ def prepare_buckets(options)
18
+ @s3.buckets.create(options[:bucket]) if options[:create]
19
+ @bucket = @s3.buckets[options[:bucket]]
20
+ end
21
+
22
+ def upload_files(files = [], options)
23
+ prepare_buckets(options)
24
+ puts "\t#{@h.color('upload', :green)}\tto S3"
25
+ @page = AppFlight::Web::Page.new
26
+ Dir.glob("#{options[:destination]}/*") { |file|
27
+ if file.match('.erb$') then
28
+ upload(File.basename(file).gsub(".erb",""),
29
+ StringIO.new(@page.render(file)))
30
+ else
31
+ upload(File.basename(file), File.open(file))
32
+ end
33
+ }
34
+ end
35
+
36
+ def upload_ipa(options)
37
+ @s3.buckets.create(options[:bucket]) if options[:create]
38
+ @bucket = @s3.buckets[options[:bucket]]
39
+ @ipa_name = ENV['ipa_name']
40
+ @ipa_name ||= ask "IPA File Name:"
41
+ File.open("./#{@ipa_name}") { |fd|
42
+ upload(@ipa_name, fd)
43
+ }
44
+ end
45
+
46
+ def upload(key, fd)
47
+ begin
48
+ @bucket.objects.create(key, fd, :acl => 'public_read')
49
+ puts "\t#{@h.color('upload', :green)}\t#{key}"
50
+ rescue => exception
51
+ say_error "Error while uploading to S3: #{exception}"
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ command :'release:s3' do |c|
59
+ c.syntax = "appflight release:s3 [options]"
60
+ c.summary = "Release an iOS app file over Amazon S3"
61
+ c.description = ""
62
+
63
+ c.example '', '$ appflight release:s3 -f ./file.ipa -a accesskeyid --bucket bucket-name'
64
+
65
+ c.option '-f', '--file FILE', ".ipa file for the build"
66
+ c.option '-a', '--access-key-id ACCESS_KEY_ID', "AWS Access Key ID"
67
+ c.option '-s', '--secret-access-key SECRET_ACCESS_KEY', "AWS Secret Access Key"
68
+ c.option '-b', '--bucket BUCKET', "S3 bucket"
69
+ c.option '-r', '--region REGION', "Optional AWS region"
70
+ c.option '-d', '--destination DESTINATION', 'Destination. Defaults to the "flight" directory'
71
+
72
+ c.action do |args, options|
73
+
74
+ @access_key_id = options.access_key_id
75
+ determine_access_key_id! unless @access_key_id = options.access_key_id
76
+ say_error "Missing AWS Access Key ID" and abort unless @access_key_id
77
+
78
+ @secret_access_key = options.secret_access_key
79
+ determine_secret_access_key! unless @secret_access_key = options.secret_access_key
80
+ say_error "Missing AWS Secret Access Key" and abort unless @secret_access_key
81
+
82
+ @bucket = options.bucket
83
+ determine_bucket! unless @bucket = options.bucket
84
+ say_error "Missing bucket" and abort unless @bucket
85
+
86
+ @region = options.region
87
+ determine_region! unless @region = options.region
88
+ say_error "Missing region" and abort unless @region
89
+
90
+ @destination = options.destination || "flight"
91
+
92
+ client = AppFlight::Plugins::S3::Client.new(@access_key_id, @secret_access_key, @region)
93
+ client.upload_files({:bucket => @bucket, :create => !!options.create, :destination => @destination})
94
+ puts "Uploading .ipa file. Taking a few minutes..."
95
+ client.upload_ipa({:bucket => @bucket, :create => !!options.create, :destination => @destination})
96
+ end
97
+
98
+ private
99
+
100
+ def determine_access_key_id!
101
+ @access_key_id ||= ENV['AWS_ACCESS_KEY_ID']
102
+ @access_key_id ||= ask "Access Key ID:"
103
+ end
104
+
105
+ def determine_secret_access_key!
106
+ @secret_access_key ||= ENV['AWS_SECRET_ACCESS_KEY']
107
+ @secret_access_key ||= ask "Secret Access Key:"
108
+ end
109
+
110
+ def determine_bucket!
111
+ @bucket ||= ENV['S3_BUCKET']
112
+ @bucket ||= ask "S3 Bucket:"
113
+ end
114
+
115
+ def determine_region!
116
+ @region ||= ENV['AWS_REGION'] || ""
117
+ end
118
+ end
@@ -0,0 +1,12 @@
1
+ require_relative 'version'
2
+
3
+ module AppFlight
4
+ module Utils
5
+ def self.gem_webdir
6
+ dirs = ["#{File.dirname(File.expand_path($0))}/../web",
7
+ "#{Gem.dir}/gems/#{AppFlight::NAME}-#{AppFlight::VERSION}/web"]
8
+ dirs.each {|path| return path if Dir.exists?(path) }
9
+ raise "all paths are invalid: #{dirs}"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,4 @@
1
+ module AppFlight
2
+ NAME = 'appflight'
3
+ VERSION = '0.0.4'
4
+ end
@@ -0,0 +1,57 @@
1
+ require 'erubis'
2
+ require_relative './utils'
3
+
4
+ module AppFlight
5
+ module Web
6
+ class Page
7
+ def initialize
8
+ @context = {}
9
+ end
10
+
11
+ def render(name)
12
+ determine!
13
+ # template = "#{name}.erb"
14
+ # input = File.read("#{AppFlight::Utils.gem_webdir}/#{name}")
15
+ input = File.read("./#{name}")
16
+ eruby = Erubis::Eruby.new(input)
17
+ eruby.result(@context)
18
+ end
19
+
20
+ private
21
+
22
+ def determine!
23
+ determine_ipaname!
24
+ determine_bundleid!
25
+ determine_appname!
26
+ determine_appdesc!
27
+ determine_getdomain!
28
+ end
29
+
30
+ def determine_ipaname!
31
+ @context[:ipa_name] ||= ENV['ipa_name']
32
+ @context[:ipa_name] ||= ask "IPA File Name:"
33
+ end
34
+
35
+ def determine_bundleid!
36
+ @context[:bundle_id] ||= ENV['bundle_id']
37
+ @context[:bundle_id] ||= ask "Bundle ID:"
38
+ end
39
+
40
+ def determine_appname!
41
+ @context[:app_name] ||= ENV['app_name']
42
+ @context[:app_name] ||= ask "App Name:"
43
+ end
44
+
45
+ def determine_appdesc!
46
+ @context[:app_desc] ||= ENV['app_desc']
47
+ @context[:app_desc] ||= ask "App Description:"
48
+ end
49
+
50
+ def determine_getdomain!
51
+ @context[:get_domain] ||= ENV['get_domain']
52
+ @context[:get_domain] ||= ask "Get DomainName:"
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,31 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <html lang="en" class="yui3-js-enabled wf-omnespro-n2-active wf-omnespro-n3-active wf-proximanova-n1-active wf-proximanova-n4-active wf-proximanova-n7-active wf-active"><head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="description" content="A layout example that shows off a responsive product landing page.">
7
+ <title><%= app_name %> -- Landing Page</title>
8
+ <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.3.0/pure-min.css">
9
+ <link rel="stylesheet" href="style.css">
10
+
11
+ <div class="splash">
12
+ <div class="pure-g-r">
13
+ <div class="pure-u-1-3">
14
+ <div class="l-box splash-image">
15
+ <img src="http://placehold.it/500x350" alt="Placeholder image for example.">
16
+ </div>
17
+ </div>
18
+
19
+ <div class="pure-u-2-3">
20
+ <div class="l-box splash-text">
21
+ <h1 class="splash-head"><%= app_name %></h1>
22
+ <h2 class="splash-subhead"><%= app_desc %></h2>
23
+ <p>
24
+ <a href="itms-services://?action=download-manifest&url=http://<%= get_domain %>/plist" class="pure-button primary-button">Install</a>
25
+ </p>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </body>
31
+ </html>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>items</key>
6
+ <array>
7
+ <dict>
8
+ <key>assets</key>
9
+ <array>
10
+ <dict>
11
+ <key>kind</key>
12
+ <string>software-package</string>
13
+ <key>url</key>
14
+ <string>http://get.mathnative.com/mathnative.ipa</string>
15
+ </dict>
16
+ </array>
17
+ <key>metadata</key>
18
+ <dict>
19
+ <key>bundle-identifier</key>
20
+ <string>com.mathnative</string>
21
+ <key>bundle-version</key>
22
+ <string>1.0</string>
23
+ <key>kind</key>
24
+ <string>software</string>
25
+ <key>title</key>
26
+ <string>MathNative</string>
27
+ </dict>
28
+ </dict>
29
+ </array>
30
+ </dict>
31
+ </plist>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>items</key>
6
+ <array>
7
+ <dict>
8
+ <key>assets</key>
9
+ <array>
10
+ <dict>
11
+ <key>kind</key>
12
+ <string>software-package</string>
13
+ <key>url</key>
14
+ <string>http://<%= get_domain %>/<%= ipa_name %></string>
15
+ </dict>
16
+ </array>
17
+ <key>metadata</key>
18
+ <dict>
19
+ <key>bundle-identifier</key>
20
+ <string><%= bundle_id %></string>
21
+ <key>bundle-version</key>
22
+ <string>1.0</string>
23
+ <key>kind</key>
24
+ <string>software</string>
25
+ <key>title</key>
26
+ <string><%= app_name %></string>
27
+ </dict>
28
+ </dict>
29
+ </array>
30
+ </dict>
31
+ </plist>
@@ -0,0 +1,87 @@
1
+ * {
2
+ -webkit-box-sizing: border-box;
3
+ -moz-box-sizing: border-box;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ body {
8
+ margin: 0 auto;
9
+ line-height: 1.7em;
10
+ }
11
+
12
+ .l-box {
13
+ padding: 1em;
14
+ }
15
+
16
+ .header {
17
+ margin: 0 0;
18
+ }
19
+
20
+ .header .pure-menu {
21
+ padding: 0.5em;
22
+ }
23
+
24
+ .header .pure-menu li a:hover,
25
+ .header .pure-menu li a:focus {
26
+ background: none;
27
+ border: none;
28
+ color: #aaa;
29
+ }
30
+
31
+ body .primary-button {
32
+ background: #02a6eb;
33
+ color: #fff;
34
+ }
35
+
36
+ .splash {
37
+ margin: 2em auto 0;
38
+ padding: 3em 0.5em;
39
+ background: #eee;
40
+ }
41
+ .splash .splash-head {
42
+ font-size: 300%;
43
+ margin: 0em 0;
44
+ line-height: 1.2em;
45
+ }
46
+ .splash .splash-subhead {
47
+ color: #999;
48
+ font-weight: 300;
49
+ line-height: 1.4em;
50
+ }
51
+ .splash .primary-button {
52
+ font-size: 150%;
53
+ }
54
+
55
+
56
+ .content .content-subhead {
57
+ color: #999;
58
+ padding-bottom: 0.3em;
59
+ text-transform: uppercase;
60
+ margin: 0;
61
+ border-bottom: 2px solid #eee;
62
+ display: inline-block;
63
+ }
64
+
65
+ .content .content-ribbon {
66
+ margin: 3em;
67
+ border-bottom: 1px solid #eee;
68
+ }
69
+
70
+ .ribbon {
71
+ background: #eee;
72
+ text-align: center;
73
+ padding: 2em;
74
+ color: #999;
75
+ }
76
+ .ribbon h2 {
77
+ display: inline;
78
+ font-weight: normal;
79
+ }
80
+
81
+ .footer {
82
+ background: #111;
83
+ color: #666;
84
+ text-align: center;
85
+ padding: 1em;
86
+ font-size: 80%;
87
+ }
Binary file
@@ -0,0 +1,12 @@
1
+ ### Build Context
2
+ provision:
3
+ configure:
4
+
5
+ ### plist Context
6
+ ipa_name:
7
+ bundle_id:
8
+
9
+ ### Page Context
10
+ app_name:
11
+ app_desc:
12
+ get_domain:
@@ -0,0 +1,5 @@
1
+ ### AWS S3
2
+ AWS_ACCESS_KEY_ID:
3
+ AWS_SECRET_ACCESS_KEY:
4
+ S3_BUCKET:
5
+ AWS_REGION:
@@ -0,0 +1,20 @@
1
+ # Please copy this file to your local directory as '.env.appflight'.
2
+ #
3
+ ### AWS
4
+ AWS_ACCESS_KEY_ID:
5
+ AWS_SECRET_ACCESS_KEY:
6
+ S3_BUCKET:
7
+ AWS_REGION:
8
+
9
+ ### Build Context
10
+ provision:
11
+ configure:
12
+
13
+ ### plist Context
14
+ ipa_name:
15
+ bundle_id:
16
+
17
+ ### Page Context
18
+ app_name:
19
+ app_desc:
20
+ get_domain:
@@ -0,0 +1,32 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <html lang="en" class="yui3-js-enabled wf-omnespro-n2-active wf-omnespro-n3-active wf-proximanova-n1-active wf-proximanova-n4-active wf-proximanova-n7-active wf-active"><head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="description" content="A layout example that shows off a responsive product landing page.">
7
+ <title><%= app_name %> -- Landing Page</title>
8
+ <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.3.0/pure-min.css">
9
+ <link rel="stylesheet" href="style.css">
10
+
11
+ <div class="splash">
12
+ <div class="pure-g-r">
13
+ <div class="pure-u-1-3">
14
+ <div class="l-box splash-image">
15
+ <!-- <img src="http://placehold.it/500x350" alt="Placeholder image for example."> -->
16
+ <img src="./1.jpg" alt="sample hero image.">
17
+ </div>
18
+ </div>
19
+
20
+ <div class="pure-u-2-3">
21
+ <div class="l-box splash-text">
22
+ <h1 class="splash-head"><%= app_name %></h1>
23
+ <h2 class="splash-subhead"><%= app_desc %></h2>
24
+ <p>
25
+ <a href="itms-services://?action=download-manifest&url=http://<%= get_domain %>/plist" class="pure-button primary-button">Install</a>
26
+ </p>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </body>
32
+ </html>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>items</key>
6
+ <array>
7
+ <dict>
8
+ <key>assets</key>
9
+ <array>
10
+ <dict>
11
+ <key>kind</key>
12
+ <string>software-package</string>
13
+ <key>url</key>
14
+ <string>http://<%= get_domain %>/<%= ipa_name %></string>
15
+ </dict>
16
+ </array>
17
+ <key>metadata</key>
18
+ <dict>
19
+ <key>bundle-identifier</key>
20
+ <string><%= bundle_id %></string>
21
+ <key>bundle-version</key>
22
+ <string>1.0</string>
23
+ <key>kind</key>
24
+ <string>software</string>
25
+ <key>title</key>
26
+ <string><%= app_name %></string>
27
+ </dict>
28
+ </dict>
29
+ </array>
30
+ </dict>
31
+ </plist>
@@ -0,0 +1,87 @@
1
+ * {
2
+ -webkit-box-sizing: border-box;
3
+ -moz-box-sizing: border-box;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ body {
8
+ margin: 0 auto;
9
+ line-height: 1.7em;
10
+ }
11
+
12
+ .l-box {
13
+ padding: 1em;
14
+ }
15
+
16
+ .header {
17
+ margin: 0 0;
18
+ }
19
+
20
+ .header .pure-menu {
21
+ padding: 0.5em;
22
+ }
23
+
24
+ .header .pure-menu li a:hover,
25
+ .header .pure-menu li a:focus {
26
+ background: none;
27
+ border: none;
28
+ color: #aaa;
29
+ }
30
+
31
+ body .primary-button {
32
+ background: #02a6eb;
33
+ color: #fff;
34
+ }
35
+
36
+ .splash {
37
+ margin: 2em auto 0;
38
+ padding: 3em 0.5em;
39
+ background: #eee;
40
+ }
41
+ .splash .splash-head {
42
+ font-size: 300%;
43
+ margin: 0em 0;
44
+ line-height: 1.2em;
45
+ }
46
+ .splash .splash-subhead {
47
+ color: #999;
48
+ font-weight: 300;
49
+ line-height: 1.4em;
50
+ }
51
+ .splash .primary-button {
52
+ font-size: 150%;
53
+ }
54
+
55
+
56
+ .content .content-subhead {
57
+ color: #999;
58
+ padding-bottom: 0.3em;
59
+ text-transform: uppercase;
60
+ margin: 0;
61
+ border-bottom: 2px solid #eee;
62
+ display: inline-block;
63
+ }
64
+
65
+ .content .content-ribbon {
66
+ margin: 3em;
67
+ border-bottom: 1px solid #eee;
68
+ }
69
+
70
+ .ribbon {
71
+ background: #eee;
72
+ text-align: center;
73
+ padding: 2em;
74
+ color: #999;
75
+ }
76
+ .ribbon h2 {
77
+ display: inline;
78
+ font-weight: normal;
79
+ }
80
+
81
+ .footer {
82
+ background: #111;
83
+ color: #666;
84
+ text-align: center;
85
+ padding: 1em;
86
+ font-size: 80%;
87
+ }
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: appflight
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Masaaki Isozu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: shenzhen
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.5.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.5.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: commander
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '4.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '4.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dotenv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: aws-sdk
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: highline
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 1.6.20
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 1.6.20
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Release .ipa file on cloud storage for distribution like TestFlight.
112
+ email: m.isozu@gmail.com
113
+ executables:
114
+ - appflight
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ./appflight-0.0.3.gem
119
+ - ./appflight.gemspec
120
+ - ./env.appflight
121
+ - ./Gemfile
122
+ - ./lib/appflight/commands/build.rb
123
+ - ./lib/appflight/commands/generate.rb
124
+ - ./lib/appflight/commands/release.rb
125
+ - ./lib/appflight/commands.rb
126
+ - ./lib/appflight/plugins/s3.rb
127
+ - ./lib/appflight/utils.rb
128
+ - ./lib/appflight/version.rb
129
+ - ./lib/appflight/web.rb
130
+ - ./lib/appflight.rb
131
+ - ./LICENSE
132
+ - ./Rakefile
133
+ - ./README.md
134
+ - ./web/index.html.erb
135
+ - ./web/mathnative.plist
136
+ - ./web/plist.erb
137
+ - ./web/style.css
138
+ - ./web/template/1.jpg
139
+ - ./web/template/dot.env.app
140
+ - ./web/template/dot.env.s3
141
+ - ./web/template/env.appflight
142
+ - ./web/template/index.html.erb
143
+ - ./web/template/plist.erb
144
+ - ./web/template/style.css
145
+ - bin/appflight
146
+ homepage: https://github.com/isozu/appflight
147
+ licenses:
148
+ - MIT
149
+ metadata: {}
150
+ post_install_message:
151
+ rdoc_options: []
152
+ require_paths:
153
+ - lib
154
+ required_ruby_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ requirements: []
165
+ rubyforge_project:
166
+ rubygems_version: 2.0.3
167
+ signing_key:
168
+ specification_version: 4
169
+ summary: AppFlight
170
+ test_files: []
171
+ has_rdoc: