From a92940e6104d6410657815b92bffb4653d7f11be Mon Sep 17 00:00:00 2001 From: Mingshen Sun Date: Sun, 19 Jul 2020 18:16:16 -0700 Subject: [PATCH] Add beta distrubution channel --- .travis.yml | 9 +- Gemfile | 4 + Gemfile.lock | 179 +++++++++ fastlane/Fastfile | 114 ++++-- fastlane/Matchfile | 2 +- icon/icon.sketch | Bin 40960 -> 32087 bytes pass.xcodeproj/project.pbxproj | 342 ++++++++++++++-- .../xcshareddata/xcschemes/pass.xcscheme | 8 +- .../AppIcon.appiconset/Contents.json | 375 +++++++++--------- .../AppIcon.appiconset/Icon-108@2x.png | Bin 0 -> 18682 bytes .../AppIcon.appiconset/Icon-44@2x.png | Bin 0 -> 5705 bytes .../AppIcon.appiconset/Icon-50@2x-1.png | Bin 0 -> 7060 bytes .../AppIconBeta.appiconset/Contents.json | 200 ++++++++++ .../AppIconBeta.appiconset/Icon-1024.png | Bin 0 -> 212728 bytes .../AppIconBeta.appiconset/Icon-1025.png | Bin 0 -> 212728 bytes .../AppIconBeta.appiconset/Icon-108@2x.png | Bin 0 -> 19994 bytes .../AppIconBeta.appiconset/Icon-20.png | Bin 0 -> 669 bytes .../AppIconBeta.appiconset/Icon-20@2x-1.png | Bin 0 -> 1869 bytes .../AppIconBeta.appiconset/Icon-20@2x.png | Bin 0 -> 1869 bytes .../AppIconBeta.appiconset/Icon-20@3x.png | Bin 0 -> 3499 bytes .../AppIconBeta.appiconset/Icon-24@2x.png | Bin 0 -> 2471 bytes .../AppIconBeta.appiconset/Icon-27.5@2x.png | Bin 0 -> 3086 bytes .../AppIconBeta.appiconset/Icon-29.png | Bin 0 -> 1127 bytes .../AppIconBeta.appiconset/Icon-29@2x-1.png | Bin 0 -> 3373 bytes .../AppIconBeta.appiconset/Icon-29@2x-2.png | Bin 0 -> 3373 bytes .../AppIconBeta.appiconset/Icon-29@2x.png | Bin 0 -> 3373 bytes .../AppIconBeta.appiconset/Icon-29@3x-1.png | Bin 0 -> 5993 bytes .../AppIconBeta.appiconset/Icon-29@3x.png | Bin 0 -> 5993 bytes .../AppIconBeta.appiconset/Icon-40.png | Bin 0 -> 1865 bytes .../AppIconBeta.appiconset/Icon-40@2x-1.png | Bin 0 -> 5409 bytes .../AppIconBeta.appiconset/Icon-40@2x-2.png | Bin 0 -> 5409 bytes .../AppIconBeta.appiconset/Icon-40@2x.png | Bin 0 -> 5409 bytes .../AppIconBeta.appiconset/Icon-40@3x.png | Bin 0 -> 9077 bytes .../AppIconBeta.appiconset/Icon-44@2x.png | Bin 0 -> 6014 bytes .../AppIconBeta.appiconset/Icon-50@2x.png | Bin 0 -> 7360 bytes .../AppIconBeta.appiconset/Icon-60@2x.png | Bin 0 -> 9004 bytes .../AppIconBeta.appiconset/Icon-60@3x.png | Bin 0 -> 15278 bytes .../AppIconBeta.appiconset/Icon-76.png | Bin 0 -> 4832 bytes .../AppIconBeta.appiconset/Icon-76@2x.png | Bin 0 -> 11619 bytes .../AppIconBeta.appiconset/Icon-83.5@2x.png | Bin 0 -> 13866 bytes .../AppIconBeta.appiconset/Icon-86@2x.png | Bin 0 -> 14444 bytes .../AppIconBeta.appiconset/Icon-98@2x.png | Bin 0 -> 17364 bytes pass/Info.plist | 4 +- pass/passBeta.entitlements | 18 + passAutoFillExtension/Info.plist | 4 +- .../passBetaAutoFillExtension.entitlements | 16 + .../Crypto/GopenPGPInterface.swift | 0 .../Crypto/ObjectivePGPInterface.swift | 0 .../Crypto/PGPAgent.swift | 0 .../Crypto/PGPInterface.swift | 0 passExtension/Info.plist | 2 +- passExtension/passBetaExtension.entitlements | 14 + passKit/Helpers/Globals.swift | 2 +- passKit/Info.plist | 4 +- passKitTests/Info.plist | 2 +- passShortcuts/Info.plist | 2 +- passShortcuts/passBetaShortcuts.entitlements | 14 + passTests/Info.plist | 2 +- 58 files changed, 1065 insertions(+), 252 deletions(-) create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 pass/Assets.xcassets/AppIcon.appiconset/Icon-108@2x.png create mode 100644 pass/Assets.xcassets/AppIcon.appiconset/Icon-44@2x.png create mode 100644 pass/Assets.xcassets/AppIcon.appiconset/Icon-50@2x-1.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Contents.json create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-1024.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-1025.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-108@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-20.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-20@2x-1.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-20@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-20@3x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-24@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-27.5@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-29.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-29@2x-1.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-29@2x-2.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-29@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-29@3x-1.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-29@3x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-40.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-40@2x-1.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-40@2x-2.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-40@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-40@3x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-44@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-50@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-60@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-60@3x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-76.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-76@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-83.5@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-86@2x.png create mode 100644 pass/Assets.xcassets/AppIconBeta.appiconset/Icon-98@2x.png create mode 100644 pass/passBeta.entitlements create mode 100644 passAutoFillExtension/passBetaAutoFillExtension.entitlements rename {passKit => passExtension}/Crypto/GopenPGPInterface.swift (100%) rename {passKit => passExtension}/Crypto/ObjectivePGPInterface.swift (100%) rename {passKit => passExtension}/Crypto/PGPAgent.swift (100%) rename {passKit => passExtension}/Crypto/PGPInterface.swift (100%) create mode 100644 passExtension/passBetaExtension.entitlements create mode 100644 passShortcuts/passBetaShortcuts.entitlements diff --git a/.travis.yml b/.travis.yml index a26b6b7..e5b2e0d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,8 +9,8 @@ addons: before_install: - echo -e "machine github.com\n login $GITHUB_ACCESS_TOKEN" >> ~/.netrc install: - - gem update fastlane - - gem install xcodeproj + - gem install bundler + - bundle install before_script: - pod install - git diff --quiet "$TRAVIS_COMMIT_RANGE" -- ; GIT_DIFF_EXIT_CODE=$? @@ -38,11 +38,14 @@ before_script: ./gopenpgp_build.sh fi script: - - if [ "$TRAVIS_BRANCH" = "master" ] && [ "$TRAVIS_EVENT_TYPE" = "push" ]; then fastlane test && fastlane beta; else fastlane test; fi + - if [ "$TRAVIS_BRANCH" = "master" ] && [ "$TRAVIS_EVENT_TYPE" = "push" ]; then bundle exec fastlane test && bundle exec fastlane "$CHANNEL"; else bundle exec fastlane test; fi cache: directories: - Carthage - go/dist env: + jobs: + - CHANNEL=beta + - CHANNEL=release global: - secure: NsbIgKZAO1Rhr/QUFsvs5LjOGf4vFIWqCJNr+zhw9DKnOd+G8m1z9wsfNyUhg+v1eUONVMxI/FTeAobnn20kxetw1dMQn4/rL4+IB4UsmODuwcFF7JCUAzEB2Wv82O91nVwT48zEmNyOG2VkgfqOgHeASStQyDPFzJuyXFy+RzoBNKK3X7Uxk19UQI80UmXvW9bmQuY8O37g/qwFj4mnluNvPIvGHry0LPMlbh6fRPsHwXlDmD2FSLoW3GI3PLN1pWsIXLURUr3bioLBJ3E0tzZsFA4AM0xs9Y7Td9f87zo4pRTAH5p2EieSq5IfNS2RDQh5aftrLFBZPUui/86yc9hoceLuOVQKkByBavMBVzfIAiAoJZdBX9cTNDh+zzFs+WZKfP4jYnN1xrFPBmHOG5kVRiA++UbepferDjr80A5aXU3FLjOeuKKrkLvAphGRMwsbx9omYHjAa2eaf2oaLeKLENkl/C/6CeG4D1F/PLsdsjilfHEQKroDRWgxU2Se+bKYucmpBXa8fjWHUyr4pfcgc6qB/R62TxYBI94QSbWAEwE6eEzUlmBoids1l5KTWqnMqXYHlxNXNao2RxV2aqwq5OuWqg1hYBxXVBUKGvzXYONnsxfgcc7NLuTPfeR/h1v7CYcs6VG+z2rYJNY5pBTHrYzeNG0RbDNq3ofMl+M= diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..19c9b51 --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source "https://rubygems.org" + +gem "fastlane" +gem "xcodeproj" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..2b94d92 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,179 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.2) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + atomos (0.1.3) + aws-eventstream (1.1.0) + aws-partitions (1.343.0) + aws-sdk-core (3.104.0) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.239.0) + aws-sigv4 (~> 1.1) + jmespath (~> 1.0) + aws-sdk-kms (1.36.0) + aws-sdk-core (~> 3, >= 3.99.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.74.0) + aws-sdk-core (~> 3, >= 3.102.1) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.1) + aws-sigv4 (1.2.1) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.3) + claide (1.0.3) + colored (1.2) + colored2 (3.1.2) + commander-fastlane (4.4.6) + highline (~> 1.7.2) + declarative (0.0.20) + declarative-option (0.1.0) + digest-crc (0.6.1) + rake (~> 13.0) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + dotenv (2.7.6) + emoji_regex (3.0.0) + excon (0.75.0) + faraday (0.17.3) + multipart-post (>= 1.2, < 3) + faraday-cookie_jar (0.0.6) + faraday (>= 0.7.4) + http-cookie (~> 1.0.0) + faraday_middleware (0.14.0) + faraday (>= 0.7.4, < 1.0) + fastimage (2.1.7) + fastlane (2.152.0) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.3, < 3.0.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored + commander-fastlane (>= 4.4.6, < 5.0.0) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (>= 0.17, < 1.0) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (>= 0.13.1, < 2.0) + fastimage (>= 2.1.0, < 3.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-api-client (>= 0.37.0, < 0.39.0) + google-cloud-storage (>= 1.15.0, < 2.0.0) + highline (>= 1.7.2, < 2.0.0) + json (< 3.0.0) + jwt (>= 2.1.0, < 3) + mini_magick (>= 4.9.4, < 5.0.0) + multipart-post (~> 2.0.0) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 2.0.0, < 3.0.0) + security (= 0.1.3) + simctl (~> 1.6.3) + slack-notifier (>= 2.0.0, < 3.0.0) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (>= 1.4.5, < 2.0.0) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.3.0) + xcpretty-travis-formatter (>= 0.0.3) + gh_inspector (1.1.3) + google-api-client (0.38.0) + addressable (~> 2.5, >= 2.5.1) + googleauth (~> 0.9) + httpclient (>= 2.8.1, < 3.0) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.0) + signet (~> 0.12) + google-cloud-core (1.5.0) + google-cloud-env (~> 1.0) + google-cloud-errors (~> 1.0) + google-cloud-env (1.3.3) + faraday (>= 0.17.3, < 2.0) + google-cloud-errors (1.0.1) + google-cloud-storage (1.26.2) + addressable (~> 2.5) + digest-crc (~> 0.4) + google-api-client (~> 0.33) + google-cloud-core (~> 1.2) + googleauth (~> 0.9) + mini_mime (~> 1.0) + googleauth (0.13.0) + faraday (>= 0.17.3, < 2.0) + jwt (>= 1.4, < 3.0) + memoist (~> 0.16) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (~> 0.14) + highline (1.7.10) + http-cookie (1.0.3) + domain_name (~> 0.5) + httpclient (2.8.3) + jmespath (1.4.0) + json (2.3.1) + jwt (2.2.1) + memoist (0.16.2) + mini_magick (4.10.1) + mini_mime (1.0.2) + multi_json (1.15.0) + multipart-post (2.0.0) + nanaimo (0.3.0) + naturally (2.2.0) + os (1.1.0) + plist (3.5.0) + public_suffix (4.0.5) + rake (13.0.1) + representable (3.0.4) + declarative (< 0.1.0) + declarative-option (< 0.2.0) + uber (< 0.2.0) + retriable (3.1.2) + rouge (2.0.7) + rubyzip (2.3.0) + security (0.1.3) + signet (0.14.0) + addressable (~> 2.3) + faraday (>= 0.17.3, < 2.0) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.8) + CFPropertyList + naturally + slack-notifier (2.3.2) + terminal-notifier (2.0.0) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + tty-cursor (0.7.1) + tty-screen (0.8.1) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + uber (0.1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.7) + unicode-display_width (1.7.0) + word_wrap (1.0.0) + xcodeproj (1.17.1) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + xcpretty (0.3.0) + rouge (~> 2.0.7) + xcpretty-travis-formatter (1.0.0) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + ruby + +DEPENDENCIES + fastlane + xcodeproj + +BUNDLED WITH + 2.1.4 diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 973c2c3..d280f5a 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -1,5 +1,30 @@ default_platform :ios +lane :prepare do + cocoapods + carthage(cache_builds: true, platform: "iOS") + sh "./gopenpgp_build.sh" +end + +lane :reset_build_number do + increment_build_number( + build_number: 0, + xcodeproj: "pass.xcodeproj" + ) +end + +lane :match_development do + app_identifier = "me.mssun.passforios" + match( + type: "development", + app_identifier: [app_identifier, + "#{app_identifier}.find-login-action-extension", + "#{app_identifier}.auto-fill-credential-extension", + "#{app_identifier}.shortcuts"], + readonly: true + ) +end + platform :ios do desc "Runs all tests" lane :test do @@ -9,53 +34,94 @@ platform :ios do desc "Submit a new Beta Build to Apple TestFlight" desc "This will also make sure the profile is up to date" lane :beta do + app_identifier = "me.mssun.passforiosbeta" + create_keychain( name: ENV["MATCH_KEYCHAIN_NAME"], password: ENV["MATCH_KEYCHAIN_PASSWORD"], - default_keychain: true, + default_keychain: false, unlock: true, timeout: 3600, add_to_search_list: true ) match( type: "appstore", - app_identifier: "me.mssun.passforios", - keychain_name: ENV["MATCH_KEYCHAIN_NAME"], - keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"], - readonly: true - ) - match( - type: "appstore", - app_identifier: "me.mssun.passforios.find-login-action-extension", - keychain_name: ENV["MATCH_KEYCHAIN_NAME"], - keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"], - readonly: true - ) - match( - type: "appstore", - app_identifier: "me.mssun.passforios.auto-fill-credential-extension", - keychain_name: ENV["MATCH_KEYCHAIN_NAME"], - keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"], - readonly: true - ) - match( - type: "appstore", - app_identifier: "me.mssun.passforios.shortcuts", + app_identifier: [app_identifier, + "#{app_identifier}.find-login-action-extension", + "#{app_identifier}.auto-fill-credential-extension", + "#{app_identifier}.shortcuts"], keychain_name: ENV["MATCH_KEYCHAIN_NAME"], keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"], readonly: true ) increment_build_number( - build_number: latest_testflight_build_number(version: get_version_number(target: "pass"), initial_build_number: 0) + 1, + build_number: latest_testflight_build_number( + version: get_version_number(target: "pass"), + app_identifier: app_identifier, + initial_build_number: 0 + ) + 1, xcodeproj: "pass.xcodeproj" ) build_app( scheme: "pass", + configuration: "Beta", verbose: true ) upload_to_testflight( + app_identifier: app_identifier, skip_waiting_for_build_processing: true ) + if ENV['CI'] == "true" + notify_dev + end + end + + desc "Submit a new build to AppStore" + lane :release do + app_identifier = "me.mssun.passforios" + + create_keychain( + name: ENV["MATCH_KEYCHAIN_NAME"], + password: ENV["MATCH_KEYCHAIN_PASSWORD"], + default_keychain: false, + unlock: true, + timeout: 3600, + add_to_search_list: true + ) + match( + type: "appstore", + app_identifier: [app_identifier, + "#{app_identifier}.find-login-action-extension", + "#{app_identifier}.auto-fill-credential-extension", + "#{app_identifier}.shortcuts"], + keychain_name: ENV["MATCH_KEYCHAIN_NAME"], + keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"], + readonly: true + ) + increment_build_number( + build_number: latest_testflight_build_number( + version: get_version_number(target: "pass"), + app_identifier: app_identifier, + initial_build_number: 0 + ) + 1, + xcodeproj: "pass.xcodeproj" + ) + build_app( + scheme: "pass", + configuration: "Release", + verbose: true + ) + upload_to_testflight( + app_identifier: app_identifier, + skip_waiting_for_build_processing: true + ) + if ENV['CI'] == "true" + notify_dev + end + end + + desc 'Notify developers' + lane :notify_dev do mailgun( postmaster: ENV["MY_POSTMASTER"], apikey: ENV["MY_API_KEY"], diff --git a/fastlane/Matchfile b/fastlane/Matchfile index 249baae..b08862c 100644 --- a/fastlane/Matchfile +++ b/fastlane/Matchfile @@ -1,2 +1,2 @@ -git_url "https://github.com/mssun/certificates-passforios.git" +git_url "git@github.com:mssun/certificates-passforios.git" type "development" diff --git a/icon/icon.sketch b/icon/icon.sketch index e34a81ccb9962de8327a1b61ee17198acf3e92d2..d2d0136b13f40ab6419ff19802013a90f11994c1 100644 GIT binary patch delta 26435 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