1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Bitriseで2FA認証後に複数アカウントのSandboxユーザーを扱う上で気をつけること

Last updated at Posted at 2019-12-24

追記

執筆当時はhttps://github.com/bitrise-steplib/steps-fastlane でfastlaneのstepが公開されていることが知りませんでした。
steps-fastlaneのversion2.7.0を使用していたのでそちらのコードをみればどのようにbitrise上で扱っているかがわかります。

Bitriseの2FA

BitriseではAppleIDに2FA(二段階認証)がかかっていたとしてもApp Store Connect 2FA solved on Bitriseのように設定をすることで、セッションが有効な30日間は2FAをスキップすることが可能です。

ただ以下のようなSandboxユーザーを扱うケースでハマりました。

ハマったこと

以下2つのアカウントがあるとします。

2FAの設定をしていないAppleID: apple_id_not_2fa@test.com
2FAの設定をしているAppleID: apple_id_2fa@test.com

Bitrise上で紐付いているアカウントはapple_id_2fa@test.comとします。

以下のような、2つのアカウントのSandboxユーザーを削除するfastlane actionを実行します。

# Fastfile
require 'spaceship'

lane :remove_sandbox_users do
  _remove_sandbox_users(username: "apple_id_not_2fa@test.com", password: "password", sandbox_user: "sandbox_not_2fa@test.com")
  _remove_sandbox_users(username: "apple_id_2fa@test.com", password: "password", sandbox_user: "sandbox_2fa@test.com")
end

private lane :_remove_sandbox_users do |options|
    Spaceship::Tunes.login(options[:username], options[:password])
    Spaceship::Tunes::SandboxTester.delete!([options[:sandbox_user]])
end

上記のremove_sandbox_usersをBitrise上で実行すると、sandbox_2fa@test.comは削除されますが、2FAを有効にしていないアカウント側の**sandbox_not_2fa@test.comは削除されません**。

原因

Bitrise上でapple_id_2fa@test.comを紐付けた際に、おそらくBitriseの内部でFASTLANE_SESSIONの設定とcookieが作成されています。
(ref: https://discuss.bitrise.io/t/two-factor-authentication-for-apple-id-itunes-connect-testflight-deploy/1180/25)

そのため2FAが設定されているapple_id_2fa@test.comFASTLANE_SESSIONが使用されたため、常にapple_id_2fa@test.comのログイン状態になり、apple_id_not_2fa@test.com上に作成したSandboxユーザーは削除されません。
(FASTLANE_SESSIONが設定されている場合、https://github.com/fastlane/fastlane/blob/c821aa892157ad499b03dc7693877b978db9a64c/spaceship/lib/spaceship/client.rb#L431 で読み込まれます)

いくつか挙動に疑問を感じたため、以下のようなケースをローカルで実験しました。

実験

以下2つのファイルを利用して、Bitrise上ではなく、ローカル上で確認をしました。
またcookieは、~/.fastlane/spaceship/**/cookie のことを示しています。

# Fastfile
require 'spaceship'

lane: test_login do
  Spaceship::Tunes.login("apple_id_2fa@test.com", "password")
end
.env
# fastlane/.env
FASTLANE_SESSION="fastlane_session value of apple_id_2fa@test.com"
  1. FASTLANE_SESSION="", cookieがない場合
    2FA
Screen Shot 2019-12-24 at 22.32.37.png
  1. FASTLANE_SESSION="", 有効なcookieが存在する場合
    2FAスキップ
Screen Shot 2019-12-24 at 22.31.01.png
  1. FASTLANE_SESSION="fastlane_session value of apple_id_2fa@test.com", cookieがない場合
    2FAスキップ
Screen Shot 2019-12-24 at 22.30.17.png

1以外は、2FAをスキップしてログインが成功していることがわかります。
表にまとめると以下のようになります。

ケース 2FA Skip
FASTLANE_SESSION="", cookieがない場合
FASTLANE_SESSION=""=, 有効なcookieが存在する場合
FASTLANE_SESSION="fastlane_session value of apple_id_2fa@test.com", cookieがない場合

改善案

今回のケースの改善案として、Bitriseの[Workflow][Env]に移動して、対象のworkflowのEnvironment Variables
ENV["FASTLANE_SESSION"] = ""
を設定します。

Screen Shot 2019-12-24 at 23.03.11.png

これにより、Bitrise上で2. FASTLANE_SESSION="", 有効なcookieが存在する場合と同じ状態になるため

apple_id_not_2fa@test.comの場合:
apple_id_not_2fa@test.comで通常ログイン

apple_id_2fa@test.comの場合:
apple_id_not_2fa@test.comでcookieを利用してログイン

どちらのアカウントも問題なくログインすることができ、Sandboxユーザーの作成・削除を行えます。

まとめ

複数のAppleID(2FAありなし)でSandboxユーザーを操作することはなかなかないと思いますが、もしこのようなことが起こった場合、FASTLANE_SESSIONとcookieを確認してみることをおすすめします。

関連URL

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?