├── src
├── app
│ ├── home
│ │ ├── home.page.scss
│ │ ├── home.page.ts
│ │ ├── home.page.html
│ │ ├── home.module.ts
│ │ └── home.page.spec.ts
│ ├── app.component.html
│ ├── app-routing.module.ts
│ ├── app.component.ts
│ ├── app.module.ts
│ └── app.component.spec.ts
├── environments
│ ├── environment.prod.ts
│ └── environment.ts
├── assets
│ └── icon
│ │ └── favicon.png
├── tsconfig.app.json
├── tsconfig.spec.json
├── main.ts
├── global.scss
├── test.ts
├── index.html
├── karma.conf.js
├── theme
│ └── variables.scss
└── polyfills.ts
├── .prettierrc
├── fastlane-plugin-fivethree_ionic
├── fastlane
│ ├── Pluginfile
│ ├── android
│ │ ├── release-signing.properties
│ │ └── pizza.keystore
│ └── Fastfile
├── .travis.yml
├── .rspec
├── lib
│ └── fastlane
│ │ └── plugin
│ │ ├── fivethree_ionic
│ │ ├── version.rb
│ │ ├── helper
│ │ │ └── fivethree_ionic_helper.rb
│ │ └── actions
│ │ │ ├── fiv_bump_version.rb
│ │ │ ├── fiv_build_ionic_android.rb
│ │ │ ├── fiv_take_screenshots.rb
│ │ │ ├── fiv_select_client.rb
│ │ │ ├── fiv_update_version_and_build_no.rb
│ │ │ ├── fiv_select_clients.rb
│ │ │ ├── fiv_update_version.rb
│ │ │ ├── fiv_increment_build_no.rb
│ │ │ ├── fiv_clean_install.rb
│ │ │ ├── fiv_select_env.rb
│ │ │ ├── fiv_add_transparent_statusbar.rb
│ │ │ ├── fiv_version.rb
│ │ │ ├── fiv_android_keystore.rb
│ │ │ ├── fiv_sign_android.rb
│ │ │ └── fiv_ionic.rb
│ │ └── fivethree_ionic.rb
├── Gemfile
├── .gitignore
├── Rakefile
├── spec
│ ├── fivethree_ionic_action_spec.rb
│ └── spec_helper.rb
├── LICENSE
├── .circleci
│ └── config.yml
├── fastlane-plugin-fivethree_ionic.gemspec
├── README.md
└── .rubocop.yml
├── fastlane
├── Matchfile
├── Pluginfile
├── Appfile
├── Gymfile
├── README.md
├── Fastfile
└── Preview.html
├── .assets
└── banner.png
├── resources
├── icon.png
├── splash.png
├── ios
│ ├── icon
│ │ ├── icon.png
│ │ ├── icon-40.png
│ │ ├── icon-50.png
│ │ ├── icon-60.png
│ │ ├── icon-72.png
│ │ ├── icon-76.png
│ │ ├── icon@2x.png
│ │ ├── icon-1024.png
│ │ ├── icon-40@2x.png
│ │ ├── icon-40@3x.png
│ │ ├── icon-50@2x.png
│ │ ├── icon-60@2x.png
│ │ ├── icon-60@3x.png
│ │ ├── icon-72@2x.png
│ │ ├── icon-76@2x.png
│ │ ├── icon-small.png
│ │ ├── icon-83.5@2x.png
│ │ ├── icon-small@2x.png
│ │ └── icon-small@3x.png
│ └── splash
│ │ ├── Default-667h.png
│ │ ├── Default-736h.png
│ │ ├── Default~iphone.png
│ │ ├── Default@2x~iphone.png
│ │ ├── Default-568h@2x~iphone.png
│ │ ├── Default-Landscape-736h.png
│ │ ├── Default-Landscape~ipad.png
│ │ ├── Default-Portrait~ipad.png
│ │ ├── Default-Landscape@2x~ipad.png
│ │ ├── Default-Portrait@2x~ipad.png
│ │ ├── Default-Portrait@~ipadpro.png
│ │ ├── Default-Landscape@~ipadpro.png
│ │ └── Default@2x~universal~anyany.png
├── android
│ ├── icon
│ │ ├── drawable-hdpi-icon.png
│ │ ├── drawable-ldpi-icon.png
│ │ ├── drawable-mdpi-icon.png
│ │ ├── drawable-xhdpi-icon.png
│ │ ├── drawable-xxhdpi-icon.png
│ │ └── drawable-xxxhdpi-icon.png
│ └── splash
│ │ ├── drawable-land-hdpi-screen.png
│ │ ├── drawable-land-ldpi-screen.png
│ │ ├── drawable-land-mdpi-screen.png
│ │ ├── drawable-land-xhdpi-screen.png
│ │ ├── drawable-port-hdpi-screen.png
│ │ ├── drawable-port-ldpi-screen.png
│ │ ├── drawable-port-mdpi-screen.png
│ │ ├── drawable-port-xhdpi-screen.png
│ │ ├── drawable-land-xxhdpi-screen.png
│ │ ├── drawable-land-xxxhdpi-screen.png
│ │ ├── drawable-port-xxhdpi-screen.png
│ │ └── drawable-port-xxxhdpi-screen.png
└── README.md
├── .android_signing
└── fivethree.keystore
├── ionic.config.json
├── Gemfile
├── e2e
├── tsconfig.e2e.json
├── src
│ ├── app.po.ts
│ └── app.e2e-spec.ts
└── protractor.conf.js
├── tsconfig.json
├── .editorconfig
├── .gitignore
├── LICENSE
├── package.json
├── tslint.json
├── Gemfile.lock
├── angular.json
├── config.xml
└── README.md
/src/app/home/home.page.scss:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true
3 | }
4 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/fastlane/Pluginfile:
--------------------------------------------------------------------------------
1 | # Autogenerated by fastlane
2 |
--------------------------------------------------------------------------------
/fastlane/Matchfile:
--------------------------------------------------------------------------------
1 |
2 | git_url "https://bitbucket.org/fivethree/fastlane-certs"
3 | type "appstore",
--------------------------------------------------------------------------------
/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true
3 | };
4 |
--------------------------------------------------------------------------------
/.assets/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/.assets/banner.png
--------------------------------------------------------------------------------
/resources/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/icon.png
--------------------------------------------------------------------------------
/resources/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/splash.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon.png
--------------------------------------------------------------------------------
/src/assets/icon/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/src/assets/icon/favicon.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-40.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-50.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-60.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-72.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-76.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-1024.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-40@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-40@3x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-50@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-60@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-60@3x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-72@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-76@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-small.png
--------------------------------------------------------------------------------
/.android_signing/fivethree.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/.android_signing/fivethree.keystore
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/.travis.yml:
--------------------------------------------------------------------------------
1 | # os: osx # enable this if you need macOS support
2 | language: ruby
3 | rvm:
4 | - 2.2.4
5 |
--------------------------------------------------------------------------------
/ionic.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fivethree-fastlane",
3 | "integrations": {
4 | "cordova": {}
5 | },
6 | "type": "angular"
7 | }
--------------------------------------------------------------------------------
/resources/ios/icon/icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-83.5@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-small@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-small@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/icon/icon-small@3x.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-667h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-667h.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-736h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-736h.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default~iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default~iphone.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default@2x~iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default@2x~iphone.png
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/.rspec:
--------------------------------------------------------------------------------
1 | --require spec_helper
2 | --color
3 | --format d
4 | --format RspecJunitFormatter
5 | --out test-results/rspec/rspec.xml
6 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/fastlane/android/release-signing.properties:
--------------------------------------------------------------------------------
1 | storeFile=pizza
2 | storePassword=123456
3 | keyAlias=pizza
4 | keyPassword=123456
5 |
--------------------------------------------------------------------------------
/resources/android/icon/drawable-hdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/icon/drawable-hdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-ldpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/icon/drawable-ldpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-mdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/icon/drawable-mdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-xhdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/icon/drawable-xhdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-xxhdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/icon/drawable-xxhdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-xxxhdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/icon/drawable-xxxhdpi-icon.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-568h@2x~iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-568h@2x~iphone.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape-736h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-Landscape-736h.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-Landscape~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Portrait~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-Portrait~ipad.png
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/version.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module FivethreeIonic
3 | VERSION = '0.2.9'
4 | end
5 | end
6 |
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape@2x~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-Landscape@2x~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Portrait@2x~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-Portrait@2x~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Portrait@~ipadpro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-Portrait@~ipadpro.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape@~ipadpro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default-Landscape@~ipadpro.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default@2x~universal~anyany.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/ios/splash/Default@2x~universal~anyany.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-hdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-land-hdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-ldpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-land-ldpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-mdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-land-mdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-xhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-land-xhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-hdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-port-hdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-ldpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-port-ldpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-mdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-port-mdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-xhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-port-xhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-xxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-land-xxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-xxxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-land-xxxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-xxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-port-xxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-xxxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/resources/android/splash/drawable-port-xxxhdpi-screen.png
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/fastlane/android/pizza.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fivethree-team/ionic-fastlane-plugin/HEAD/fastlane-plugin-fivethree_ionic/fastlane/android/pizza.keystore
--------------------------------------------------------------------------------
/fastlane/Pluginfile:
--------------------------------------------------------------------------------
1 | # Autogenerated by fastlane
2 | #
3 | # Ensure this file is checked in to source control!
4 |
5 | gem 'fastlane-plugin-fivethree_ionic', path: '../fastlane-plugin-fivethree_ionic'
6 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 | gem "net-scp"
5 |
6 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
7 | eval_gemfile(plugins_path) if File.exist?(plugins_path)
8 |
--------------------------------------------------------------------------------
/e2e/tsconfig.e2e.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/e2e",
5 | "baseUrl": "./",
6 | "module": "commonjs",
7 | "target": "es5"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/Gemfile:
--------------------------------------------------------------------------------
1 | source('https://rubygems.org')
2 |
3 | gemspec
4 |
5 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
6 | eval_gemfile(plugins_path) if File.exist?(plugins_path)
7 |
--------------------------------------------------------------------------------
/src/app/home/home.page.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-home',
5 | templateUrl: 'home.page.html',
6 | styleUrls: ['home.page.scss'],
7 | })
8 | export class HomePage {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/.gitignore:
--------------------------------------------------------------------------------
1 | *.gem
2 | Gemfile.lock
3 |
4 | ## Documentation cache and generated files:
5 | /.yardoc/
6 | /_yardoc/
7 | /doc/
8 | /rdoc/
9 | fastlane/README.md
10 | fastlane/report.xml
11 | coverage
12 | test-results
13 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/Rakefile:
--------------------------------------------------------------------------------
1 | require 'bundler/gem_tasks'
2 |
3 | require 'rspec/core/rake_task'
4 | RSpec::Core::RakeTask.new
5 |
6 | require 'rubocop/rake_task'
7 | RuboCop::RakeTask.new(:rubocop)
8 |
9 | task(default: [:spec, :rubocop])
10 |
--------------------------------------------------------------------------------
/src/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/app",
5 | "baseUrl": "./",
6 | "module": "es2015"
7 | },
8 | "exclude": [
9 | "test.ts",
10 | "**/*.spec.ts"
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/e2e/src/app.po.ts:
--------------------------------------------------------------------------------
1 | import { browser, by, element } from 'protractor';
2 |
3 | export class AppPage {
4 | navigateTo() {
5 | return browser.get('/');
6 | }
7 |
8 | getParagraphText() {
9 | return element(by.deepCss('app-root ion-content')).getText();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/e2e/src/app.e2e-spec.ts:
--------------------------------------------------------------------------------
1 | import { AppPage } from './app.po';
2 |
3 | describe('new App', () => {
4 | let page: AppPage;
5 |
6 | beforeEach(() => {
7 | page = new AppPage();
8 | });
9 |
10 | it('should display welcome message', () => {
11 | page.navigateTo();
12 | expect(page.getParagraphText()).toContain('The world is your oyster.');
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/src/app/home/home.page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Ionic Blank
5 |
6 |
7 |
8 |
9 |
10 | The world is your oyster.
11 | If you get lost, the docs will be your guide.
12 |
13 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "outDir": "./dist/out-tsc",
5 | "sourceMap": true,
6 | "declaration": false,
7 | "moduleResolution": "node",
8 | "emitDecoratorMetadata": true,
9 | "experimentalDecorators": true,
10 | "target": "es5",
11 | "lib": [
12 | "es2017",
13 | "dom"
14 | ]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/spec/fivethree_ionic_action_spec.rb:
--------------------------------------------------------------------------------
1 | describe Fastlane::Actions::FivethreeIonicAction do
2 | describe '#run' do
3 | it 'prints a message' do
4 | expect(Fastlane::UI).to receive(:message).with(
5 | 'The fivethree_ionic plugin is working!'
6 | )
7 |
8 | Fastlane::Actions::FivethreeIonicAction.run(nil)
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | # app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
2 | # apple_id("[[APPLE_ID]]") # Your Apple email address
3 |
4 |
5 | # For more information about the Appfile, see:
6 | # https://docs.fastlane.tools/advanced/#appfile
7 | app_identifier "de.fivethree.fastlane"
8 | apple_id "gary.grossgarten@gmail.com"
9 | team_id "2K6ELPY322"
10 | itc_team_id "119091779"
11 |
--------------------------------------------------------------------------------
/src/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/spec",
5 | "baseUrl": "./",
6 | "module": "commonjs",
7 | "types": [
8 | "jasmine",
9 | "node"
10 | ]
11 | },
12 | "files": [
13 | "test.ts"
14 | ],
15 | "include": [
16 | "polyfills.ts",
17 | "**/*.spec.ts",
18 | "**/*.d.ts"
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/fastlane/Gymfile:
--------------------------------------------------------------------------------
1 | # For more information about this configuration visit
2 | # https://docs.fastlane.tools/actions/gym/#gymfile
3 |
4 | # In general, you can use the options available
5 | # fastlane gym --help
6 |
7 | # Remove the # in front of the line to enable the option
8 |
9 | scheme("fivethree-fastlane")
10 | clean(true)
11 | project("platforms/ios/fivethree-fastlane.xcodeproj")
12 | output_directory("./output/")
13 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic().bootstrapModule(AppModule)
12 | .catch(err => console.log(err));
13 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs
2 | # editorconfig.org
3 |
4 | root = true
5 |
6 | [*]
7 | indent_style = space
8 | indent_size = 2
9 |
10 | # We recommend you to keep these unchanged
11 | end_of_line = lf
12 | charset = utf-8
13 | trim_trailing_whitespace = true
14 | insert_final_newline = true
15 |
16 | [*.md]
17 | trim_trailing_whitespace = false
--------------------------------------------------------------------------------
/src/app/app-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | const routes: Routes = [
5 | { path: '', redirectTo: 'home', pathMatch: 'full' },
6 | { path: 'home', loadChildren: './home/home.module#HomePageModule' },
7 | ];
8 |
9 | @NgModule({
10 | imports: [RouterModule.forRoot(routes)],
11 | exports: [RouterModule]
12 | })
13 | export class AppRoutingModule { }
14 |
--------------------------------------------------------------------------------
/resources/README.md:
--------------------------------------------------------------------------------
1 | These are Cordova resources. You can replace icon.png and splash.png and run
2 | `ionic cordova resources` to generate custom icons and splash screens for your
3 | app. See `ionic cordova resources --help` for details.
4 |
5 | Cordova reference documentation:
6 |
7 | - Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html
8 | - Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/
9 |
--------------------------------------------------------------------------------
/src/global.scss:
--------------------------------------------------------------------------------
1 | // http://ionicframework.com/docs/theming/
2 | @import "~@ionic/angular/css/normalize.css";
3 | @import "~@ionic/angular/css/structure.css";
4 | @import "~@ionic/angular/css/typography.css";
5 | @import "~@ionic/angular/css/colors.css";
6 |
7 | @import "~@ionic/angular/css/padding.css";
8 | @import "~@ionic/angular/css/float-elements.css";
9 | @import "~@ionic/angular/css/text-alignment.css";
10 | @import "~@ionic/angular/css/text-transformation.css";
11 | @import "~@ionic/angular/css/flex-utils.css";
12 |
13 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/spec/spec_helper.rb:
--------------------------------------------------------------------------------
1 | $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
2 |
3 | require 'simplecov'
4 |
5 | # SimpleCov.minimum_coverage 95
6 | SimpleCov.start
7 |
8 | # This module is only used to check the environment is currently a testing env
9 | module SpecHelper; end
10 |
11 | require 'fastlane' # to import the Action super class
12 | require 'fastlane/plugin/fivethree_ionic' # import the actual plugin
13 |
14 | Fastlane.load_actions # load other actions (in case your plugin calls other actions or shared values)
15 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/helper/fivethree_ionic_helper.rb:
--------------------------------------------------------------------------------
1 | require 'fastlane_core/ui/ui'
2 |
3 | module Fastlane
4 | UI = FastlaneCore::UI unless Fastlane.const_defined?('UI')
5 |
6 | module Helper
7 | class FivethreeIonicHelper
8 | # class methods that you define here become available in your action
9 | # as `Helper::FivethreeIonicHelper.your_method`
10 | #
11 | def self.show_message
12 | UI.message('Hello from the fivethree_ionic plugin helper!')
13 | end
14 | end
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic.rb:
--------------------------------------------------------------------------------
1 | require 'fastlane/plugin/fivethree_ionic/version'
2 |
3 | module Fastlane
4 | module FivethreeIonic
5 | # Return all .rb files inside the "actions" and "helper" directory
6 | def self.all_classes
7 | Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))]
8 | end
9 | end
10 | end
11 |
12 | # By default we want to import all available actions and helpers
13 | # A plugin can contain any number of actions and plugins
14 | Fastlane::FivethreeIonic.all_classes.each { |current| require current }
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Specifies intentionally untracked files to ignore when using Git
2 | # http://git-scm.com/docs/gitignore
3 |
4 | *~
5 | *.sw[mnpcod]
6 | *.log
7 | *.tmp
8 | *.tmp.*
9 | log.txt
10 | *.sublime-project
11 | *.sublime-workspace
12 | .vscode/
13 | npm-debug.log*
14 |
15 | .idea/
16 | .ionic/
17 | .sourcemaps/
18 | .sass-cache/
19 | .tmp/
20 | .versions/
21 | coverage/
22 | www/
23 | node_modules/
24 | tmp/
25 | temp/
26 | platforms/
27 | plugins/
28 | plugins/android.json
29 | plugins/ios.json
30 | $RECYCLE.BIN/
31 |
32 | .DS_Store
33 | Thumbs.db
34 | UserInterfaceState.xcuserstate
35 | fastlane/report.xml
--------------------------------------------------------------------------------
/src/app/home/home.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { IonicModule } from '@ionic/angular';
4 | import { FormsModule } from '@angular/forms';
5 | import { RouterModule } from '@angular/router';
6 |
7 | import { HomePage } from './home.page';
8 |
9 | @NgModule({
10 | imports: [
11 | CommonModule,
12 | FormsModule,
13 | IonicModule,
14 | RouterModule.forChild([
15 | {
16 | path: '',
17 | component: HomePage
18 | }
19 | ])
20 | ],
21 | declarations: [HomePage]
22 | })
23 | export class HomePageModule {}
24 |
--------------------------------------------------------------------------------
/src/test.ts:
--------------------------------------------------------------------------------
1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2 |
3 | import 'zone.js/dist/zone-testing';
4 | import { getTestBed } from '@angular/core/testing';
5 | import {
6 | BrowserDynamicTestingModule,
7 | platformBrowserDynamicTesting
8 | } from '@angular/platform-browser-dynamic/testing';
9 |
10 | declare const require: any;
11 |
12 | // First, initialize the Angular testing environment.
13 | getTestBed().initTestEnvironment(
14 | BrowserDynamicTestingModule,
15 | platformBrowserDynamicTesting()
16 | );
17 | // Then we find all the tests.
18 | const context = require.context('./', true, /\.spec\.ts$/);
19 | // And load the modules.
20 | context.keys().map(context);
21 |
--------------------------------------------------------------------------------
/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | import { Platform } from '@ionic/angular';
4 | import { SplashScreen } from '@ionic-native/splash-screen/ngx';
5 | import { StatusBar } from '@ionic-native/status-bar/ngx';
6 |
7 | @Component({
8 | selector: 'app-root',
9 | templateUrl: 'app.component.html'
10 | })
11 | export class AppComponent {
12 | constructor(
13 | private platform: Platform,
14 | private splashScreen: SplashScreen,
15 | private statusBar: StatusBar
16 | ) {
17 | this.initializeApp();
18 | }
19 |
20 | initializeApp() {
21 | this.platform.ready().then(() => {
22 | this.statusBar.styleDefault();
23 | this.splashScreen.hide();
24 | });
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Ionic App
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/app/home/home.page.spec.ts:
--------------------------------------------------------------------------------
1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
3 |
4 | import { HomePage } from './home.page';
5 |
6 | describe('HomePage', () => {
7 | let component: HomePage;
8 | let fixture: ComponentFixture;
9 |
10 | beforeEach(async(() => {
11 | TestBed.configureTestingModule({
12 | declarations: [ HomePage ],
13 | schemas: [CUSTOM_ELEMENTS_SCHEMA],
14 | })
15 | .compileComponents();
16 | }));
17 |
18 | beforeEach(() => {
19 | fixture = TestBed.createComponent(HomePage);
20 | component = fixture.componentInstance;
21 | fixture.detectChanges();
22 | });
23 |
24 | it('should create', () => {
25 | expect(component).toBeTruthy();
26 | });
27 | });
28 |
--------------------------------------------------------------------------------
/src/environments/environment.ts:
--------------------------------------------------------------------------------
1 | // The file contents for the current environment will overwrite these during build.
2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do
3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead.
4 | // The list of which env maps to which file can be found in `.angular-cli.json`.
5 | export const environment = {
6 | production: false
7 | };
8 |
9 | /*
10 | * In development mode, to ignore zone related error stack frames such as
11 | * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can
12 | * import the following file, but please comment it out in production mode
13 | * because it will have performance impact when throw error
14 | */
15 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI.
16 |
--------------------------------------------------------------------------------
/e2e/protractor.conf.js:
--------------------------------------------------------------------------------
1 | // Protractor configuration file, see link for more information
2 | // https://github.com/angular/protractor/blob/master/lib/config.ts
3 |
4 | const { SpecReporter } = require('jasmine-spec-reporter');
5 |
6 | exports.config = {
7 | allScriptsTimeout: 11000,
8 | specs: [
9 | './src/**/*.e2e-spec.ts'
10 | ],
11 | capabilities: {
12 | 'browserName': 'chrome'
13 | },
14 | directConnect: true,
15 | baseUrl: 'http://localhost:4200/',
16 | framework: 'jasmine',
17 | jasmineNodeOpts: {
18 | showColors: true,
19 | defaultTimeoutInterval: 30000,
20 | print: function() {}
21 | },
22 | onPrepare() {
23 | require('ts-node').register({
24 | project: 'e2e/tsconfig.e2e.json'
25 | });
26 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { BrowserModule } from '@angular/platform-browser';
3 | import { RouterModule, RouteReuseStrategy, Routes } from '@angular/router';
4 |
5 | import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
6 | import { SplashScreen } from '@ionic-native/splash-screen/ngx';
7 | import { StatusBar } from '@ionic-native/status-bar/ngx';
8 |
9 | import { AppComponent } from './app.component';
10 | import { AppRoutingModule } from './app-routing.module';
11 |
12 | @NgModule({
13 | declarations: [AppComponent],
14 | entryComponents: [],
15 | imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
16 | providers: [
17 | StatusBar,
18 | SplashScreen,
19 | { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
20 | ],
21 | bootstrap: [AppComponent]
22 | })
23 | export class AppModule {}
24 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/fastlane/Fastfile:
--------------------------------------------------------------------------------
1 | before_all do |lane, options|
2 | ENV['CLIENT'] = options[:client]
3 | ENV['ENV'] = options[:env]
4 | end
5 |
6 | lane :select_client do |options|
7 | client = fiv_select_client
8 |
9 | puts("This client is selected #{client}")
10 | end
11 |
12 | lane :select_clients do |options|
13 | clients = fiv_select_clients
14 |
15 | puts("These clients are selected #{clients}")
16 | end
17 |
18 | lane :select_client_env do |options|
19 | client = fiv_select_client
20 | env = fiv_select_env(client: client)
21 |
22 | puts("This client #{client} and environment #{env} is selected")
23 | end
24 |
25 | lane :sign_android_apk do |options|
26 | # run ionic cordova build android --prod --release
27 | apk_path =
28 | fiv_sign_android(
29 | keystore_name: 'pizza',
30 | key_alias: 'pizza',
31 | app_version: '1.0.1',
32 | app_build_no: '2020',
33 | apk_signed_target: './apk'
34 | )
35 | end
36 |
37 | lane :version do |options|
38 | fiv_version(ios: true, pathToConfigXML: './../config.xml')
39 | end
40 |
--------------------------------------------------------------------------------
/src/karma.conf.js:
--------------------------------------------------------------------------------
1 | // Karma configuration file, see link for more information
2 | // https://karma-runner.github.io/1.0/config/configuration-file.html
3 |
4 | module.exports = function (config) {
5 | config.set({
6 | basePath: '',
7 | frameworks: ['jasmine', '@angular-devkit/build-angular'],
8 | plugins: [
9 | require('karma-jasmine'),
10 | require('karma-chrome-launcher'),
11 | require('karma-jasmine-html-reporter'),
12 | require('karma-coverage-istanbul-reporter'),
13 | require('@angular-devkit/build-angular/plugins/karma')
14 | ],
15 | client: {
16 | clearContext: false // leave Jasmine Spec Runner output visible in browser
17 | },
18 | coverageIstanbulReporter: {
19 | dir: require('path').join(__dirname, 'coverage'),
20 | reports: ['html', 'lcovonly'],
21 | fixWebpackSourcePaths: true
22 | },
23 | reporters: ['progress', 'kjhtml'],
24 | port: 9876,
25 | colors: true,
26 | logLevel: config.LOG_INFO,
27 | autoWatch: true,
28 | browsers: ['Chrome'],
29 | singleRun: false
30 | });
31 | };
32 |
--------------------------------------------------------------------------------
/fastlane/README.md:
--------------------------------------------------------------------------------
1 | fastlane documentation
2 | ================
3 | # Installation
4 |
5 | Make sure you have the latest version of the Xcode command line tools installed:
6 |
7 | ```
8 | xcode-select --install
9 | ```
10 |
11 | Install _fastlane_ using
12 | ```
13 | [sudo] gem install fastlane -NV
14 | ```
15 | or alternatively using `brew cask install fastlane`
16 |
17 | # Available Actions
18 | ### fiv_test
19 | ```
20 | fastlane fiv_test
21 | ```
22 | Test lane for action development
23 |
24 | ----
25 |
26 | ## iOS
27 | ### ios fiv_testflight
28 | ```
29 | fastlane ios fiv_testflight
30 | ```
31 | Build and release a test version to testflight
32 |
33 | ----
34 |
35 | ## Android
36 | ### android fiv_alpha
37 | ```
38 | fastlane android fiv_alpha
39 | ```
40 | Build and release a test version to testflight
41 |
42 | ----
43 |
44 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.
45 | More information about fastlane can be found on [fastlane.tools](https://fastlane.tools).
46 | The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
47 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Fivethree (Gary Großgarten, Marc Stammerjohann)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, 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,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2018 Gary Großgarten, Marc Stammerjohann
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, 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,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | # Ruby CircleCI 2.0 configuration file
2 | #
3 | # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4 | #
5 | version: 2
6 | jobs:
7 | build:
8 | docker:
9 | # specify the version you desire here
10 | - image: circleci/ruby:2.4.2
11 |
12 | working_directory: ~/repo
13 |
14 | steps:
15 | - checkout
16 |
17 | # Download and cache dependencies
18 | - restore_cache:
19 | keys:
20 | - v1-dependencies-{{ checksum "Gemfile" }}
21 | # fallback to using the latest cache if no exact match is found
22 | - v1-dependencies-
23 |
24 | - run:
25 | name: install dependencies
26 | command: bundle check || bundle install --jobs=4 --retry=3 --path vendor/bundle
27 |
28 | - save_cache:
29 | paths:
30 | - ./vendor
31 | key: v1-dependencies-{{ checksum "Gemfile" }}
32 |
33 | # run tests!
34 | - run:
35 | name: run tests
36 | command: bundle exec rake
37 |
38 | # collect reports
39 | - store_test_results:
40 | path: ~/repo/test-results
41 | - store_artifacts:
42 | path: ~/repo/test-results
43 | destination: test-results
44 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/fastlane-plugin-fivethree_ionic.gemspec:
--------------------------------------------------------------------------------
1 | # coding: utf-8
2 |
3 | lib = File.expand_path("../lib", __FILE__)
4 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5 | require 'fastlane/plugin/fivethree_ionic/version'
6 |
7 | Gem::Specification.new do |spec|
8 | spec.name = 'fastlane-plugin-fivethree_ionic'
9 | spec.version = Fastlane::FivethreeIonic::VERSION
10 | spec.author = 'Marc Stammerjohann'
11 | spec.email = 'marc@fivethree.io'
12 |
13 | spec.summary = 'Fastlane plugin for Ionic v4 Projects'
14 | # spec.homepage = "https://github.com//fastlane-plugin-fivethree_ionic"
15 | spec.license = "MIT"
16 |
17 | spec.files = Dir["lib/**/*"] + %w(README.md LICENSE)
18 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19 | spec.require_paths = ['lib']
20 |
21 | # Don't add a dependency to fastlane or fastlane_re
22 | # since this would cause a circular dependency
23 |
24 | # spec.add_dependency 'your-dependency', '~> 1.0.0'
25 |
26 | spec.add_development_dependency('pry')
27 | spec.add_development_dependency('bundler')
28 | spec.add_development_dependency('rspec')
29 | spec.add_development_dependency('rspec_junit_formatter')
30 | spec.add_development_dependency('rake')
31 | spec.add_development_dependency('rubocop', '0.49.1')
32 | spec.add_development_dependency('rubocop-require_tools')
33 | spec.add_development_dependency('simplecov')
34 | spec.add_development_dependency('fastlane', '>= 2.102.0')
35 | end
36 |
--------------------------------------------------------------------------------
/fastlane/Fastfile:
--------------------------------------------------------------------------------
1 |
2 | update_fastlane
3 |
4 | default_platform(:ios)
5 |
6 | platform :ios do
7 |
8 | desc "Build and release a test version to testflight"
9 | lane :fiv_testflight do
10 |
11 | # ensure_git_status_clean
12 | match
13 | version_and_build_no = fiv_version(
14 | ios: true,
15 | pathToConfigXML: "./config.xml"
16 | )
17 |
18 | fiv_ionic(
19 | platform: 'ios',
20 | release: true
21 | )
22 | automatic_code_signing(
23 | path: "platforms/ios/fivethree-fastlane.xcodeproj",
24 | use_automatic_signing: false,
25 | team_id: "2K6ELPY322"
26 | )
27 | gym
28 | pilot
29 | end
30 | end
31 |
32 | platform :android do
33 |
34 | desc "Build and release a test version to testflight"
35 | lane :fiv_alpha do
36 | fiv_update_version_and_build_no(
37 | ios: false,
38 | pathToConfigXML: "./config.xml"
39 | )
40 | ionic(
41 | platform: 'android',
42 | release: true
43 | )
44 | end
45 | end
46 |
47 |
48 | desc "Test lane for action development"
49 | lane :fiv_test do
50 |
51 | # pathToSignedAPK = fiv_sign_android(
52 | # version: "1.0.0",
53 | # build_no: "1001"
54 | # )
55 |
56 | # puts "path to signed apk: #{pathToSignedAPK}"
57 |
58 | puts "enter scp password:"
59 | keychain_entry = CredentialsManager::AccountManager.new(user: "immo_app_scp_client")
60 | scp_pw = keychain_entry.password
61 | scp(
62 | host: "d167.x-mailer.de",
63 | username: "immoappde",
64 | password: scp_pw,
65 | upload: {
66 | src: "./www",
67 | dst: "/httpdocs/demo"
68 | }
69 | )
70 |
71 |
72 |
73 |
74 | end
75 |
--------------------------------------------------------------------------------
/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2 | import { TestBed, async } from '@angular/core/testing';
3 |
4 | import { Platform } from '@ionic/angular';
5 | import { SplashScreen } from '@ionic-native/splash-screen/ngx';
6 | import { StatusBar } from '@ionic-native/status-bar/ngx';
7 |
8 | import { AppComponent } from './app.component';
9 |
10 | describe('AppComponent', () => {
11 |
12 | let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy;
13 |
14 | beforeEach(async(() => {
15 | statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']);
16 | splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']);
17 | platformReadySpy = Promise.resolve();
18 | platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy });
19 |
20 | TestBed.configureTestingModule({
21 | declarations: [AppComponent],
22 | schemas: [CUSTOM_ELEMENTS_SCHEMA],
23 | providers: [
24 | { provide: StatusBar, useValue: statusBarSpy },
25 | { provide: SplashScreen, useValue: splashScreenSpy },
26 | { provide: Platform, useValue: platformSpy },
27 | ],
28 | }).compileComponents();
29 | }));
30 |
31 | it('should create the app', () => {
32 | const fixture = TestBed.createComponent(AppComponent);
33 | const app = fixture.debugElement.componentInstance;
34 | expect(app).toBeTruthy();
35 | });
36 |
37 | it('should initialize the app', async () => {
38 | TestBed.createComponent(AppComponent);
39 | expect(platformSpy.ready).toHaveBeenCalled();
40 | await platformReadySpy;
41 | expect(statusBarSpy.styleDefault).toHaveBeenCalled();
42 | expect(splashScreenSpy.hide).toHaveBeenCalled();
43 | });
44 |
45 | // TODO: add more tests!
46 |
47 | });
48 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_bump_version.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | module SharedValues
4 | FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE =
5 | :FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE
6 | end
7 |
8 | class FivBumpVersionAction < Action
9 | def self.run(params)
10 | sh 'git add config.xml'
11 | sh "git commit -m \"#{params[:message]}\""
12 | end
13 |
14 | #####################################################
15 | # @!group Documentation
16 | #####################################################
17 |
18 | def self.description
19 | 'A short description with <= 80 characters of what this action does'
20 | end
21 |
22 | def self.details
23 | # Optional:
24 | # this is your chance to provide a more detailed description of this action
25 | 'You can use this action to do cool things...'
26 | end
27 |
28 | def self.available_options
29 | # Define all options your action supports.
30 |
31 | # Below a few examples
32 | [
33 | FastlaneCore::ConfigItem.new(
34 | key: :message,
35 | env_name: 'FIV_BUILD_IONIC_ANDROID_IS_PROD',
36 | description: 'Dev or Prod build',
37 | optional: false,
38 | type: String
39 | )
40 | ]
41 | end
42 |
43 | def self.output
44 | # Define the shared values you are going to provide
45 | # Example
46 | [
47 | [
48 | 'FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE',
49 | 'A description of what this value contains'
50 | ]
51 | ]
52 | end
53 |
54 | def self.return_value
55 | # If your method provides a return value, you can describe here what it does
56 | end
57 |
58 | def self.authors
59 | # So no one will ever forget your contribution to fastlane :) You are awesome btw!
60 | ['Your GitHub/Twitter Name']
61 | end
62 |
63 | def self.is_supported?(platform)
64 | platform == :android
65 | end
66 | end
67 | end
68 | end
69 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_build_ionic_android.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | module SharedValues
4 | FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE =
5 | :FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE
6 | end
7 |
8 | class FivBuildIonicAndroidAction < Action
9 | def self.run(params)
10 | isProd = params[:isProd]
11 | if (isProd)
12 | sh 'ionic cordova build android --prod'
13 | else
14 | sh 'ionic cordova build android'
15 | end
16 | end
17 |
18 | #####################################################
19 | # @!group Documentation
20 | #####################################################
21 |
22 | def self.description
23 | 'A short description with <= 80 characters of what this action does'
24 | end
25 |
26 | def self.details
27 | # Optional:
28 | # this is your chance to provide a more detailed description of this action
29 | 'You can use this action to do cool things...'
30 | end
31 |
32 | def self.available_options
33 | # Define all options your action supports.
34 |
35 | # Below a few examples
36 | [
37 | FastlaneCore::ConfigItem.new(
38 | key: :isProd,
39 | env_name: 'FIV_BUILD_IONIC_ANDROID_IS_PROD',
40 | description: 'Dev or Prod build',
41 | optional: false,
42 | type: Boolean
43 | )
44 | ]
45 | end
46 |
47 | def self.output
48 | # Define the shared values you are going to provide
49 | # Example
50 | [
51 | [
52 | 'FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE',
53 | 'A description of what this value contains'
54 | ]
55 | ]
56 | end
57 |
58 | def self.return_value
59 | # If your method provides a return value, you can describe here what it does
60 | end
61 |
62 | def self.authors
63 | # So no one will ever forget your contribution to fastlane :) You are awesome btw!
64 | ['Your GitHub/Twitter Name']
65 | end
66 |
67 | def self.is_supported?(platform)
68 | platform == :android
69 | end
70 | end
71 | end
72 | end
73 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/README.md:
--------------------------------------------------------------------------------
1 | # fivethree_ionic plugin
2 |
3 | [](https://rubygems.org/gems/fastlane-plugin-fivethree_ionic)
4 |
5 | ## Getting Started
6 |
7 | This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-fivethree_ionic`, add it to your project by running:
8 |
9 | ```bash
10 | fastlane add_plugin fivethree_ionic
11 | ```
12 |
13 | ## About fivethree_ionic
14 |
15 | Fastlane plugin for Ionic v4 Projects
16 |
17 | **Note to author:** Add a more detailed description about this plugin here. If your plugin contains multiple actions, make sure to mention them here.
18 |
19 | ## Example
20 |
21 | Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane test`.
22 |
23 | **Note to author:** Please set up a sample project to make it easy for users to explore what your plugin does. Provide everything that is necessary to try out the plugin in this project (including a sample Xcode/Android project if necessary)
24 |
25 | ## Run tests for this plugin
26 |
27 | To run both the tests, and code style validation, run
28 |
29 | ```
30 | rake
31 | ```
32 |
33 | To automatically fix many of the styling issues, use
34 | ```
35 | rubocop -a
36 | ```
37 |
38 | ## Publish
39 |
40 | * `cd fastlane-plugin-fivethree_ionic`
41 | * update to latest gem files `bundle install`
42 | * `sudo rake install`
43 | * increment version number in `lib/fastlane/plugin/fivethree_ionic/version.rb`
44 | * build new plugin version `rake build`
45 | * publish ruby gem `gem push pkg/fastlane-plugin-fivethree_ionic-${version}`
46 |
47 | ## Issues and Feedback
48 |
49 | For any other issues and feedback about this plugin, please submit it to this repository.
50 |
51 | ## Troubleshooting
52 |
53 | If you have trouble using plugins, check out the [Plugins Troubleshooting](https://docs.fastlane.tools/plugins/plugins-troubleshooting/) guide.
54 |
55 | ## Using _fastlane_ Plugins
56 |
57 | For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://docs.fastlane.tools/plugins/create-plugin/).
58 |
59 | ## About _fastlane_
60 |
61 | _fastlane_ is the easiest way to automate beta deployments and releases for your iOS and Android apps. To learn more, check out [fastlane.tools](https://fastlane.tools).
62 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_take_screenshots.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | module SharedValues
4 | FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE =
5 | :FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE
6 | end
7 |
8 | class FivTakeScreenshotsAction < Action
9 | def self.run(params)
10 | UI.header 'Taking Screenshots...'
11 |
12 | sh "ionic cordova run browser --prod && #{params[:cypress]} run -s #{
13 | params[:spec]
14 | } -b chrome"
15 | UI.success 'Successfully finished taking screenshots'
16 | end
17 |
18 | #####################################################
19 | # @!group Documentation
20 | #####################################################
21 |
22 | def self.description
23 | 'A short description with <= 80 characters of what this action does'
24 | end
25 |
26 | def self.details
27 | # Optional:
28 | # this is your chance to provide a more detailed description of this action
29 | 'You can use this action to do cool things...'
30 | end
31 |
32 | def self.available_options
33 | # Define all options your action supports.
34 |
35 | # Below a few examples
36 | [
37 | FastlaneCore::ConfigItem.new(
38 | key: :cypress,
39 | env_name: 'FIV_BUILD_IONIC_ANDROID_IS_PROD',
40 | description: 'Dev or Prod build',
41 | optional: false,
42 | type: String
43 | ),
44 | FastlaneCore::ConfigItem.new(
45 | key: :spec,
46 | env_name: 'FIV_BUILD_IONIC_ANDROID_IS_PROD',
47 | description: 'Dev or Prod build',
48 | optional: false,
49 | type: String
50 | )
51 | ]
52 | end
53 |
54 | def self.output
55 | # Define the shared values you are going to provide
56 | # Example
57 | [
58 | [
59 | 'FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE',
60 | 'A description of what this value contains'
61 | ]
62 | ]
63 | end
64 |
65 | def self.return_value
66 | # If your method provides a return value, you can describe here what it does
67 | end
68 |
69 | def self.authors
70 | # So no one will ever forget your contribution to fastlane :) You are awesome btw!
71 | ['Your GitHub/Twitter Name']
72 | end
73 |
74 | def self.is_supported?(platform)
75 | platform == :android
76 | end
77 | end
78 | end
79 | end
80 |
--------------------------------------------------------------------------------
/src/theme/variables.scss:
--------------------------------------------------------------------------------
1 | // Ionic Variables and Theming. For more info, please see:
2 | // http://ionicframework.com/docs/theming/
3 |
4 | /** Ionic CSS Variables **/
5 | :root {
6 | /** primary **/
7 | --ion-color-primary: #488aff;
8 | --ion-color-primary-rgb: 72,138,255;
9 | --ion-color-primary-contrast: #fff;
10 | --ion-color-primary-contrast-rgb: 255,255,255;
11 | --ion-color-primary-shade: #3f79e0;
12 | --ion-color-primary-tint: #5a96ff;
13 |
14 | /** secondary **/
15 | --ion-color-secondary: #32db64;
16 | --ion-color-secondary-rgb: 50,219,100;
17 | --ion-color-secondary-contrast: #fff;
18 | --ion-color-secondary-contrast-rgb: 255,255,255;
19 | --ion-color-secondary-shade: #2cc158;
20 | --ion-color-secondary-tint: #47df74;
21 |
22 | /** tertiary **/
23 | --ion-color-tertiary: #f4a942;
24 | --ion-color-tertiary-rgb: 244,169,66;
25 | --ion-color-tertiary-contrast: #fff;
26 | --ion-color-tertiary-contrast-rgb: 255,255,255;
27 | --ion-color-tertiary-shade: #d7953a;
28 | --ion-color-tertiary-tint: #f5b255;
29 |
30 | /** success **/
31 | --ion-color-success: #10dc60;
32 | --ion-color-success-rgb: 16,220,96;
33 | --ion-color-success-contrast: #fff;
34 | --ion-color-success-contrast-rgb: 255,255,255;
35 | --ion-color-success-shade: #0ec254;
36 | --ion-color-success-tint: #28e070;
37 |
38 | /** warning **/
39 | --ion-color-warning: #ffce00;
40 | --ion-color-warning-rgb: 255,206,0;
41 | --ion-color-warning-contrast: #000;
42 | --ion-color-warning-contrast-rgb: 0,0,0;
43 | --ion-color-warning-shade: #e0b500;
44 | --ion-color-warning-tint: #ffd31a;
45 |
46 | /** danger **/
47 | --ion-color-danger: #f53d3d;
48 | --ion-color-danger-rgb: 245,61,61;
49 | --ion-color-danger-contrast: #fff;
50 | --ion-color-danger-contrast-rgb: 255,255,255;
51 | --ion-color-danger-shade: #d83636;
52 | --ion-color-danger-tint: #f65050;
53 |
54 | /** light **/
55 | --ion-color-light: #f4f4f4;
56 | --ion-color-light-rgb: 244,244,244;
57 | --ion-color-light-contrast: #000;
58 | --ion-color-light-contrast-rgb: 0,0,0;
59 | --ion-color-light-shade: #d7d7d7;
60 | --ion-color-light-tint: #f5f5f5;
61 |
62 | /** medium **/
63 | --ion-color-medium: #989aa2;
64 | --ion-color-medium-rgb: 152,154,162;
65 | --ion-color-medium-contrast: #000;
66 | --ion-color-medium-contrast-rgb: 0,0,0;
67 | --ion-color-medium-shade: #86888f;
68 | --ion-color-medium-tint: #a2a4ab;
69 |
70 | /** dark **/
71 | --ion-color-dark: #222;
72 | --ion-color-dark-rgb: 34,34,34;
73 | --ion-color-dark-contrast: #fff;
74 | --ion-color-dark-contrast-rgb: 255,255,255;
75 | --ion-color-dark-shade: #1e1e1e;
76 | --ion-color-dark-tint: #383838;
77 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fivethree-fastlane",
3 | "version": "0.0.1",
4 | "author": "Ionic Framework",
5 | "homepage": "http://ionicframework.com/",
6 | "scripts": {
7 | "ng": "ng",
8 | "start": "ng serve",
9 | "build": "ng build",
10 | "test": "ng test",
11 | "lint": "ng lint",
12 | "e2e": "ng e2e",
13 | "format:fastlane": "prettier --write fastlane-plugin-fivethree_ionic/lib/**/*.rb"
14 | },
15 | "private": true,
16 | "dependencies": {
17 | "@angular/common": "~6.1.1",
18 | "@angular/core": "~6.1.1",
19 | "@angular/forms": "~6.1.1",
20 | "@angular/http": "~6.1.1",
21 | "@angular/platform-browser": "~6.1.1",
22 | "@angular/platform-browser-dynamic": "~6.1.1",
23 | "@angular/router": "~6.1.1",
24 | "@ionic-native/core": "5.0.0-beta.14",
25 | "@ionic-native/splash-screen": "5.0.0-beta.14",
26 | "@ionic-native/status-bar": "5.0.0-beta.14",
27 | "@ionic/angular": "^4.0.0-beta.0",
28 | "cordova-android": "7.0.0",
29 | "cordova-browser": "5.0.4",
30 | "cordova-ios": "4.5.5",
31 | "cordova-plugin-device": "^2.0.2",
32 | "cordova-plugin-ionic-keyboard": "^2.1.2",
33 | "cordova-plugin-ionic-webview": "^2.1.0",
34 | "cordova-plugin-splashscreen": "^5.0.2",
35 | "cordova-plugin-whitelist": "^1.3.3",
36 | "core-js": "^2.5.3",
37 | "rxjs": "6.2.2",
38 | "zone.js": "^0.8.26"
39 | },
40 | "devDependencies": {
41 | "@angular/cli": "~6.1.1",
42 | "@angular/compiler": "~6.1.1",
43 | "@angular/compiler-cli": "~6.1.1",
44 | "@angular/language-service": "~6.1.1",
45 | "@ionic/ng-toolkit": "^1.0.0",
46 | "@ionic/schematics-angular": "^1.0.0",
47 | "@prettier/plugin-ruby": "~0.17.0",
48 | "@types/jasmine": "~2.8.6",
49 | "@types/jasminewd2": "~2.0.3",
50 | "@types/node": "~10.7.1",
51 | "codelyzer": "~4.4.2",
52 | "jasmine-core": "~2.99.1",
53 | "jasmine-spec-reporter": "~4.2.1",
54 | "karma": "~3.0.0",
55 | "karma-chrome-launcher": "~2.2.0",
56 | "karma-coverage-istanbul-reporter": "~2.0.0",
57 | "karma-jasmine": "~1.1.1",
58 | "karma-jasmine-html-reporter": "^0.2.2",
59 | "prettier": "~1.19.1",
60 | "protractor": "~5.4.0",
61 | "ts-node": "~7.0.0",
62 | "tslint": "~5.11.0",
63 | "typescript": "~2.7.2"
64 | },
65 | "description": "An Ionic project",
66 | "cordova": {
67 | "plugins": {
68 | "cordova-plugin-whitelist": {},
69 | "cordova-plugin-device": {},
70 | "cordova-plugin-splashscreen": {},
71 | "cordova-plugin-ionic-webview": {},
72 | "cordova-plugin-ionic-keyboard": {}
73 | },
74 | "platforms": [
75 | "ios",
76 | "android",
77 | "browser"
78 | ]
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/src/polyfills.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * This file includes polyfills needed by Angular and is loaded before the app.
3 | * You can add your own extra polyfills to this file.
4 | *
5 | * This file is divided into 2 sections:
6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
8 | * file.
9 | *
10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
13 | *
14 | * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
15 | */
16 |
17 | /***************************************************************************************************
18 | * BROWSER POLYFILLS
19 | */
20 |
21 | /** IE9, IE10 and IE11 requires all of the following polyfills. **/
22 | // import 'core-js/es6/symbol';
23 | // import 'core-js/es6/object';
24 | // import 'core-js/es6/function';
25 | // import 'core-js/es6/parse-int';
26 | // import 'core-js/es6/parse-float';
27 | // import 'core-js/es6/number';
28 | // import 'core-js/es6/math';
29 | // import 'core-js/es6/string';
30 | // import 'core-js/es6/date';
31 | // import 'core-js/es6/array';
32 | // import 'core-js/es6/regexp';
33 | // import 'core-js/es6/map';
34 | // import 'core-js/es6/weak-map';
35 | // import 'core-js/es6/set';
36 |
37 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */
38 | // import 'classlist.js'; // Run `npm install --save classlist.js`.
39 |
40 | /** IE10 and IE11 requires the following for the Reflect API. */
41 | // import 'core-js/es6/reflect';
42 |
43 |
44 | /** Evergreen browsers require these. **/
45 | // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
46 | import 'core-js/es7/reflect';
47 |
48 |
49 | /**
50 | * Required to support Web Animations `@angular/platform-browser/animations`.
51 | * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
52 | **/
53 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`.
54 |
55 |
56 |
57 | /***************************************************************************************************
58 | * Zone JS is required by Angular itself.
59 | */
60 | import 'zone.js/dist/zone'; // Included with Angular CLI.
61 |
62 |
63 |
64 | /***************************************************************************************************
65 | * APPLICATION IMPORTS
66 | */
67 |
68 | /**
69 | * Date, currency, decimal and percent pipes.
70 | * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
71 | */
72 | // import 'intl'; // Run `npm install --save intl`.
73 | /**
74 | * Need to import at least one locale-data with intl.
75 | */
76 | // import 'intl/locale-data/jsonp/en';
77 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_select_client.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | class FivSelectClientAction < Action
4 | def self.run(params)
5 | Dir.chdir "#{params[:clients_folder]}" do
6 | clients_folders = Dir.glob('*').sort.select { |f| File.directory? f }
7 | client = ENV['CLIENT'] || params[:client]
8 | if (client)
9 | if (clients_folders.include?(client))
10 | puts(
11 | "
12 | ***********************************************
13 | Selected client: #{
14 | client
15 | }
16 | ***********************************************
17 | "
18 | )
19 | return client
20 | else
21 | UI.user_error!("Client #{client} is not available.")
22 | end
23 | end
24 |
25 | selected_client = UI.select('Select one client: ', clients_folders)
26 |
27 | puts(
28 | "
29 | ***********************************************
30 | Selected client: #{
31 | selected_client
32 | }
33 | ***********************************************
34 | "
35 | )
36 | return selected_client
37 | end
38 | end
39 |
40 | def self.description
41 | 'Select a client'
42 | end
43 |
44 | def self.available_options
45 | [
46 | FastlaneCore::ConfigItem.new(
47 | key: :clients_folder,
48 | env_name: 'FIV_CLIENTS_FOLDER',
49 | # The name of the environment variable
50 | description: 'Clients folder path for SelectClientAction',
51 | # a short description of this parameter
52 | default_value: 'clients',
53 | is_string: true,
54 | verify_block:
55 | proc do |value|
56 | unless (value and not value.empty?)
57 | UI.user_error!(
58 | "No client folder path for SelectClientAction given, pass using `client_folder: '../path_to_clients_folder'`"
59 | )
60 | end
61 | unless File.directory?(value)
62 | UI.user_error!(
63 | "Couldn't find clients folder at path '#{value}'"
64 | )
65 | end
66 | end
67 | ),
68 | FastlaneCore::ConfigItem.new(
69 | key: :client,
70 | env_name: 'FIV_CLIENT',
71 | # The name of the environment variable
72 | description: 'client to select',
73 | # a short description of this parameter"
74 | is_string: true,
75 | optional: true
76 | )
77 | ]
78 | end
79 |
80 | def self.author
81 | 'Marc'
82 | end
83 |
84 | def self.is_supported?(platform)
85 | %i[ios mac android].include? platform
86 | end
87 | end
88 | end
89 | end
90 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_update_version_and_build_no.rb:
--------------------------------------------------------------------------------
1 | require 'fastlane/action'
2 | require_relative '../helper/fivethree_ionic_helper'
3 | require_relative './fiv_update_version'
4 | require_relative './fiv_increment_build_no'
5 |
6 | module Fastlane
7 | module Actions
8 | class FivUpdateVersionAndBuildNoAction < Action
9 | def self.run(params)
10 | version = ''
11 | if (params[:skip_version])
12 | puts('skiping version, just incrementing build no')
13 | old_version =
14 | sh "echo \"cat //*[local-name()='widget']/@version\" | xmllint --shell #{
15 | params[:pathToConfigXML]
16 | }| awk -F'[=\"]' '!/>/{print $(NF-1)}'"
17 | version = old_version.delete!("\n")
18 | else
19 | version =
20 | Fastlane::Actions::FivUpdateVersionAction.run(
21 | pathToConfigXML: params[:pathToConfigXML]
22 | )
23 | end
24 | build_no =
25 | Fastlane::Actions::FivIncrementBuildNoAction.run(
26 | pathToConfigXML: params[:pathToConfigXML], ios: params[:ios]
27 | )
28 |
29 | return { version: version, build_no: build_no }
30 | end
31 |
32 | def self.description
33 | 'Fastlane plugin for Ionic v4 Projects'
34 | end
35 |
36 | def self.authors
37 | %w[Fivethree]
38 | end
39 |
40 | def self.return_value
41 | # If your method provides a return value, you can describe here what it does
42 | 'returns object containing version and build_no'
43 | end
44 |
45 | def self.details
46 | # Optional:
47 | 'Fastlane'
48 | end
49 |
50 | def self.available_options
51 | [
52 | FastlaneCore::ConfigItem.new(
53 | key: :ios,
54 | env_name: 'FIV_INCREMENT_BUILD_NO_IOS',
55 | description: '---',
56 | optional: false,
57 | type: Boolean
58 | ),
59 | FastlaneCore::ConfigItem.new(
60 | key: :pathToConfigXML,
61 | env_name: 'FIV_INCREMENT_BUILD_CONFIG',
62 | description: '---',
63 | optional: false,
64 | verify_block:
65 | proc do |value|
66 | unless File.exist?(value)
67 | UI.user_error!(
68 | 'Couldnt find config.xml! Please change your path.'
69 | )
70 | end
71 | end,
72 | type: String
73 | ),
74 | FastlaneCore::ConfigItem.new(
75 | key: :skip_version,
76 | env_name: 'FIV_SKIP_VERSION',
77 | description: '---',
78 | optional: true,
79 | default_value: false,
80 | type: Boolean
81 | )
82 | ]
83 | end
84 |
85 | def self.is_supported?(platform)
86 | # Adjust this if your plugin only works for a particular platform (iOS vs. Android, for example)
87 | # See: https://docs.fastlane.tools/advanced/#control-configuration-by-lane-and-by-platform
88 | #
89 | # [:ios, :mac, :android].include?(platform)
90 | true
91 | end
92 | end
93 | end
94 | end
95 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_select_clients.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | class FivSelectClientsAction < Action
4 | def self.run(params)
5 | clients = []
6 | Dir.chdir "#{params[:clients_folder]}" do
7 | clients_folders = Dir.glob('*').sort.select { |f| File.directory? f }
8 |
9 | if (ENV['CLIENTS'])
10 | envClients = ENV['CLIENTS'].split(',')
11 | selectedClients =
12 | envClients.select { |x| clients_folders.include?(x) }
13 | puts(
14 | "
15 | ***********************************************
16 | Selected clients: #{
17 | selectedClients
18 | }
19 | ***********************************************
20 | "
21 | )
22 | return selectedClients
23 | end
24 |
25 | clients_folders.unshift('All')
26 | selected_client = UI.select('Select clients: ', clients_folders)
27 |
28 | if (selected_client === 'All')
29 | clients_folders.shift
30 | puts(
31 | "
32 | ***********************************************
33 | Selected clients: #{
34 | clients_folders
35 | }
36 | ***********************************************
37 | "
38 | )
39 | return clients_folders
40 | end
41 |
42 | puts(
43 | "
44 | ***********************************************
45 | Selected client: #{
46 | selected_client
47 | }
48 | ***********************************************
49 | "
50 | )
51 | clients.push(selected_client)
52 | end
53 |
54 | return clients
55 | end
56 |
57 | def self.description
58 | 'Select list of clients'
59 | end
60 |
61 | def self.available_options
62 | [
63 | FastlaneCore::ConfigItem.new(
64 | key: :clients_folder,
65 | env_name: 'FIV_CLIENTS_FOLDER',
66 | # The name of the environment variable
67 | description: 'Clients folder path for SelectClientAction',
68 | # a short description of this parameter
69 | default_value: 'clients',
70 | is_string: true,
71 | verify_block:
72 | proc do |value|
73 | unless (value and not value.empty?)
74 | UI.user_error!(
75 | "No client folder path for FivSelectClientAction given, pass using `client_folder: '../path_to_clients_folder'`"
76 | )
77 | end
78 | unless File.directory?(value)
79 | UI.user_error!(
80 | "Couldn't find clients folder at path '#{value}'"
81 | )
82 | end
83 | end
84 | )
85 | ]
86 | end
87 |
88 | def self.author
89 | 'Marc'
90 | end
91 |
92 | def self.is_supported?(platform)
93 | %i[ios mac android].include? platform
94 | end
95 | end
96 | end
97 | end
98 |
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "rulesDirectory": [
3 | "node_modules/codelyzer"
4 | ],
5 | "rules": {
6 | "arrow-return-shorthand": true,
7 | "callable-types": true,
8 | "class-name": true,
9 | "comment-format": [
10 | true,
11 | "check-space"
12 | ],
13 | "curly": true,
14 | "deprecation": {
15 | "severity": "warn"
16 | },
17 | "eofline": true,
18 | "forin": true,
19 | "import-spacing": true,
20 | "indent": [
21 | true,
22 | "spaces"
23 | ],
24 | "interface-over-type-literal": true,
25 | "label-position": true,
26 | "max-line-length": [
27 | true,
28 | 140
29 | ],
30 | "member-access": false,
31 | "member-ordering": [
32 | true,
33 | {
34 | "order": [
35 | "static-field",
36 | "instance-field",
37 | "static-method",
38 | "instance-method"
39 | ]
40 | }
41 | ],
42 | "no-arg": true,
43 | "no-bitwise": true,
44 | "no-console": [
45 | true,
46 | "debug",
47 | "info",
48 | "time",
49 | "timeEnd",
50 | "trace"
51 | ],
52 | "no-construct": true,
53 | "no-debugger": true,
54 | "no-duplicate-super": true,
55 | "no-empty": false,
56 | "no-empty-interface": true,
57 | "no-eval": true,
58 | "no-inferrable-types": [
59 | true,
60 | "ignore-params"
61 | ],
62 | "no-misused-new": true,
63 | "no-non-null-assertion": true,
64 | "no-shadowed-variable": true,
65 | "no-string-literal": false,
66 | "no-string-throw": true,
67 | "no-switch-case-fall-through": true,
68 | "no-trailing-whitespace": true,
69 | "no-unnecessary-initializer": true,
70 | "no-unused-expression": true,
71 | "no-use-before-declare": true,
72 | "no-var-keyword": true,
73 | "object-literal-sort-keys": false,
74 | "one-line": [
75 | true,
76 | "check-open-brace",
77 | "check-catch",
78 | "check-else",
79 | "check-whitespace"
80 | ],
81 | "prefer-const": true,
82 | "quotemark": [
83 | true,
84 | "single"
85 | ],
86 | "radix": true,
87 | "semicolon": [
88 | true,
89 | "always"
90 | ],
91 | "triple-equals": [
92 | true,
93 | "allow-null-check"
94 | ],
95 | "typedef-whitespace": [
96 | true,
97 | {
98 | "call-signature": "nospace",
99 | "index-signature": "nospace",
100 | "parameter": "nospace",
101 | "property-declaration": "nospace",
102 | "variable-declaration": "nospace"
103 | }
104 | ],
105 | "unified-signatures": true,
106 | "variable-name": false,
107 | "whitespace": [
108 | true,
109 | "check-branch",
110 | "check-decl",
111 | "check-operator",
112 | "check-separator",
113 | "check-type"
114 | ],
115 | "directive-selector": [
116 | true,
117 | "attribute",
118 | "app",
119 | "camelCase"
120 | ],
121 | "component-selector": [
122 | true,
123 | "element",
124 | "app",
125 | "page",
126 | "kebab-case"
127 | ],
128 | "no-output-on-prefix": true,
129 | "use-input-property-decorator": true,
130 | "use-output-property-decorator": true,
131 | "use-host-property-decorator": true,
132 | "no-input-rename": true,
133 | "no-output-rename": true,
134 | "use-life-cycle-interface": true,
135 | "use-pipe-transform-interface": true,
136 | "directive-class-suffix": true
137 | }
138 | }
139 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_update_version.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | module SharedValues
4 | FIV_UPDATE_VERSION_CUSTOM_VALUE = :FIV_UPDATE_VERSION_CUSTOM_VALUE
5 | end
6 |
7 | class FivUpdateVersionAction < Action
8 | def self.run(params)
9 | # fastlane will take care of reading in the parameter and fetching the environment variable:
10 | old_version =
11 | sh "echo \"cat //*[local-name()='widget']/@version\" | xmllint --shell #{
12 | params[:pathToConfigXML]
13 | }| awk -F'[=\"]' '!/>/{print $(NF-1)}'"
14 | old_version = old_version.delete!("\n")
15 | puts "current version: #{old_version}"
16 |
17 | puts "Insert new version number, current version in config.xml is '#{
18 | old_version
19 | }' (Leave empty and press enter to skip this step): "
20 | new_version_number = STDIN.gets.strip
21 | puts "new version: #{new_version_number}"
22 |
23 | if new_version_number.length > 0
24 | puts 'take new version number'
25 | version = new_version_number
26 | else
27 | puts 'take old version number'
28 | version = old_version
29 | end
30 |
31 | text = File.read(params[:pathToConfigXML])
32 |
33 | new_contents = text.gsub(/version="[0-9.]*"/, "version=\"#{version}\"")
34 |
35 | File.open(params[:pathToConfigXML], 'w') do |file|
36 | file.puts new_contents
37 | end
38 |
39 | return version
40 | end
41 |
42 | #####################################################
43 | # @!group Documentation
44 | #####################################################
45 |
46 | def self.description
47 | 'A short description with <= 80 characters of what this action does'
48 | end
49 |
50 | def self.details
51 | # Optional:
52 | # this is your chance to provide a more detailed description of this action
53 | 'You can use this action to do cool things...'
54 | end
55 |
56 | def self.available_options
57 | # Define all options your action supports.
58 |
59 | [
60 | FastlaneCore::ConfigItem.new(
61 | key: :pathToConfigXML,
62 | env_name: 'FIV_INCREMENT_BUILD_CONFIG',
63 | description: '---',
64 | optional: false,
65 | verify_block:
66 | proc do |value|
67 | unless File.exist?(value)
68 | UI.user_error!(
69 | 'Couldnt find config.xml! Please change your path.'
70 | )
71 | end
72 | end,
73 | type: String
74 | )
75 | ]
76 | end
77 |
78 | def self.output
79 | # Define the shared values you are going to provide
80 | # Example
81 | [
82 | [
83 | 'FIV_UPDATE_VERSION_CUSTOM_VALUE',
84 | 'A description of what this value contains'
85 | ]
86 | ]
87 | end
88 |
89 | def self.return_value
90 | 'returns the new version specified in config.xml'
91 | end
92 |
93 | def self.authors
94 | # So no one will ever forget your contribution to fastlane :) You are awesome btw!
95 | ['Your GitHub/Twitter Name']
96 | end
97 |
98 | def self.is_supported?(platform)
99 | # you can do things like
100 | #
101 | # true
102 | #
103 | # platform == :ios
104 | #
105 | # [:ios, :mac].include?(platform)
106 | #
107 |
108 | platform == :ios
109 | end
110 | end
111 | end
112 | end
113 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_increment_build_no.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | module SharedValues
4 | FIV_INCREMENT_BUILD_NO_CUSTOM_VALUE = :FIV_INCREMENT_BUILD_NO_CUSTOM_VALUE
5 | end
6 |
7 | class FivIncrementBuildNoAction < Action
8 | def self.run(params)
9 | text = File.read(params[:pathToConfigXML])
10 | puts "test #{text}"
11 |
12 | isIos = params[:ios]
13 | if (isIos)
14 | app_build_number =
15 | sh "echo \"cat //*[local-name()='widget']/@ios-CFBundleVersion\" | xmllint --shell #{
16 | params[:pathToConfigXML]
17 | }| awk -F'[=\"]' '!/>/{print $(NF-1)}'"
18 | puts app_build_number.length
19 |
20 | if (app_build_number.length == 0)
21 | new_contents =
22 | text.gsub(/ /{print $(NF-1)}'"
36 | puts app_build_number.length
37 |
38 | if (app_build_number.length == 0)
39 | new_contents =
40 | text.gsub(/= Build.VERSION_CODES.KITKAT) {
34 | getWindow().getDecorView().setSystemUiVisibility(
35 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
36 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
37 | }'
38 | )
39 |
40 | new_contents =
41 | content.gsub(
42 | /import org.apache.cordova.*;/,
43 | "import org.apache.cordova.*;\nimport android.os.Build;\nimport android.view.View;"
44 | )
45 | end
46 |
47 | File.open(params[:path], 'w') { |file| file.puts new_contents }
48 | end
49 |
50 | #####################################################
51 | # @!group Documentation
52 | #####################################################
53 |
54 | def self.description
55 | 'A short description with <= 80 characters of what this action does'
56 | end
57 |
58 | def self.details
59 | # Optional:
60 | # this is your chance to provide a more detailed description of this action
61 | 'You can use this action to do cool things...'
62 | end
63 |
64 | def self.available_options
65 | # Define all options your action supports.
66 |
67 | # Below a few examples
68 | [
69 | FastlaneCore::ConfigItem.new(
70 | key: :ios,
71 | env_name: 'FIV_ADD_TRANSPARENT_STATUSBAR_PLATFORM',
72 | description: '---',
73 | optional: false,
74 | type: Boolean
75 | ),
76 | FastlaneCore::ConfigItem.new(
77 | key: :path,
78 | env_name: 'FIV_ADD_TRANSPARENT_STATUSBAR_PATH',
79 | description:
80 | 'Path to Appdelegate.m for ios and MainActivity.java for Android',
81 | optional: false,
82 | verify_block:
83 | proc do |value|
84 | unless File.exist?(value)
85 | UI.user_error!(
86 | 'Couldnt find AppDelegate or Main Activity! Please change your path.'
87 | )
88 | end
89 | end,
90 | type: String
91 | )
92 | ]
93 | end
94 |
95 | def self.output
96 | # Define the shared values you are going to provide
97 | # Example
98 | [
99 | [
100 | 'ADD_TRANSPARENT_STATUSBAR_CUSTOM_VALUE',
101 | 'A description of what this value contains'
102 | ]
103 | ]
104 | end
105 |
106 | def self.return_value
107 | # If your method provides a return value, you can describe here what it does
108 | end
109 |
110 | def self.authors
111 | # So no one will ever forget your contribution to fastlane :) You are awesome btw!
112 | ['Your GitHub/Twitter Name']
113 | end
114 |
115 | def self.is_supported?(platform)
116 | # you can do things like
117 | #
118 | # true
119 | #
120 | # platform == :ios
121 | #
122 | # [:ios, :mac].include?(platform)
123 | #
124 |
125 | platform == :ios
126 | end
127 | end
128 | end
129 | end
130 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | PATH
2 | remote: fastlane-plugin-fivethree_ionic
3 | specs:
4 | fastlane-plugin-fivethree_ionic (0.2.0)
5 |
6 | GEM
7 | remote: https://rubygems.org/
8 | specs:
9 | CFPropertyList (3.0.2)
10 | addressable (2.7.0)
11 | public_suffix (>= 2.0.2, < 5.0)
12 | atomos (0.1.3)
13 | babosa (1.0.3)
14 | claide (1.0.3)
15 | colored (1.2)
16 | colored2 (3.1.2)
17 | commander-fastlane (4.4.6)
18 | highline (~> 1.7.2)
19 | declarative (0.0.10)
20 | declarative-option (0.1.0)
21 | digest-crc (0.4.1)
22 | domain_name (0.5.20190701)
23 | unf (>= 0.0.5, < 1.0.0)
24 | dotenv (2.7.5)
25 | emoji_regex (1.0.1)
26 | excon (0.72.0)
27 | faraday (0.17.3)
28 | multipart-post (>= 1.2, < 3)
29 | faraday-cookie_jar (0.0.6)
30 | faraday (>= 0.7.4)
31 | http-cookie (~> 1.0.0)
32 | faraday_middleware (0.13.1)
33 | faraday (>= 0.7.4, < 1.0)
34 | fastimage (2.1.7)
35 | fastlane (2.141.0)
36 | CFPropertyList (>= 2.3, < 4.0.0)
37 | addressable (>= 2.3, < 3.0.0)
38 | babosa (>= 1.0.2, < 2.0.0)
39 | bundler (>= 1.12.0, < 3.0.0)
40 | colored
41 | commander-fastlane (>= 4.4.6, < 5.0.0)
42 | dotenv (>= 2.1.1, < 3.0.0)
43 | emoji_regex (>= 0.1, < 2.0)
44 | excon (>= 0.71.0, < 1.0.0)
45 | faraday (~> 0.17)
46 | faraday-cookie_jar (~> 0.0.6)
47 | faraday_middleware (~> 0.13.1)
48 | fastimage (>= 2.1.0, < 3.0.0)
49 | gh_inspector (>= 1.1.2, < 2.0.0)
50 | google-api-client (>= 0.29.2, < 0.37.0)
51 | google-cloud-storage (>= 1.15.0, < 2.0.0)
52 | highline (>= 1.7.2, < 2.0.0)
53 | json (< 3.0.0)
54 | jwt (~> 2.1.0)
55 | mini_magick (>= 4.9.4, < 5.0.0)
56 | multi_xml (~> 0.5)
57 | multipart-post (~> 2.0.0)
58 | plist (>= 3.1.0, < 4.0.0)
59 | public_suffix (~> 2.0.0)
60 | rubyzip (>= 1.3.0, < 2.0.0)
61 | security (= 0.1.3)
62 | simctl (~> 1.6.3)
63 | slack-notifier (>= 2.0.0, < 3.0.0)
64 | terminal-notifier (>= 2.0.0, < 3.0.0)
65 | terminal-table (>= 1.4.5, < 2.0.0)
66 | tty-screen (>= 0.6.3, < 1.0.0)
67 | tty-spinner (>= 0.8.0, < 1.0.0)
68 | word_wrap (~> 1.0.0)
69 | xcodeproj (>= 1.13.0, < 2.0.0)
70 | xcpretty (~> 0.3.0)
71 | xcpretty-travis-formatter (>= 0.0.3)
72 | gh_inspector (1.1.3)
73 | google-api-client (0.36.4)
74 | addressable (~> 2.5, >= 2.5.1)
75 | googleauth (~> 0.9)
76 | httpclient (>= 2.8.1, < 3.0)
77 | mini_mime (~> 1.0)
78 | representable (~> 3.0)
79 | retriable (>= 2.0, < 4.0)
80 | signet (~> 0.12)
81 | google-cloud-core (1.5.0)
82 | google-cloud-env (~> 1.0)
83 | google-cloud-errors (~> 1.0)
84 | google-cloud-env (1.3.0)
85 | faraday (~> 0.11)
86 | google-cloud-errors (1.0.0)
87 | google-cloud-storage (1.25.1)
88 | addressable (~> 2.5)
89 | digest-crc (~> 0.4)
90 | google-api-client (~> 0.33)
91 | google-cloud-core (~> 1.2)
92 | googleauth (~> 0.9)
93 | mini_mime (~> 1.0)
94 | googleauth (0.10.0)
95 | faraday (~> 0.12)
96 | jwt (>= 1.4, < 3.0)
97 | memoist (~> 0.16)
98 | multi_json (~> 1.11)
99 | os (>= 0.9, < 2.0)
100 | signet (~> 0.12)
101 | highline (1.7.10)
102 | http-cookie (1.0.3)
103 | domain_name (~> 0.5)
104 | httpclient (2.8.3)
105 | json (2.3.0)
106 | jwt (2.1.0)
107 | memoist (0.16.2)
108 | mini_magick (4.10.1)
109 | mini_mime (1.0.2)
110 | multi_json (1.14.1)
111 | multi_xml (0.6.0)
112 | multipart-post (2.0.0)
113 | nanaimo (0.2.6)
114 | naturally (2.2.0)
115 | net-scp (2.0.0)
116 | net-ssh (>= 2.6.5, < 6.0.0)
117 | net-ssh (5.2.0)
118 | os (1.0.1)
119 | plist (3.5.0)
120 | public_suffix (2.0.5)
121 | representable (3.0.4)
122 | declarative (< 0.1.0)
123 | declarative-option (< 0.2.0)
124 | uber (< 0.2.0)
125 | retriable (3.1.2)
126 | rouge (2.0.7)
127 | rubyzip (1.3.0)
128 | security (0.1.3)
129 | signet (0.12.0)
130 | addressable (~> 2.3)
131 | faraday (~> 0.9)
132 | jwt (>= 1.5, < 3.0)
133 | multi_json (~> 1.10)
134 | simctl (1.6.8)
135 | CFPropertyList
136 | naturally
137 | slack-notifier (2.3.2)
138 | terminal-notifier (2.0.0)
139 | terminal-table (1.8.0)
140 | unicode-display_width (~> 1.1, >= 1.1.1)
141 | tty-cursor (0.7.1)
142 | tty-screen (0.7.1)
143 | tty-spinner (0.9.3)
144 | tty-cursor (~> 0.7)
145 | uber (0.1.0)
146 | unf (0.1.4)
147 | unf_ext
148 | unf_ext (0.0.7.6)
149 | unicode-display_width (1.6.1)
150 | word_wrap (1.0.0)
151 | xcodeproj (1.15.0)
152 | CFPropertyList (>= 2.3.3, < 4.0)
153 | atomos (~> 0.1.3)
154 | claide (>= 1.0.2, < 2.0)
155 | colored2 (~> 3.1)
156 | nanaimo (~> 0.2.6)
157 | xcpretty (0.3.0)
158 | rouge (~> 2.0.7)
159 | xcpretty-travis-formatter (1.0.0)
160 | xcpretty (~> 0.2, >= 0.0.7)
161 |
162 | PLATFORMS
163 | ruby
164 |
165 | DEPENDENCIES
166 | fastlane
167 | fastlane-plugin-fivethree_ionic!
168 | net-scp
169 |
170 | BUNDLED WITH
171 | 2.1.2
172 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_version.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | module SharedValues
4 | FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE =
5 | :FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE
6 | end
7 |
8 | class FivVersionAction < Action
9 | def self.run(params)
10 | version_and_build_no =
11 | Fastlane::Actions::FivUpdateVersionAndBuildNoAction.run(
12 | ios: params[:ios],
13 | pathToConfigXML: params[:pathToConfigXML],
14 | skip_version: params[:skip_version]
15 | )
16 |
17 | Fastlane::Actions::FivBumpVersionAction.run(
18 | message:
19 | "fastlane(#{params[:ios] ? 'ios' : 'android'}): build #{
20 | version_and_build_no[:build_no]
21 | }, version: #{version_and_build_no[:version]}"
22 | )
23 |
24 | Fastlane::Actions::PushToGitRemoteAction.run(
25 | remote: params[:remote],
26 | local_branch: params[:local_branch],
27 | remote_branch: params[:remote_branch],
28 | force: params[:force],
29 | tags: params[:tags]
30 | )
31 |
32 | return version_and_build_no
33 | end
34 |
35 | #####################################################
36 | # @!group Documentation
37 | #####################################################
38 |
39 | def self.description
40 | 'A short description with <= 80 characters of what this action does'
41 | end
42 |
43 | def self.details
44 | # Optional:
45 | # this is your chance to provide a more detailed description of this action
46 | 'You can use this action to do cool things...'
47 | end
48 |
49 | def self.available_options
50 | # Define all options your action supports.
51 |
52 | # Below a few examples
53 | [
54 | FastlaneCore::ConfigItem.new(
55 | key: :ios,
56 | env_name: 'FIV_INCREMENT_BUILD_NO_IOS',
57 | description: 'Increment build no for ios',
58 | optional: false,
59 | type: Boolean
60 | ),
61 | FastlaneCore::ConfigItem.new(
62 | key: :pathToConfigXML,
63 | env_name: 'FIV_INCREMENT_BUILD_CONFIG',
64 | description: 'Path to the Cordova config.xml',
65 | optional: false,
66 | verify_block:
67 | proc do |value|
68 | unless File.exist?(value)
69 | UI.user_error!(
70 | 'Couldnt find config.xml! Please change your path.'
71 | )
72 | end
73 | end,
74 | type: String
75 | ),
76 | FastlaneCore::ConfigItem.new(
77 | key: :local_branch,
78 | env_name: 'FL_GIT_PUSH_LOCAL_BRANCH',
79 | description:
80 | 'The local branch to push from. Defaults to the current branch',
81 | default_value_dynamic: true,
82 | optional: true
83 | ),
84 | FastlaneCore::ConfigItem.new(
85 | key: :remote_branch,
86 | env_name: 'FL_GIT_PUSH_REMOTE_BRANCH',
87 | description:
88 | 'The remote branch to push to. Defaults to the local branch',
89 | default_value_dynamic: true,
90 | optional: true
91 | ),
92 | FastlaneCore::ConfigItem.new(
93 | key: :force,
94 | env_name: 'FL_PUSH_GIT_FORCE',
95 | description: 'Force push to remote',
96 | is_string: false,
97 | default_value: false
98 | ),
99 | FastlaneCore::ConfigItem.new(
100 | key: :tags,
101 | env_name: 'FL_PUSH_GIT_TAGS',
102 | description: 'Whether tags are pushed to remote',
103 | is_string: false,
104 | default_value: true
105 | ),
106 | FastlaneCore::ConfigItem.new(
107 | key: :remote,
108 | env_name: 'FL_GIT_PUSH_REMOTE',
109 | description: 'The remote to push to',
110 | default_value: 'origin'
111 | ),
112 | FastlaneCore::ConfigItem.new(
113 | key: :skip_version,
114 | env_name: 'FIV_SKIP_VERSION',
115 | description: 'CI flag to skip updating the version',
116 | optional: true,
117 | default_value: false,
118 | type: Boolean
119 | )
120 | ]
121 | end
122 |
123 | def self.output
124 | # Define the shared values you are going to provide
125 | # Example
126 | [
127 | [
128 | 'FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE',
129 | 'A description of what this value contains'
130 | ]
131 | ]
132 | end
133 |
134 | def self.return_value
135 | # If your method provides a return value, you can describe here what it does
136 | end
137 |
138 | def self.authors
139 | # So no one will ever forget your contribution to fastlane :) You are awesome btw!
140 | %w[garygrossgarten]
141 | end
142 |
143 | def self.is_supported?(platform)
144 | platform == :android
145 | end
146 | end
147 | end
148 | end
149 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_android_keystore.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | class FivAndroidKeystoreAction < Action
4 | def self.run(params)
5 | keystore_path = params[:keystore_path]
6 | keystore_name = params[:keystore_name]
7 | keystore_file = File.join(keystore_path, keystore_name) + '.keystore'
8 |
9 | # Validating output doesn't exist yet for our android signing info
10 | if File.directory?(keystore_path)
11 | return keystore_file if File.exists?(keystore_file)
12 | else
13 | UI.message 'android keystore doesnt exist yet. creating one for you...'
14 | Dir.mkdir keystore_path
15 | end
16 |
17 | puts 'Please enter the keystore password for new keystore with atleast 6 characters:'
18 | keychain_entry =
19 | CredentialsManager::AccountManager.new(
20 | user: "#{keystore_name}_android_keystore_storepass"
21 | )
22 | password = keychain_entry.password
23 |
24 | puts 'Please enter the keystore password for new keystore atleast 6 characters:'
25 | keypass_entry =
26 | CredentialsManager::AccountManager.new(
27 | user: "#{keystore_name}_android_keystore_keypass"
28 | )
29 | key_password = keypass_entry.password
30 |
31 | alias_name = params[:key_alias]
32 | puts "Keystore alias #{alias_name}"
33 |
34 | full_name =
35 | Fastlane::Actions::PromptAction.run(text: 'Enter kexystore full name')
36 | org = Fastlane::Actions::PromptAction.run(text: 'Enter kexystore org')
37 | org_unit =
38 | Fastlane::Actions::PromptAction.run(text: 'Enter kexystore org unit')
39 | city_locality = Fastlane::Actions::PromptAction.run(text: 'Enter city')
40 | state_province =
41 | Fastlane::Actions::PromptAction.run(text: 'Enter state')
42 | country = Fastlane::Actions::PromptAction.run(text: 'country')
43 |
44 | # Create keystore with command
45 | unless File.file?(keystore_file)
46 | keytool =
47 | "keytool -genkey -v \
48 | -keystore #{
49 | keystore_file
50 | } \
51 | -alias #{
52 | alias_name
53 | } \
54 | -keyalg RSA -keysize 2048 -validity 10000 \
55 | -storepass #{
56 | password
57 | } \
58 | -keypass #{
59 | key_password
60 | } \
61 | -dname \"CN=#{full_name}, OU=#{org_unit}, O=#{
62 | org
63 | }, L=#{city_locality}, S=#{state_province}, C=#{
64 | country
65 | }\"
66 | "
67 | sh keytool
68 | else
69 | UI.message "Keystore file already exists - #{keystore_file}"
70 | end
71 |
72 | # Create release-signing.properties for automatic signing with Ionic
73 | release_signing_path =
74 | File.join(keystore_path, 'release-signing.properties')
75 |
76 | unless File.file?(release_signing_path)
77 | out_file = File.new(release_signing_path, 'w')
78 | out_file.puts("storeFile=#{keystore_name}")
79 | out_file.puts("storePassword=#{password}")
80 | out_file.puts("keyAlias=#{alias_name}")
81 | out_file.puts("keyPassword=#{key_password}")
82 | out_file.close
83 | else
84 | UI.message "release-signing.properties file already exists - #{
85 | release_signing_path
86 | }"
87 | end
88 |
89 | return keystore_file
90 | end
91 |
92 | #####################################################
93 | # @!group Documentation
94 | #####################################################
95 |
96 | def self.description
97 | 'Generate an Android keystore file or validate keystore exists'
98 | end
99 |
100 | def self.details
101 | 'Generate an Android keystore file or validate keystore exists'
102 | end
103 |
104 | def self.available_options
105 | [
106 | FastlaneCore::ConfigItem.new(
107 | key: :keystore_path,
108 | env_name: 'FIV_KEYSTORE_PATH',
109 | description: 'Path to android keystore',
110 | is_string: true,
111 | default_value: './fastlane/android'
112 | ),
113 | FastlaneCore::ConfigItem.new(
114 | key: :keystore_name,
115 | env_name: 'FIV_KEYSTORE_NAME',
116 | description: 'Name of the keystore',
117 | is_string: true,
118 | optional: false
119 | ),
120 | FastlaneCore::ConfigItem.new(
121 | key: :key_alias,
122 | env_name: 'FIV_ANDROID_KEYSTORE_ALIAS',
123 | description: 'Key alias of the keystore',
124 | is_string: true,
125 | optional: false
126 | )
127 | ]
128 | end
129 |
130 | def self.output
131 | [
132 | ['ANDROID_KEYSTORE_KEYSTORE_PATH', 'Path to keystore'],
133 | [
134 | 'ANDROID_KEYSTORE_RELEASE_SIGNING_PATH',
135 | 'Path to release-signing.properties'
136 | ]
137 | ]
138 | end
139 |
140 | def self.return_value
141 | 'Path to keystore'
142 | end
143 |
144 | def self.authors
145 | %w[fivethree]
146 | end
147 |
148 | def self.is_supported?(platform)
149 | platform == :android
150 | end
151 | end
152 | end
153 | end
154 |
--------------------------------------------------------------------------------
/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular-devkit/core/src/workspace/workspace-schema.json",
3 | "version": 1,
4 | "defaultProject": "app",
5 | "projects": {
6 | "app": {
7 | "root": "",
8 | "sourceRoot": "src",
9 | "projectType": "application",
10 | "prefix": "app",
11 | "schematics": {},
12 | "architect": {
13 | "build": {
14 | "builder": "@angular-devkit/build-angular:browser",
15 | "options": {
16 | "progress": false,
17 | "outputPath": "www",
18 | "index": "src/index.html",
19 | "main": "src/main.ts",
20 | "polyfills": "src/polyfills.ts",
21 | "tsConfig": "src/tsconfig.app.json",
22 | "assets": [
23 | {
24 | "glob": "**/*",
25 | "input": "src/assets",
26 | "output": "assets"
27 | },
28 | {
29 | "glob": "**/*.svg",
30 | "input": "node_modules/@ionic/angular/dist/ionic/svg",
31 | "output": "./svg"
32 | }
33 | ],
34 | "styles": [
35 | {
36 | "input": "src/theme/variables.scss"
37 | },
38 | {
39 | "input": "src/global.scss"
40 | }
41 | ],
42 | "scripts": []
43 | },
44 | "configurations": {
45 | "production": {
46 | "fileReplacements": [
47 | {
48 | "replace": "src/environments/environment.ts",
49 | "with": "src/environments/environment.prod.ts"
50 | }
51 | ],
52 | "optimization": true,
53 | "outputHashing": "all",
54 | "sourceMap": false,
55 | "extractCss": true,
56 | "namedChunks": false,
57 | "aot": true,
58 | "extractLicenses": true,
59 | "vendorChunk": false,
60 | "buildOptimizer": true
61 | }
62 | }
63 | },
64 | "serve": {
65 | "builder": "@angular-devkit/build-angular:dev-server",
66 | "options": {
67 | "browserTarget": "app:build"
68 | },
69 | "configurations": {
70 | "production": {
71 | "browserTarget": "app:build:production"
72 | }
73 | }
74 | },
75 | "extract-i18n": {
76 | "builder": "@angular-devkit/build-angular:extract-i18n",
77 | "options": {
78 | "browserTarget": "app:build"
79 | }
80 | },
81 | "test": {
82 | "builder": "@angular-devkit/build-angular:karma",
83 | "options": {
84 | "main": "src/test.ts",
85 | "polyfills": "src/polyfills.ts",
86 | "tsConfig": "src/tsconfig.spec.json",
87 | "karmaConfig": "src/karma.conf.js",
88 | "styles": [
89 | "styles.css"
90 | ],
91 | "scripts": [],
92 | "assets": [
93 | {
94 | "glob": "favicon.ico",
95 | "input": "src/",
96 | "output": "/"
97 | },
98 | {
99 | "glob": "**/*",
100 | "input": "src/assets",
101 | "output": "/assets"
102 | }
103 | ]
104 | }
105 | },
106 | "lint": {
107 | "builder": "@angular-devkit/build-angular:tslint",
108 | "options": {
109 | "tsConfig": [
110 | "src/tsconfig.app.json",
111 | "src/tsconfig.spec.json"
112 | ],
113 | "exclude": [
114 | "**/node_modules/**"
115 | ]
116 | }
117 | },
118 | "ionic-cordova-build": {
119 | "builder": "@ionic/ng-toolkit:cordova-build",
120 | "options": {
121 | "browserTarget": "app:build"
122 | },
123 | "configurations": {
124 | "production": {
125 | "browserTarget": "app:build:production"
126 | }
127 | }
128 | },
129 | "ionic-cordova-serve": {
130 | "builder": "@ionic/ng-toolkit:cordova-serve",
131 | "options": {
132 | "cordovaBuildTarget": "app:ionic-cordova-build",
133 | "devServerTarget": "app:serve"
134 | },
135 | "configurations": {
136 | "production": {
137 | "cordovaBuildTarget": "app:ionic-cordova-build:production",
138 | "devServerTarget": "app:serve:production"
139 | }
140 | }
141 | }
142 | }
143 | },
144 | "app-e2e": {
145 | "root": "e2e/",
146 | "projectType": "application",
147 | "architect": {
148 | "e2e": {
149 | "builder": "@angular-devkit/build-angular:protractor",
150 | "options": {
151 | "protractorConfig": "e2e/protractor.conf.js",
152 | "devServerTarget": "app:serve"
153 | }
154 | },
155 | "lint": {
156 | "builder": "@angular-devkit/build-angular:tslint",
157 | "options": {
158 | "tsConfig": "e2e/tsconfig.e2e.json",
159 | "exclude": [
160 | "**/node_modules/**"
161 | ]
162 | }
163 | }
164 | }
165 | }
166 | },
167 | "cli": {
168 | "defaultCollection": "@ionic/schematics-angular"
169 | },
170 | "schematics": {
171 | "@ionic/schematics-angular:component": {
172 | "styleext": "scss"
173 | },
174 | "@ionic/schematics-angular:page": {
175 | "styleext": "scss"
176 | }
177 | }
178 | }
179 |
--------------------------------------------------------------------------------
/fastlane/Preview.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | deliver - fivethree-fastlane
5 |
6 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 | en-US
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
Screenshots
177 |
178 |
179 |
180 |
181 |
No Screenshots Found
182 |
183 | deliver couldn't find any screenshots.
184 |
185 | The existing screenshots on App Store Connect will be kept.
186 | if you want to remove them you have to use the --overwrite_screenshots flag.
187 |
188 |
189 | If you want to download your existing screenshots, run deliver download_screenshots .
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
204 |
205 |
206 |
207 |
208 |
214 |
215 |
216 |
217 |
--------------------------------------------------------------------------------
/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | fivethree-fastlane
4 | An awesome Ionic/Cordova app.
5 | Ionic Framework Team
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_sign_android.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | class FivSignAndroidAction < Action
4 | def self.run(params)
5 | keystore_path = Fastlane::Actions::FivAndroidKeystoreAction.run(params)
6 |
7 | keychain_entry =
8 | CredentialsManager::AccountManager.new(
9 | user: "#{params[:keystore_name]}_android_keystore_storepass"
10 | )
11 | keystore_storepass = keychain_entry.password
12 |
13 | keychain_entry =
14 | CredentialsManager::AccountManager.new(
15 | user: "#{params[:keystore_name]}_android_keystore_keypass"
16 | )
17 | keystore_keypass = keychain_entry.password
18 |
19 | puts "You can delete the password if they are wrong stored in the keychain: 'fastlane fastlane-credentials remove --username android_keystore_storepass' and 'fastlane fastlane-credentials remove --username android_keystore_keypass'"
20 |
21 | android_build_tool_path =
22 | "#{params[:android_sdk_path]}/build-tools/#{
23 | params[:android_build_tool_version]
24 | }"
25 |
26 | zipalign_apk_file = params[:apk_zipalign_target]
27 | if (File.file?(zipalign_apk_file))
28 | remove_zipalign = "rm -Rf #{zipalign_apk_file}"
29 | sh remove_zipalign
30 | end
31 |
32 | # zipalign APK
33 | zipalign =
34 | "#{android_build_tool_path}/zipalign -v 4 \
35 | #{
36 | params[:apk_source]
37 | } \
38 | #{zipalign_apk_file}"
39 | sh zipalign
40 |
41 | if (!File.directory?(params[:apk_signed_target]))
42 | Dir.mkdir params[:apk_signed_target]
43 | end
44 |
45 | output_path =
46 | "#{params[:apk_signed_target]}/app-release-#{params[:app_version]}-#{
47 | params[:app_build_no]
48 | }.apk"
49 |
50 | sign =
51 | "#{android_build_tool_path}/apksigner sign \
52 | --ks #{
53 | keystore_path
54 | } \
55 | --ks-key-alias #{
56 | params[:key_alias]
57 | } \
58 | --ks-pass 'pass:#{keystore_keypass}' \
59 | --out #{
60 | output_path
61 | } \
62 | #{zipalign_apk_file}"
63 | self.run_shell_script(sign)
64 |
65 | verify =
66 | ("#{android_build_tool_path}/apksigner verify -v #{output_path}")
67 | self.run_shell_script(verify)
68 |
69 | return output_path
70 | end
71 |
72 | #####################################################
73 | # @!group Documentation
74 | #####################################################
75 |
76 | def self.description
77 | 'Zipalign, sign and verify android apk'
78 | end
79 |
80 | def self.run_shell_script(command)
81 | Fastlane::Actions.sh(command)
82 | end
83 |
84 | def self.details
85 | # Optional:
86 | # this is your chance to provide a more detailed description of this action
87 | 'You can use this action to do cool things...'
88 | end
89 |
90 | def self.available_options
91 | # Define all options your action supports.
92 |
93 | # Below a few examples
94 | [
95 | FastlaneCore::ConfigItem.new(
96 | key: :keystore_path,
97 | env_name: 'FIV_KEYSTORE_PATH',
98 | description: 'Path to android keystore',
99 | is_string: true,
100 | default_value: './fastlane/android'
101 | ),
102 | FastlaneCore::ConfigItem.new(
103 | key: :keystore_name,
104 | env_name: 'FIV_KEYSTORE_NAME',
105 | description: 'Name of the keystore',
106 | is_string: true,
107 | optional: false
108 | ),
109 | FastlaneCore::ConfigItem.new(
110 | key: :android_sdk_path,
111 | env_name: 'FIV_ANDROID_SDK_PATH',
112 | description: 'Path to your installed Android SDK',
113 | is_string: true,
114 | default_value: '~/Library/Android/sdk'
115 | ),
116 | FastlaneCore::ConfigItem.new(
117 | key: :android_build_tool_version,
118 | env_name: 'FIV_ANDROID_SDK_BUILD_TOOL_VERSION',
119 | description:
120 | 'Android Build Tool version used for `zipalign`, `sign` and `verify`',
121 | is_string: true,
122 | default_value: '28.0.3'
123 | ),
124 | FastlaneCore::ConfigItem.new(
125 | key: :apk_source,
126 | env_name: 'FIV_APK_SOURCE',
127 | description: 'Source path to the apk file',
128 | is_string: true,
129 | default_value:
130 | './platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk'
131 | ),
132 | FastlaneCore::ConfigItem.new(
133 | key: :apk_zipalign_target,
134 | env_name: 'FIV_APK_ZIPALIGN_TARGET',
135 | description: 'Target path for the zipaligned apk',
136 | is_string: true,
137 | default_value:
138 | './platforms/android/app/build/outputs/apk/release/app-release-unsigned-zipalign.apk'
139 | ),
140 | FastlaneCore::ConfigItem.new(
141 | key: :apk_signed_target,
142 | env_name: 'FIV_APK_SIGNED_TARGET',
143 | description: 'Tarket path of the signed apk',
144 | is_string: true,
145 | default_value: './platforms/android/app/build/outputs/apk/release'
146 | ),
147 | FastlaneCore::ConfigItem.new(
148 | key: :key_alias,
149 | env_name: 'FIV_ANDROID_KEYSTORE_ALIAS',
150 | description: 'Key alias of the keystore',
151 | is_string: true,
152 | optional: false
153 | ),
154 | FastlaneCore::ConfigItem.new(
155 | key: :app_version,
156 | env_name: 'FIV_APP_VERSION',
157 | description: 'App version',
158 | is_string: true,
159 | default_value: ''
160 | ),
161 | FastlaneCore::ConfigItem.new(
162 | key: :app_build_no,
163 | env_name: 'FIV_APP_BUILD_NO',
164 | description: 'App build number',
165 | is_string: true,
166 | default_value: ''
167 | )
168 | ]
169 | end
170 |
171 | def self.output
172 | # Define the shared values you are going to provide
173 | # Example
174 | [
175 | [
176 | 'FIV_BUILD_IONIC_ANDROID_CUSTOM_VALUE',
177 | 'A description of what this value contains'
178 | ]
179 | ]
180 | end
181 |
182 | def self.return_value
183 | # If your method provides a return value, you can describe here what it does
184 | end
185 |
186 | def self.authors
187 | # So no one will ever forget your contribution to fastlane :) You are awesome btw!
188 | %w[marcjulian]
189 | end
190 |
191 | def self.is_supported?(platform)
192 | platform == :android
193 | end
194 | end
195 | end
196 | end
197 |
--------------------------------------------------------------------------------
/fastlane-plugin-fivethree_ionic/lib/fastlane/plugin/fivethree_ionic/actions/fiv_ionic.rb:
--------------------------------------------------------------------------------
1 | module Fastlane
2 | module Actions
3 | module SharedValues
4 | CORDOVA_IOS_RELEASE_BUILD_PATH = :CORDOVA_IOS_RELEASE_BUILD_PATH
5 | CORDOVA_ANDROID_RELEASE_BUILD_PATH = :CORDOVA_ANDROID_RELEASE_BUILD_PATH
6 | CORDOVA_PWA_RELEASE_BUILD_PATH = :CORDOVA_PWA_RELEASE_BUILD_PATH
7 | end
8 |
9 | class FivIonicAction < Action
10 | ANDROID_ARGS_MAP = {
11 | keystore_path: 'keystore',
12 | keystore_password: 'storePassword',
13 | key_password: 'password',
14 | keystore_alias: 'alias'
15 | }
16 |
17 | IOS_ARGS_MAP = {
18 | type: 'packageType',
19 | team_id: 'developmentTeam',
20 | provisioning_profile: 'provisioningProfile'
21 | }
22 |
23 | PWA_ARGS_MAP = {}
24 |
25 | # do rewriting and copying of action params
26 | def self.get_platform_args(params, args_map)
27 | platform_args = []
28 | args_map.each do |action_key, cli_param|
29 | param_value = params[action_key]
30 | unless param_value.to_s.empty?
31 | platform_args << "--#{cli_param}=#{Shellwords.escape(param_value)}"
32 | end
33 | end
34 |
35 | return platform_args.join(' ')
36 | end
37 |
38 | # map action params to the cli param they will be used for
39 |
40 | def self.get_android_args(params)
41 | # TODO document magic in README
42 | if params[:key_password].empty?
43 | params[:key_password] = params[:keystore_password]
44 | end
45 |
46 | return self.get_platform_args(params, ANDROID_ARGS_MAP)
47 | end
48 |
49 | def self.get_ios_args(params)
50 | app_identifier =
51 | CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)
52 |
53 | if params[:provisioning_profile].empty?
54 | # If `match` or `sigh` were used before this, use the certificates returned from there
55 | params[:provisioning_profile] =
56 | ENV['SIGH_UUID'] ||
57 | ENV["sigh_#{app_identifier}_#{params[:type].sub('-', '')}"]
58 | end
59 |
60 | params[:type] = 'ad-hoc' if params[:type] == 'adhoc'
61 | params[:type] = 'app-store' if params[:type] == 'appstore'
62 |
63 | return self.get_platform_args(params, IOS_ARGS_MAP)
64 | end
65 |
66 | def self.get_pwa_args(params)
67 | return self.get_platform_args(params, PWA_ARGS_MAP)
68 | end
69 |
70 | # add cordova platform if missing (run #1)
71 | def self.check_and_add_platform(platform)
72 | if platform && !File.directory?("./platforms/#{platform}")
73 | sh "ionic cordova platform add #{platform}"
74 | end
75 | end
76 |
77 | # app_name
78 | def self.get_app_name
79 | config = REXML::Document.new(File.open('config.xml'))
80 | return config.elements['widget'].elements['name'].first.value
81 | end
82 |
83 | # actual building! (run #2)
84 | def self.build(params)
85 | args = [params[:release] ? '--release' : '--debug']
86 | args << '--prod' if params[:prod]
87 | if params[:platform].to_s == 'android'
88 | android_args = self.get_android_args(params)
89 | end
90 | ios_args = self.get_ios_args(params) if params[:platform].to_s == 'ios'
91 | if params[:platform].to_s == 'browser'
92 | pwa_args = self.get_pwa_args(params)
93 | end
94 |
95 | if params[:cordova_prepare]
96 | # TODO: Remove params not allowed/used for `prepare`
97 | sh "ionic cordova prepare #{params[:platform]} #{args.join(' ')}"
98 | end
99 |
100 | if params[:platform].to_s == 'ios'
101 | sh "ionic cordova compile #{params[:platform]} #{args.join(' ')} -- #{
102 | ios_args
103 | }"
104 | elsif params[:platform].to_s == 'android'
105 | sh "ionic cordova compile #{params[:platform]} #{
106 | args.join(' ')
107 | } -- -- #{android_args}"
108 | elsif params[:platform].to_s == 'browser'
109 | sh "ionic cordova compile #{params[:platform]} #{
110 | args.join(' ')
111 | } -- -- #{pwa_args}"
112 | end
113 | end
114 |
115 | # export build paths (run #3)
116 | def self.set_build_paths(is_release)
117 | app_name = self.get_app_name
118 | build_type = is_release ? 'release' : 'debug'
119 | apk_name = is_release ? 'app-release-unsigned' : 'app-debug'
120 | ENV['CORDOVA_ANDROID_RELEASE_BUILD_PATH'] =
121 | "./platforms/android/app/build/outputs/apk/#{build_type}/#{
122 | apk_name
123 | }.apk"
124 | ENV['CORDOVA_IOS_RELEASE_BUILD_PATH'] =
125 | "./platforms/ios/build/device/#{app_name}.ipa"
126 | ENV['CORDOVA_PWA_RELEASE_BUILD_PATH'] = './platforms/browser/www'
127 |
128 | # TODO: https://github.com/bamlab/fastlane-plugin-cordova/issues/7
129 | end
130 |
131 | def self.run(params)
132 | Fastlane::Actions::FivCleanInstallAction.run(params) if params[:fresh]
133 | self.check_and_add_platform(params[:platform])
134 | self.build(params)
135 | self.set_build_paths(params[:release])
136 |
137 | if params[:platform].to_s == 'ios'
138 | return ENV['CORDOVA_IOS_RELEASE_BUILD_PATH']
139 | elsif params[:platform].to_s == 'android'
140 | return ENV['CORDOVA_ANDROID_RELEASE_BUILD_PATH']
141 | elsif params[:platform].to_s == 'browser'
142 | return ENV['CORDOVA_PWA_RELEASE_BUILD_PATH']
143 | end
144 | end
145 |
146 | #####################################################
147 | # @!group Documentation
148 | #####################################################
149 |
150 | def self.description
151 | 'Build your Ionic app'
152 | end
153 |
154 | def self.details
155 | 'Easily integrate your Ionic build into a Fastlane setup'
156 | end
157 |
158 | def self.available_options
159 | [
160 | FastlaneCore::ConfigItem.new(
161 | key: :platform,
162 | env_name: 'CORDOVA_PLATFORM',
163 | description: 'Platform to build on. Can be android, ios or browser',
164 | is_string: true,
165 | default_value: '',
166 | verify_block:
167 | proc do |value|
168 | unless ['', 'android', 'ios', 'browser'].include? value
169 | UI.user_error!('Platform should be either android or ios')
170 | end
171 | end
172 | ),
173 | FastlaneCore::ConfigItem.new(
174 | key: :release,
175 | env_name: 'CORDOVA_RELEASE',
176 | description: 'Build for release if true, or for debug if false',
177 | is_string: false,
178 | default_value: true,
179 | verify_block:
180 | proc do |value|
181 | unless [false, true].include? value
182 | UI.user_error!('Release should be boolean')
183 | end
184 | end
185 | ),
186 | FastlaneCore::ConfigItem.new(
187 | key: :prod,
188 | env_name: 'IONIC_PROD',
189 | description: 'Build for production',
190 | is_string: false,
191 | default_value: false,
192 | verify_block:
193 | proc do |value|
194 | unless [false, true].include? value
195 | UI.user_error!('Prod should be boolean')
196 | end
197 | end
198 | ),
199 | FastlaneCore::ConfigItem.new(
200 | key: :type,
201 | env_name: 'CORDOVA_IOS_PACKAGE_TYPE',
202 | description:
203 | 'This will determine what type of build is generated by Xcode. Valid options are development, enterprise, adhoc, and appstore',
204 | is_string: true,
205 | default_value: 'appstore',
206 | verify_block:
207 | proc do |value|
208 | unless %w[
209 | development
210 | enterprise
211 | adhoc
212 | appstore
213 | ad-hoc
214 | app-store
215 | ].include? value
216 | UI.user_error!(
217 | 'Valid options are development, enterprise, adhoc, and appstore.'
218 | )
219 | end
220 | end
221 | ),
222 | FastlaneCore::ConfigItem.new(
223 | key: :team_id,
224 | env_name: 'CORDOVA_IOS_TEAM_ID',
225 | description:
226 | 'The development team (Team ID) to use for code signing',
227 | is_string: true,
228 | default_value:
229 | CredentialsManager::AppfileConfig.try_fetch_value(:team_id)
230 | ),
231 | FastlaneCore::ConfigItem.new(
232 | key: :provisioning_profile,
233 | env_name: 'CORDOVA_IOS_PROVISIONING_PROFILE',
234 | description:
235 | 'GUID of the provisioning profile to be used for signing',
236 | is_string: true,
237 | default_value: ''
238 | ),
239 | FastlaneCore::ConfigItem.new(
240 | key: :keystore_path,
241 | env_name: 'CORDOVA_ANDROID_KEYSTORE_PATH',
242 | description: 'Path to the Keystore for Android',
243 | is_string: true,
244 | default_value: ''
245 | ),
246 | FastlaneCore::ConfigItem.new(
247 | key: :keystore_password,
248 | env_name: 'CORDOVA_ANDROID_KEYSTORE_PASSWORD',
249 | description: 'Android Keystore password',
250 | is_string: true,
251 | default_value: ''
252 | ),
253 | FastlaneCore::ConfigItem.new(
254 | key: :key_password,
255 | env_name: 'CORDOVA_ANDROID_KEY_PASSWORD',
256 | description: 'Android Key password (default is keystore password)',
257 | is_string: true,
258 | default_value: ''
259 | ),
260 | FastlaneCore::ConfigItem.new(
261 | key: :keystore_alias,
262 | env_name: 'CORDOVA_ANDROID_KEYSTORE_ALIAS',
263 | description: 'Android Keystore alias',
264 | is_string: true,
265 | default_value: ''
266 | ),
267 | FastlaneCore::ConfigItem.new(
268 | key: :cordova_prepare,
269 | env_name: 'CORDOVA_PREPARE',
270 | description:
271 | 'Specifies whether to run `ionic cordova prepare` before building',
272 | default_value: true,
273 | is_string: false
274 | ),
275 | FastlaneCore::ConfigItem.new(
276 | key: :fresh,
277 | env_name: 'BUILD_FRESH',
278 | description: 'Clean install packages, plugins and platform',
279 | default_value: false,
280 | is_string: false
281 | ),
282 | FastlaneCore::ConfigItem.new(
283 | key: :plugins,
284 | env_name: 'REFRESH_PLUGINS',
285 | description: 'also refresh plugins',
286 | default_value: false,
287 | is_string: false
288 | ),
289 | FastlaneCore::ConfigItem.new(
290 | key: :package_manager,
291 | env_name: 'PACKAGE_MANAGER',
292 | description:
293 | 'What package manager to use to install dependencies: e.g. yarn | npm',
294 | is_string: true,
295 | default_value: 'npm',
296 | verify_block:
297 | proc do |value|
298 | unless ['', 'yarn', 'npm'].include? value
299 | UI.user_error!(
300 | 'Platform should be either android, ios or browser'
301 | )
302 | end
303 | end
304 | )
305 | ]
306 | end
307 |
308 | def self.output
309 | [
310 | [
311 | 'CORDOVA_ANDROID_RELEASE_BUILD_PATH',
312 | 'Path to the signed release APK if it was generated'
313 | ],
314 | [
315 | 'CORDOVA_IOS_RELEASE_BUILD_PATH',
316 | 'Path to the signed release IPA if it was generated'
317 | ]
318 | ]
319 | end
320 |
321 | def self.authors
322 | %w[fivethree]
323 | end
324 |
325 | def self.is_supported?(platform)
326 | true
327 | end
328 |
329 | def self.example_code
330 | ["ionic(
331 | platform: 'ios'
332 | )"]
333 | end
334 |
335 | def self.category
336 | :building
337 | end
338 | end
339 | end
340 | end
341 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # ionic-fastlane-plugin
6 |
7 | [fastlane plugin](https://rubygems.org/gems/fastlane-plugin-fivethree_ionic) for Ionic 4+.
8 |
9 | ## Table of content
10 |
11 | - [Getting started](#getting-started)
12 | - [Actions](#actions)
13 |
14 | ## Getting started
15 |
16 | Install the ionic-fastlane plugin
17 |
18 | ```console
19 | fastlane add_plugin fastlane-plugin-fivethree_ionic
20 | ```
21 |
22 | This will add `gem 'fastlane-plugin-fivethree_ionic'` in the `fastlane/Pluginfile`.
23 |
24 | ## Actions
25 |
26 | This [Fastfile](./fastlane-plugin-fivethree_ionic/fastlane/Fastfile) contains example of the following actions.
27 |
28 | | Action | Description |
29 | | ------------------------------------------------------------------- | ------------------------------------------------------------- |
30 | | [fiv_add_transparent_statusbar](#fiv_add_transparent_statusbar) |
31 | | [fiv_build_ionic_android](#fiv_build_ionic_android) |
32 | | [fiv_android_keystore](#fiv_android_keystore) | Generate an Android keystore file or validate keystore exists |
33 | | [fiv_build_ionic_android](#fiv_build_ionic_android) |
34 | | [fiv_bump_version](#fiv_bump_version) |
35 | | [fiv_clean_install](#fiv_clean_install) |
36 | | [fiv_increment_build_no](#fiv_increment_build_no) |
37 | | [fiv_ionic](#fiv_ionic) | Build your Ionic app for a specific platform |
38 | | [fiv_select_client](#fiv_select_client) | Select a client for white labeling the app |
39 | | [fiv_select_clients](#fiv_select_clients) | Select all, many or one client for white labeling the app |
40 | | [fiv_select_env](#fiv_select_env) | Select an environment folder for white labeling the app |
41 | | [fiv_sign_android](#fiv_sign_android) | Zipalign, sign and verify apk |
42 | | [fiv_update_version](#fiv_update_version) |
43 | | [fiv_update_version_and_build_no](#fiv_update_version_and_build_no) |
44 | | [fiv_version](#fiv_version) |
45 |
46 | ### fiv_add_transparent_statusbar
47 |
48 | ### fiv_android_keystore
49 |
50 | Generate an Android keystore file or validate keystore exists
51 |
52 | #### Options
53 |
54 | | Options | Description | Type | Default | Required |
55 | | ------------- | ------------------------- | -------- | -------------------- | -------- |
56 | | keystore_path | Path to the android | `string` | `./fastlane/android` | `false` |
57 | | keystore_name | Name of the keystore | `string` | | `true` |
58 | | key_alias | Key alias of the keystore | `string` | | `true` |
59 |
60 | ### fiv_build_ionic_android
61 |
62 | ### fiv_bump_version
63 |
64 | ### fiv_clean_install
65 |
66 | ### fiv_increment_build_no
67 |
68 | ### fiv_ionic
69 |
70 | Build your Ionic app for iOS:
71 |
72 | ```ruby
73 | outputpath =
74 | fiv_ionic(
75 | platform: 'ios', release: 'true', prod: 'true', team_id: 'YOUR_TEAM_ID'
76 | )
77 | ```
78 |
79 | Build your Ionic app for Android:
80 |
81 | ```ruby
82 | outputpath = fiv_ionic(platform: 'android', release: 'true', prod: 'true')
83 | ```
84 |
85 | #### Options
86 |
87 | | Options | Description | Type | Default |
88 | | -------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------ | ---------- |
89 | | platform | Platform to build on. Can be android, ios or browser | `android` \| `browser` \| `ios` |
90 | | prod | Build for production | `true` \| `false` | `false` |
91 | | release | Build for release if `true`, or for debug if `false` | `true` \| `false` | `true` |
92 | | team_id | The development team (Team ID) to use for code signing | `string` |
93 | | type | This will determine what type of build is generated by Xcode. Valid options are `development`, `enterprise`, `adhoc`, and `appstore` | `development` \| `enterprise` \| `adhoc` \| `appstore` | `appstore` |
94 |
95 | ### fiv_select_client
96 |
97 | Add `fiv_select_client` to your lane to select a client for copying client specific resources before your app build.
98 |
99 | For example you have the following app clients:
100 |
101 | - clients
102 | - companyA
103 | - resources
104 | - ...
105 | - companyB
106 | - companyZ
107 |
108 | `fiv_select_client()` lets you select one client and returns the client name.
109 |
110 | ```ruby
111 | client = fiv_select_client
112 |
113 | # copy client resources e.g. "cp ../clients/#{client}/resources ../"
114 | # build app
115 | ```
116 |
117 | #### CI
118 |
119 | Client selection can also be passed as an option for a non interactive environment. Add the option `client` to `before_all` and assign it to an environment variable `CLIENT`.
120 |
121 | ```ruby
122 | before_all { |lane, options| ENV['CLIENT'] = options[:client] }
123 | ```
124 |
125 | `fastlane example_lane client:companyA`
126 |
127 | #### Options
128 |
129 | | Options | Description | Type | Default | Required |
130 | | -------------- | ------------------------------------------ | -------- | --------- | -------- |
131 | | clients_folder | Path to your clients white label resources | `string` | `clients` | `false` |
132 |
133 | ### fiv_select_clients
134 |
135 | Add `fiv_select_clients` to your lane to select all, many or one client for copying client specific resources before your app build in a loop.
136 |
137 | For example you have the following app clients:
138 |
139 | - clients
140 | - companyA
141 | - resources
142 | - ...
143 | - companyB
144 | - companyZ
145 |
146 | `fiv_select_clients()` lets you select all, many or one client and returns an array of client names.
147 |
148 | ```ruby
149 | clients = fiv_select_clients
150 |
151 | clients.each { |client| }
152 | ```
153 |
154 | #### CI
155 |
156 | Clients selection can also be passed as an option for a non interactive environment. Add the option `clients` to `before_all` and assign it to an environment variable `CLIENTS`.
157 |
158 | ```ruby
159 | before_all { |lane, options| ENV['CLIENTS'] = options[:clients] }
160 | ```
161 |
162 | Seperate clients by `,`:
163 |
164 | `fastlane example_lane clients:companyA,companyB`
165 |
166 | #### Options
167 |
168 | | Options | Description | Type | Default | Required |
169 | | -------------- | ------------------------------------------ | -------- | --------- | -------- |
170 | | clients_folder | Path to your clients white label resources | `string` | `clients` | `false` |
171 |
172 | ### fiv_select_env
173 |
174 | Add `fiv_select_env` to your lane to select an environment of a client for copying specific resources for this environment before your app build. e.g the resources or app icon and splash screen might differ for each environment.
175 |
176 | For example you have the following app clients with different environments:
177 |
178 | - clients
179 | - companyA
180 | - resources
181 | - environment
182 | - prod
183 | - resources
184 | - qa
185 | - resources
186 | - test
187 | - resorces
188 | - companyB
189 | - companyZ
190 |
191 | `fiv_select_env()` lets you select one client and returns the client name.
192 |
193 | ```ruby
194 | client = fiv_select_client
195 | env = fiv_select_env(client: client)
196 |
197 | # copy client resources from environment e.g. "cp ../clients/#{client}/enviroment/#{env}/resources ../"
198 | # build app
199 | ```
200 |
201 | #### CI
202 |
203 | Environment selection can also be passed as an option for a non interactive environment. Add the option `env` to `before_all` and assign it to an environment variable `ENV`.
204 |
205 | ```ruby
206 | before_all do |lane, options|
207 | ENV['CLIENT'] = options[:client]
208 | ENV['ENV'] = options[:env]
209 | end
210 | ```
211 |
212 | `fastlane example_lane client:companyA env:prod`
213 |
214 | #### Options
215 |
216 | | Options | Description | Type | Default | Required |
217 | | ------------------- | ----------------------------------------------- | -------- | -------------- | -------- |
218 | | clients_folder | Path to your clients white label resources | `string` | `clients` | `false` |
219 | | environments_folder | Path to your environments white label resources | `string` | `environments` | `false` |
220 | | client | Path to your selected client | `string` | | `true` |
221 |
222 | ### fiv_sign_android
223 |
224 | Zipaligns, [signs v2](https://source.android.com/security/apksigning/v2) and verifys an apk with a keystore. If the keystore does not exists it uses `fiv_android_keystore` to create a new keystore.
225 |
226 | ```ruby
227 | # run before signing: ionic cordova build android --prod --release
228 |
229 | apk_path =
230 | fiv_sign_android(
231 | keystore_name: 'pizza',
232 | key_alias: 'pizza',
233 | app_version: '1.0.1',
234 | app_build_no: '2020',
235 | apk_output_dir: './apk',
236 | silent: true
237 | )
238 | ```
239 |
240 | #### Options
241 |
242 | | Options | Description | Type | Default | Required |
243 | | -------------------------- | -------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------- | -------- |
244 | | keystore_path | Path to the android | `string` | `./fastlane/android` | `false` |
245 | | keystore_name | Name of the keystore used to store storepass and keypass in keychain | `string` | | `true` |
246 | | android_sdk_path | Path to your installed Android SDK | `string` | `~/Library/Android/sdk` | `false` |
247 | | android_build_tool_version | Android Build Tool version used for `zipalign`, `sign` and `verify` | `string` | `28.0.3` | `false` |
248 | | apk_source | Android Build Tool version used for `zipalign`, `sign` and `verify` | `string` | `./platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk` | `false` |
249 | | apk_zipalign_target | Target path for the zipaligned apk | `string` | `./platforms/android/app/build/outputs/apk/release/app-release-unsigned-zipalign.apk` | `false` |
250 | | apk_signed_target | Target path of the signed apk | `string` | `./platforms/android/app/build/outputs/apk/release` | `false` |
251 | | key_alias | Key alias of the keystore | `string` | | `true` |
252 | | app_version | App version | `string` | | `true` |
253 | | app_build_no | App build number | `string` | | `true` |
254 |
255 | ### fiv_update_version
256 |
257 | ### fiv_update_version_and_build_no
258 |
259 | ### fiv_version
260 |
--------------------------------------------------------------------------------