New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[deliver][pilot] use altool instead of using iTMSTransporter for Xcode 14 #20631
Conversation
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Care nils in some situations and Could you add test cases?
deliver/lib/deliver/runner.rb
Outdated
when "osx" | ||
package_path = FastlaneCore::PkgUploadPackageBuilder.new.generate( | ||
app_id: Deliver.cache[:app].id, | ||
pkg_path: pkg_path, | ||
package_path: "/tmp", | ||
platform: platform | ||
) | ||
result = transporter.upload(package_path: package_path, asset_path: pkg_path) | ||
result = transporter.upload(package_path: package_path, asset_path: pkg_pat, platform: "macos") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typo
result = transporter.upload(package_path: package_path, asset_path: pkg_pat, platform: "macos") | |
result = transporter.upload(package_path: package_path, asset_path: pkg_path, platform: "macos") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can't you pass platform
instead?
Is it necessary to pass macos
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
since altool needs a option -t
and it accepts ios
, macos
or appletvos
. osx
cannot be passed so I convert it here. but it may be better to do it inside build command construction function. let me fix it
def execute(command, hide_output) | ||
if Helper.test? | ||
yield(nil) if block_given? | ||
return command |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return command | |
command |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I found it is necessary for test case, so I reverted
end | ||
|
||
def file_upload_option(source) | ||
return "-f #{source.shellescape}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return "-f #{source.shellescape}" | |
"-f #{source.shellescape}" |
@@ -490,7 +613,14 @@ def initialize(user = nil, password = nil, use_shell_script = false, provider_sh | |||
|
|||
@jwt = jwt | |||
|
|||
@transporter_executor = use_shell_script ? ShellScriptTransporterExecutor.new : JavaTransporterExecutor.new | |||
if !use_shell_script && upload && !Helper.user_defined_itms_path? && Helper.mac? && Helper.xcode_at_least?(14) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you place these conditions on another instance method? lile should_use_altool?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done!
Co-authored-by: Kohki Miki <giginet.net@gmail.com>
Co-authored-by: Kohki Miki <giginet.net@gmail.com>
Co-authored-by: Kohki Miki <giginet.net@gmail.com>
@@ -657,6 +787,12 @@ def provider_ids | |||
|
|||
TWO_FACTOR_ENV_VARIABLE = "FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD" | |||
|
|||
# Returns whether altool should be used or ItunesTransporter should be used | |||
def should_use_altool(upload, use_shell_script) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In Ruby convention, methods return boolean should end with ?
. like should_use_altool?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done!
5bd7d3f
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work @freddi-kit please see the attached crash when i am using this PR using pilot+api_key
I also updated this PR description to test this PR by others and provide us valuable feedbacks
i will test and review more...
("API_PRIVATE_KEYS_DIR=#{api_key[:key_filepath]}" if api_key), | ||
"xcrun altool", | ||
"--upload-app", | ||
("-u #{username.shellescape}" unless api_key), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @freddi-kit
Nice work! i am just testing this PR and it got crashed in this line shellescape
Also, the username is indeed nil in my case because i am using API-Key inside pilot so technially this line should not even execute. i think, maybe we are not passing the api_key correct way in this method....
3: from /Users/distiller/project/vendor/bundle/ruby/2.7.0/bundler/gems/fastlane-ed28c906445c/fastlane/lib/fastlane/actions/upload_to_testflight.rb:34:in `run'
2: from /Users/distiller/project/vendor/bundle/ruby/2.7.0/bundler/gems/fastlane-ed28c906445c/pilot/lib/pilot/build_manager.rb:50:in `upload'
1: from /Users/distiller/project/vendor/bundle/ruby/2.7.0/bundler/gems/fastlane-ed28c906445c/fastlane_core/lib/fastlane_core/itunes_transporter.rb:697:in `upload'
/Users/distiller/project/vendor/bundle/ruby/2.7.0/bundler/gems/fastlane-ed28c906445c/fastlane_core/lib/fastlane_core/itunes_transporter.rb:242:in `build_upload_command': undefined method `shellescape' for nil:NilClass (NoMethodError)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
btw, pilot + username(apple-id), password
is working well 🚀
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh Thank you for reviewing!
in my environment, pilot+api_key works. and here is my example Fastfile.
How is mine and your Fastfile different?
default_platform(:ios)
platform :ios do
desc "Description of what the lane does"
lane :custom_lane do
xcode_select("/Applications/Xcode_14 beta 6.app")
api_key = app_store_connect_api_key(
key_id: "XXXXXX",
issuer_id: "XXX-XXX-XXXX",
key_filepath: "./AuthKey_XXXX.p8",
duration: 1200,
in_house: false
)
pilot(api_key: api_key)
end
end
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah... sorry I may found there is a issue to check password is available or not, please wait a moment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I noticed this is simple issue comes from my less experience Ruby 🙇 I can fix it soon
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @freddi-kit! Thank you so much for working on that.
I second @raid5 comment. I believe there's an unhandled case when using api_key_path
(instead of api_key
):
fastlane_core/lib/fastlane_core/itunes_transporter.rb:241:in
build_upload_command': undefined method
shellescape' for nil:NilClass (NoMethodError)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just investigated and it is bug, and it requires a little more changes to support it api_key_path. I'm happy if you wait for it 🙇
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed! 22cfcec
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome this works great! I was able to successfully upload to TestFlight now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same! Thank you so much @freddi-kit. As others said:
Some heroes don't wear capes, @freddi-kit 😁
@@ -568,9 +690,11 @@ def upload(app_id = nil, dir = nil, package_path: nil, asset_path: nil) | |||
|
|||
password_placeholder = @jwt.nil? ? 'YourPassword' : nil | |||
jwt_placeholder = @jwt.nil? ? nil : 'YourJWT' | |||
api_key_plaseholder = nil unless @api_key.nil? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
api_key_plaseholder = nil unless @api_key.nil? | |
api_key_placeholder = nil unless @api_key.nil? |
please fix this spell in other places too...
@freddi-kit Thanks and Great job! I'm using the pilot method with api_key |
Oh, thank you for reporting 🙇 Let me investigate it @azilbershtein |
@azilbershtein could you share me detailed stack trace? |
|
@azilbershtein could you share me the detail Fastfile around |
@freddi-kit Thanks!
#The json_api_key is the format of {key: "****, "issuer_id": ***, "key_id: **}
|
Since we don't need a deep copy of the That being said, I'd expect |
gem "fastlane", :git => "https://github.com/freddi-kit/fastlane.git", :branch => "pilot-apikey-dup" could you try this branch? I updated fixing recommended by #20631 (comment) |
Hi ! I just use your branch and got the same result: Logs/Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/ui/interface.rb:141:in `user_error!': [!] Could not find transporter at /Applications/Xcode.app/Contents/Developer/. Please make sure you set the correct path to your Xcode installation. (FastlaneCore::Interface::FastlaneError) from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/ui/ui.rb:17:in `method_missing' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/helper.rb:244:in `itms_path' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/itunes_transporter.rb:447:in `execute' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/itunes_transporter.rb:576:in `upload' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/pilot/lib/pilot/build_manager.rb:50:in `upload' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/actions/upload_to_testflight.rb:34:in `run' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:255:in `block in execute_action' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:229:in `chdir' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:229:in `execute_action' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/fast_file.rb:159:in `method_missing' from Fastfile:123:in `block (2 levels) in parsing_binding' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/lane.rb:33:in `call' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:49:in `block in execute' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:45:in `chdir' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:45:in `execute' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/lane_manager.rb:47:in `cruise_lane' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/command_line_handler.rb:36:in `handle' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/commands_generator.rb:110:in `block (2 levels) in run' from /Library/Ruby/Gems/2.6.0/gems/commander-4.6.0/lib/commander/command.rb:187:in `call' from /Library/Ruby/Gems/2.6.0/gems/commander-4.6.0/lib/commander/command.rb:157:in `run' from /Library/Ruby/Gems/2.6.0/gems/commander-4.6.0/lib/commander/runner.rb:444:in `run_active_command' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:124:in `run!' from /Library/Ruby/Gems/2.6.0/gems/commander-4.6.0/lib/commander/delegates.rb:18:in `run!' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/commands_generator.rb:354:in `run' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/commands_generator.rb:43:in `start' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/cli_tools_distributor.rb:123:in `take_off' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/bin/fastlane:23:in `' from /usr/local/bin/fastlane:23:in `load' from /usr/local/bin/fastlane:23:in `' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli/exec.rb:58:in `load' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli/exec.rb:58:in `kernel_load' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli/exec.rb:23:in `run' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli.rb:483:in `exec' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli.rb:31:in `dispatch' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli.rb:25:in `start' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/exe/bundle:48:in `block in ' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/friendly_errors.rb:103:in `with_friendly_errors' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/exe/bundle:36:in `' from /usr/local/bin/bundle:23:in `load' from /usr/local/bin/bundle:23:in `' /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/ui/interface.rb:141:in `user_error!': Could not find transporter at /Applications/Xcode.app/Contents/Developer/. Please make sure you set the correct path to your Xcode installation. (FastlaneCore::Interface::FastlaneError) from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/ui/ui.rb:17:in `method_missing' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/helper.rb:244:in `itms_path' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/itunes_transporter.rb:447:in `execute' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/itunes_transporter.rb:576:in `upload' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/pilot/lib/pilot/build_manager.rb:50:in `upload' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/actions/upload_to_testflight.rb:34:in `run' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:255:in `block in execute_action' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:229:in `chdir' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:229:in `execute_action' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/fast_file.rb:159:in `method_missing' from Fastfile:123:in `block (2 levels) in parsing_binding' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/lane.rb:33:in `call' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:49:in `block in execute' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:45:in `chdir' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/runner.rb:45:in `execute' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/lane_manager.rb:47:in `cruise_lane' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/command_line_handler.rb:36:in `handle' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/commands_generator.rb:110:in `block (2 levels) in run' from /Library/Ruby/Gems/2.6.0/gems/commander-4.6.0/lib/commander/command.rb:187:in `call' from /Library/Ruby/Gems/2.6.0/gems/commander-4.6.0/lib/commander/command.rb:157:in `run' from /Library/Ruby/Gems/2.6.0/gems/commander-4.6.0/lib/commander/runner.rb:444:in `run_active_command' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:124:in `run!' from /Library/Ruby/Gems/2.6.0/gems/commander-4.6.0/lib/commander/delegates.rb:18:in `run!' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/commands_generator.rb:354:in `run' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/commands_generator.rb:43:in `start' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/fastlane/lib/fastlane/cli_tools_distributor.rb:123:in `take_off' from /Library/Ruby/Gems/2.6.0/gems/fastlane-2.209.1/bin/fastlane:23:in `' from /usr/local/bin/fastlane:23:in `load' from /usr/local/bin/fastlane:23:in `' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli/exec.rb:58:in `load' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli/exec.rb:58:in `kernel_load' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli/exec.rb:23:in `run' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli.rb:483:in `exec' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli.rb:31:in `dispatch' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/cli.rb:25:in `start' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/exe/bundle:48:in `block in ' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/lib/bundler/friendly_errors.rb:103:in `with_friendly_errors' from /Library/Ruby/Gems/2.6.0/gems/bundler-2.3.14/exe/bundle:36:in `' from /usr/local/bin/bundle:23:in `load' from /usr/local/bin/bundle:23:in `' |
@Kiruel it is not same result. It looks fastlane tries to find old transporter and it fails. I'm expecting your fastlane still old one |
@Kiruel please wait for official gem update. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Congratulations! 🎉 This was released as part of fastlane 2.210.0 🚀
@Kiruel please try official 2.210.0 version instead of master/freddi-kit branch |
@freddi-kit It works with |
@azilbershtein cool, let me create patch later |
@AliSoftware @giginet |
I will test in couple hours a new version with the new fastlane version. Just a question the |
@Kiruel yep |
Amazing job thanks @freddi-kit :) ! |
Just tested my CI pipeline with Fastlane 2.210.0 and Xcode 14, it all worked like a charm, no configuration changes needed. Truly amazing work, thank you @freddi-kit and all the contributors! 🚀 |
Checklist
bundle exec rspec
from the root directory to see all new and existing tests passbundle exec rubocop -a
to ensure the code style is validci/circleci
builds in the "All checks have passed" section of my PR (connect CircleCI to GitHub if not)Motivation and Context
Resolves #20371
ITMSTransporter is officially removed from Xcode 14 beta and now it is only available on Transporter.app.
Apple recommends to use altool instead.
Description
Implemlemented
Tested
Testing Steps
Gemfile
to 👇 and runbundle install
,bundle update fastlane
, orbundle update
I tested by pure project with below fastfile
TODOs (In other PR)