αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αžαŸ’αž‰αž»αŸ†αžˆαŸ’αž˜αŸ„αŸ‡ αžŒαžΈαž˜αžΈαž‘αŸ’αžšαžΈ αžαŸ’αž‰αž»αŸ†αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž’αŸ’αž“αž€αžŸαžΆαž€αž›αŸ’αž”αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“ αžœαž·αž‘αŸ’αž™αžΆαžŸαžΆαžŸαŸ’αžšαŸ’αžαž’αŸαž˜αž’αŸαž›. αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαŸ—αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž–αžΈ αž˜αž“αŸ’αž‘αžΈαžšαž–αž·αžŸαŸ„αž’αž“αŸ Firebase - αž–αŸ„αž›αž‚αžΊαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αŸ’αžšαž”αžαžŽαŸ’αžŒαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž XCUITest αžŠαžΎαž˜αŸ”

αž˜αž»αž“αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„ Firebase Test Lab αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Android αžšαž½αž…αž αžΎαž™ αž αžΎαž™αž–αž·αžαž‡αžΆαž…αžΌαž›αž…αž·αžαŸ’αžαž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™αž‘αžΎαž”αžαŸ’αž‰αž»αŸ†αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžŸαžΆαž€αž›αŸ’αž”αž„αžŠαžΆαž€αŸ‹αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαžΆαž€αž›αŸ’αž”αž„ iOS αžšαž”αžŸαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸ…αž›αžΎαž‡αžΎαž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αžαŸ’αž‰αž»αŸ†β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αŸ’αžšαžΎ Google αž…αŸ’αžšαžΎαž“ αž αžΎαž™β€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“β€‹αž’αŸ’αžœαžΈβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αž”αžΆαž“β€‹αž…αŸαž‰β€‹αž‡αžΆβ€‹αž›αžΎαž€β€‹αžŠαŸ†αž”αžΌαž„β€‹αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αžŸαž˜αŸ’αžšαŸαž…β€‹αž…αž·αžαŸ’αžβ€‹αžŸαžšαžŸαŸαžšβ€‹αž’αžαŸ’αžαž”αž‘β€‹αž”αž„αŸ’αžšαŸ€αž“β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αžŠαŸ‚αž›β€‹αž“αŸ…β€‹αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αž›αŸ†αž”αžΆαž€αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αžΆαž“αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž UI αž“αŸ…αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„ iOS αž’αŸ’αž“αž€αž’αžΆαž…αžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αž½αž€αžœαžΆαž“αŸ…αž›αžΎαž§αž”αž€αžšαžŽαŸαž–αž·αžαž”αžΆαž“αž αžΎαž™αž“αŸ…αžαŸ’αž„αŸƒαž“αŸαŸ‡ αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™ Good Corporation αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αžŸαžΌαž˜αžŸαŸ’αžœαžΆαž‚αž˜αž“αŸαž˜αž€αž€αžΆαž“αŸ‹αž†αŸ’αž˜αžΆαŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΏαž„ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αž„αŸ’αž€αžΎαžαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ†αž”αžΌαž„αž˜αž½αž™αž…αŸ†αž“αž½αž“ - αžƒαŸ’αž›αžΆαŸ†αž„αž―αž€αž‡αž“αž“αŸ…αž›αžΎ GitHub αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαžΆαž„αžŸαž„αŸ‹ CircleCI αŸ” αžˆαŸ’αž˜αŸ„αŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αžΊ AmazingApp, bundleID αž‚αžΊ com.company.amazingapp αŸ” αžαŸ’αž‰αž»αŸ†αž”αž„αŸ’αž αžΆαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αž—αŸ’αž›αžΆαž˜αŸ— αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž€αžΆαžšαž—αŸαž“αŸ’αžαž…αŸ’αžšαž‘αŸ†αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžαž»αžŸαž‚αŸ’αž“αžΆ αžŸαžΌαž˜αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αŸ”

1. αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ”

αž”αž„αŸ’αž€αžΎαžαžŸαžΆαžαžΆαž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αž˜αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž UIαŸ–

$ git checkout develop
$ git pull
$ git checkout -b β€œfeature/add-ui-tests”

αžαŸ„αŸ‡αž”αžΎαž€αž‚αž˜αŸ’αžšαŸ„αž„αž€αŸ’αž“αž»αž„ XCode αž αžΎαž™αž”αž„αŸ’αž€αžΎαž Target αžαŸ’αž˜αžΈαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž UI [XCode -> File -> New -> Target -> iOS Testing Bundle] αžŠαŸ„αž™αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αžœαžΆαž“αžΌαžœαžˆαŸ’αž˜αŸ„αŸ‡αž–αž“αŸ’αž™αž›αŸ‹αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αžαžΆ AmazingAppUITestsαŸ”

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž“αŸ‚αž€ Build Phases αž“αŸƒ Target αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž αž αžΎαž™αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒ Target Dependencies - AmazingApp αž“αŸ…αž€αŸ’αž“αž»αž„ Compile Sources - AmazingAppUITests.swift αŸ”

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž‚αžΊαžαŸ’αžšαžΌαžœαž”αŸ‚αž„αž…αŸ‚αž€αž‡αž˜αŸ’αžšαžΎαžŸαžŸαžΆαž„αžŸαž„αŸ‹αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž‘αŸ…αž‡αžΆαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ” αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž UI αžšαž”αžŸαŸ‹αž™αžΎαž„ [XCode -> Product -> Scheme -> New Scheme] αž αžΎαž™αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ– AmazingAppUITestsαŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžαŸ’αžšαžΌαžœαžαŸ‚αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ„αž›αžŠαŸ…αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαŸ†αžαžΆαž“αŸ‹ - αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž AmazingApp αž“αž·αž„αž‚αŸ„αž›αžŠαŸ… UI - AmazingAppUITests - αž˜αžΎαž›αžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αž˜αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž UI αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ XCode αž…αž»αž…αž›αžΎαž―αž€αžŸαžΆαžšαž‚αž˜αŸ’αžšαŸ„αž„ αž αžΎαž™αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž“αŸ‚αž€ αž–αŸαžαŸŒαž˜αžΆαž“αŸ” αž…αž»αž…αž›αžΎ "+" αž αžΎαž™αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αž˜αžΈ αž§αž‘αžΆαž αžšαžŽαŸ XCtest αŸ” αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžΆαž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αž αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαžšαžΆαŸ†αž‡αžΆαž˜αž½αž™ tambourine αž“αŸ…αž–αŸαž›αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΆαžšαž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎαž€αžΌαžŠαŸ”

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž˜αžΆαž“αž‚αŸ„αž›αžŠαŸ…αž…αŸ†αž“αž½αž“αž”αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ– αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αž˜αŸ’αž”αž„ αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž―αž€αžαžΆ (αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž–αž½αž€αžœαžΆαž˜αžΆαž“αž˜αŸ‚αž“αž‘αŸ?) αž“αž·αž„αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„ UI αž‚αŸ„αž›αžŠαŸ…αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαŸ”

αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ Target AmazingApp, Build Settings tab, Code Signing Identity αž•αŸ’αž“αŸ‚αž€αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ XCtest αžŸαžΌαž˜αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ iOS αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ αžšαž…αž“αžΆαž”αŸαž‘αŸ’αž˜αž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎαž€αžΌαžŠ αžŸαžΌαž˜αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αžŸαŸ€αžœαž—αŸ…αžŠαŸƒαŸ” αž™αžΎαž„αž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αžšαž„αž–αŸαžαŸŒαž˜αžΆαž“αž“αŸƒαž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž“αŸ…αž‘αžΎαž™αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αžœαžΆαžœαž·αž‰αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αž”αž“αŸ’αžαž·αž…αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Target AmazingAppUITests αž™αžΎαž„αž’αŸ’αžœαžΎαžŠαžΌαž…αž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžš Product Bundle Identifier αž™αžΎαž„αž”αž‰αŸ’αž…αžΌαž› com.company.amazingappuitestsαŸ”

2. αžšαŸ€αž”αž…αŸ†αž‚αž˜αŸ’αžšαŸ„αž„αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Apple Developer Program

αž‘αŸ…αž€αžΆαž“αŸ‹αž‘αŸ†αž–αŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Apple αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž“αŸ‚αž€ αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽ αž“αž·αž„αž€αž˜αŸ’αžšαž„αž–αŸαžαŸŒαž˜αžΆαž“ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž‘αŸ…αž€αžΆαž“αŸ‹αž‡αž½αžšαžˆαžš αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αŸƒαž’αžΆαžαž»αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαŸ” αž”αž„αŸ’αž€αžΎαžαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αž˜αžΈαž αŸ…αžαžΆ AmazingAppUITests αž“αž·αž„ bundleID com.company.amazingappuitestsαŸ”

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž˜αžΆαž“αž±αž€αžΆαžŸαžŠαžΎαž˜αŸ’αž”αžΈαž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚... αž“αžΈαžαž·αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‚αž»αŸ†αžŸαŸ†αžŽαž„αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αžΉαž„αž€αžΆαžšαž•αŸ’αž‚αž»αŸ†αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž“αž·αž„αž€αžΆαžšαž•αŸ’αž‚αž»αŸ†αž’αŸ’αž“αž€αžšαžαŸ‹αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αž™αžΎαž„αž”αŸ’αžšαžˆαž˜αž˜αž»αžαž“αžΉαž„αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž”αžŽαŸ’αžαž»αŸ†αž…αŸ†αž“αž½αž“αž–αžΈαžšαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž˜αŸ’αžšαž„αŸ‹αž€αžΆαžšαž•αŸ’αžŠαž›αŸ‹αž˜αž½αž™αŸ” αž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’ αž˜αžΆαž“αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰ αž“αž·αž„αž†αžΎαžαž†αžΆαž™ - αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Wildcard αŸ” αž™αžΎαž„αž’αŸ’αžœαžΎαž”αŸ‚αž”αž”αž‘αž˜αŸ’αžαž„αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αž˜αžΈ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ αžŸαžΌαž˜αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Wildcard αžŠαžΌαž…αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αŸ”

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž“αŸ…αž–αŸαž›αž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ developer.apple.com αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž”αž„αŸ’αžšαž½αž˜αž”αž„αŸ’αž’αž½αž…αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαž‘αŸαŸ” αžαŸ„αŸ‡αž‘αŸ… αž‚αŸαž αž‘αŸ†αž–αŸαžšαž―αž€αžŸαžΆαžš Fastlane αž αžΎαž™αž’αžΆαž“αž’αŸ†αž–αžΈαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž–αžΈαž‚αž˜αŸ’αžšαž”αž‘αŸ…αž‚αž˜αŸ’αžšαž”αŸ”

αž’αŸ’αž“αž€αž’αžΆαž“αžŠαŸ‚αž›αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆ αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžƒαŸ’αž›αžΆαŸ†αž„αž―αž€αž‡αž“αž˜αž½αž™ αž“αž·αž„αž‚αžŽαž“αžΈαžŠαŸ‚αž›αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαž‘αžΆαŸ†αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Apple Developer Program αž“αž·αž„ Github αŸ” αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž—αŸ’αž›αžΆαž˜αŸ—αž˜αž·αž“αž˜αžΆαž“αžšαžΏαž„αž”αŸ‚αž”αž“αŸαŸ‡) αž‚αžŽαž“αžΈαž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹ [αž’αŸŠαžΈαž˜αŸ‚αž›αž€αžΆαžšαž–αžΆαžš]αž˜αž€αž‡αžΆαž˜αž½αž™αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αž›αžΆαŸ†αž„ αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžœαžΆαž‡αžΆαž˜αž½αž™ developer.apple.com αž αžΎαž™αžαŸ‚αž„αžαžΆαŸ†αž„αžœαžΆαž‡αžΆαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž™αžΎαž„αž•αŸ’αžαž›αŸ‹αžŸαž·αž‘αŸ’αž’αž·αž±αŸ’αž™αž‚αžŽαž“αžΈαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„ github αžšαž”αžŸαŸ‹αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž’αŸ’αž“αž€ αž αžΎαž™αž”αž„αŸ’αž€αžΎαžαžƒαŸ’αž›αžΆαŸ†αž„αž―αž€αž‡αž“αžαŸ’αž˜αžΈαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžŠαžΌαž…αž‡αžΆ AmazingAppMatch αŸ”

3. αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Fastlane αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž€αž½αž

αž”αžΎαž€αžŸαŸ’αžαžΆαž“αžΈαž™ αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžαžαž―αž€αžŸαžΆαžšαž‡αžΆαž˜αž½αž™αž‚αž˜αŸ’αžšαŸ„αž„ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ fastlane αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ αžŸαŸ€αžœαž—αŸ…αžŽαŸ‚αž“αžΆαŸ†αž•αŸ’αž›αžΌαžœαž€αžΆαžš. αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αž‰αŸ’αž…αžΌαž›αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ

$ fastlane init

αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž˜αŸ’αžšαž»αž‰αž±αŸ’αž™αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αŸ” αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈαž”αž½αž“ - αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ„αž™αžŠαŸƒαŸ”

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž˜αžΆαž“αžαž Fastlane αžαŸ’αž˜αžΈαžŠαŸ‚αž›αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž–αžΈαžš - Appfile αž“αž·αž„ Fastfile αŸ” αžŸαžšαž»αž”αž˜αž€ αž™αžΎαž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž“αŸ…αž€αŸ’αž“αž»αž„ Appfile αž αžΎαž™αžŸαžšαžŸαŸαžšαž€αžΆαžšαž„αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Fastfile αžŠαŸ‚αž›αž αŸ…αžαžΆ lanes αž“αŸ…αž€αŸ’αž“αž»αž„αž–αžΆαž€αŸ’αž™ Fastlane αŸ” αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž’αžΆαž“αž―αž€αžŸαžΆαžšαž•αŸ’αž›αžΌαžœαž€αžΆαžšαŸ– αžŠαž„, Π΄Π²Π°.

αž”αžΎαž€ Appfile αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αž·αž–αž“αŸ’αž’αž’αžαŸ’αžαž”αž‘αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αž αž αžΎαž™αž“αžΆαŸ†αžœαžΆαž‘αŸ…αž‘αž˜αŸ’αžšαž„αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

app_identifier "com.company.amazingapp"       # Bundle ID
apple_dev_portal_id "[email protected]"  # Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ инфраструктурный Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π°Π²ΠΎ Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ iOS ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Apple Developer Program.
team_id "LSDY3IFJAY9" # Your Developer Portal Team ID

αž™αžΎαž„αžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ…αžŸαŸ’αžαžΆαž“αžΈαž™αžœαž·αž‰ αž αžΎαž™αž™αŸ„αž„αžαžΆαž˜αžŸαŸ€αžœαž—αŸ…αžŽαŸ‚αž“αžΆαŸ†αž•αŸ’αž›αžΌαžœαž€αžΆαžš αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αŸ”

$ fastlane match init
$ fastlane match development

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž‰αŸ’αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αžŸαŸ’αž“αžΎαžŸαž»αŸ† - αžƒαŸ’αž›αžΆαŸ†αž„ αž‚αžŽαž“αžΈ αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αŸ”αž›αŸ”

αžœαžΆαž‡αžΆαž€αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈ: αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΆαžšαž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αžŠαŸ†αž”αžΌαž„ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž½αžšαž±αŸ’αž™αž”αž‰αŸ’αž…αžΌαž›αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžŒαž·αž‚αŸ’αžšαžΈαž”αžƒαŸ’αž›αžΆαŸ†αž„αŸ” αžœαžΆαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžΆαž“αŸ…αž–αŸαž›αžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ CI!

αž―αž€αžŸαžΆαžšαžαŸ’αž˜αžΈαž˜αž½αž™αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαž fastlane - Matchfile αŸ” αž”αžΎαž€αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αž·αž–αž“αŸ’αž’αž’αžαŸ’αžαž”αž‘αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αž αž αžΎαž™αž”αž„αŸ’αž αžΆαž‰αžœαžΆαžŠαžΌαž…αž“αŸαŸ‡αŸ–

git_url("https://github.com/YourCompany/AmazingAppMatch") #Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ для хранСния сСртификатов ΠΈ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΠΎΠ².
type("development") # The default type, can be: appstore, adhoc, enterprise or development
app_identifier("com.company.amazingapp")
username("[email protected]") # Your Infrastructure account Apple Developer Portal username

αž™αžΎαž„αž”αŸ†αž–αŸαž‰αžœαžΆαž™αŸ‰αžΆαž„αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž˜αžœαž·αž’αžΈαž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αŸ’αžšαžΎαž€αžΆαžšαž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž“αžΆαž–αŸαž›αž’αž“αžΆαž‚αžαžŠαžΎαž˜αŸ’αž”αžΈαž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ Crashlytics αž“αž·αž„/ឬ AppStore αž“αŸ„αŸ‡αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎ bundle ID αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αž…αžΆαŸ† αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ Wildcard αž–αž·αžŸαŸαžŸ αžŠαžΎαž˜αŸ’αž”αžΈαž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎαž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžŸαžΆαž€αž›αŸ’αž”αž„αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αžΎαž€ Fastfile αž αžΎαž™αž”αž‰αŸ’αž…αžΌαž›αž•αŸ’αž›αžΌαžœαžαŸ’αž˜αžΈαŸ–

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # создаСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Ρ€Π°Π½Ρ‡ для development сСртификата для подписи тСстовой сборки.
    )

end

αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αž·αž„αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αžΈαž™

fastlane testing_build_for_firebase

αž αžΎαž™αž™αžΎαž„αžƒαžΎαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› fastlane αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžαŸ’αž˜αžΈ αž αžΎαž™αžŠαžΆαž€αŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αŸ” αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™!

αž”αžΎαž€ XCode αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž™αžΎαž„αž˜αžΆαž“αž‘αž˜αŸ’αžšαž„αŸ‹αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹ Match Development com.company.* αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ αž‘αž˜αŸ’αžšαž„αŸ‹αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αžŠαŸ… AmazingApp αž“αž·αž„ AmazingAppUITestsαŸ”

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αžœαžΆαž“αŸ…αžŸαž›αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž•αŸ’αž›αžΌαžœαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŠαŸ†αž‘αžΎαž„αŸ” αžαŸ„αŸ‡αž‘αŸ… αžƒαŸ’αž›αžΆαŸ†αž„ αž‚αž˜αŸ’αžšαŸ„αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ fastlane αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž“αžΆαŸ†αž…αŸαž‰αž‘αŸ…αž€αžΆαž“αŸ‹ Firebase Test Lab αž“αž·αž„αž’αŸ’αžœαžΎαžαžΆαž˜αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αŸ”

αž…αžΌαžšαž…αž˜αŸ’αž›αž„-αž”αž·αž‘αž—αŸ’αž‡αžΆαž”αŸ‹αž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαžŠαžΎαž˜ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αž•αŸ’αž›αžΌαžœαžšαž”αžŸαŸ‹αž™αžΎαž„_build_for_firebase αž”αž‰αŸ’αž…αž”αŸ‹αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–


 lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"
    )

    scan(
      scheme: 'AmazingAppUITests',      # UI Test scheme
      clean: true,                        # Recommended: This would ensure the build would not include unnecessary files
      skip_detect_devices: true,          # Required
      build_for_testing: true,            # Required
      sdk: 'iphoneos',                    # Required
      should_zip_build_products: true,     # Must be true to set the correct format for Firebase Test Lab
    )

    firebase_test_lab_ios_xctest(
      gcp_project: 'AmazingAppUITests', # Your Google Cloud project name (ΠΊ этой строчкС вСрнСмся ΠΏΠΎΠ·ΠΆΠ΅)
      devices: [                          # Device(s) to run tests on
        {
          ios_model_id: 'iphonex',        # Device model ID, see gcloud command above
          ios_version_id: '12.0',         # iOS version ID, see gcloud command above
          locale: 'en_US',                # Optional: default to en_US if not set
          orientation: 'portrait'         # Optional: default to portrait if not set
        }
      ]
    )

  end

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž–αŸαž‰αž›αŸαž‰αž’αŸ†αž–αžΈαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ fastlane αž“αŸ…αž€αŸ’αž“αž»αž„ CircleCI αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž’αžΆαž“αž―αž€αžŸαžΆαžšαž•αŸ’αž›αžΌαžœαž€αžΆαžš αž˜αŸ’αžαž„, Π΄Π²Π°.

αž€αž»αŸ†αž—αŸ’αž›αŸαž…αž”αž“αŸ’αžαŸ‚αž˜αž€αž·αž…αŸ’αž…αž€αžΆαžšαžαŸ’αž˜αžΈαž‘αŸ… config.yml αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

build-for-firebase-test-lab:
   macos:
     xcode: "10.1.0"   
   working_directory: ~/project
   shell: /bin/bash --login -o pipefail
   steps:
     - checkout
     - attach_workspace:
         at: ~/project
     - run: sudo bundle install     # обновляСм зависимости
     - run:
         name: install gcloud-sdk   # Π½Π° mac ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ gcloud
         command: |
           ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null
           brew cask install google-cloud-sdk
     - run:
         name: build app for testing
         command: fastlane testing_build_for_firebase  # запускаСм lane сборки ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π² firebase

4. αž…αž»αŸ‡αž€αŸ…αž’αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αžœαž·αž‰? αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Firebase αŸ”

αž…αžΌαžšαž™αžΎαž„αž…αž»αŸ‡αž‘αŸ…αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αŸ”

αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ Firebase αž“αŸ…αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒ αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž˜αŸ‚αž“αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αž˜αž·αž“αž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αŸ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„ αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ„αž™αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαžšαž™αŸˆαž–αŸαž›αž˜αž½αž™αž†αŸ’αž“αžΆαŸ† (αžαŸ’αžšαž‡αžΆαž€αŸ‹αž˜αŸ‚αž“αž‘αŸ?)

αž™αžΎαž„αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αžŽαž“αžΈαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž™αžΎαž„ (αž¬αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžœαžΆαž˜αž·αž“αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž‘αŸ) αž αžΎαž™αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ αž‘αŸ†αž–αŸαžšαž€αž»αž„αžŸαžΌαž› Firebase. αž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αž˜αžΈαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ AmazingAppUITests αŸ”

αžœαžΆαž‡αžΆαž€αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈ: αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αž˜αž»αž“αž€αŸ’αž“αž»αž„ Fastfile in lane firebase_test_lab_ios_xctest αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš gcp_project αž‚αž½αžšαž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αžˆαŸ’αž˜αŸ„αŸ‡αž‚αž˜αŸ’αžšαŸ„αž„αŸ”

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžŸαžΆαž€αžŸαž˜αž“αžΉαž„αž™αžΎαž„αžŽαžΆαžŸαŸ‹αŸ”

αž€αž»αŸ†αž”αž·αž‘αž•αŸ’αž‘αžΆαŸ†αž„αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž‚αžŽαž“αžΈαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Gcloud - αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžœαž·αž’αžΆαž“αž€αžΆαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž˜αž½αž™ Firebase αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž€αž»αž„αžŸαžΌαž› gcloud αŸ”

Google αž•αŸ’αžαž›αŸ‹αž”αŸ’αžšαžΆαž€αŸ‹αž…αŸ†αž“αž½αž“ 300 αžŠαž»αž›αŸ’αž›αžΆαžšαž€αŸ’αž“αž»αž„αž˜αž½αž™αž†αŸ’αž“αžΆαŸ† αžŠαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‚αžΊαžŸαŸ’αž˜αžΎαž“αžΉαž„αž˜αž½αž™αž†αŸ’αž“αžΆαŸ†αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ„αž™αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαŸ” αž™αžΎαž„αž”αž‰αŸ’αž…αžΌαž›αž–αŸαžαŸŒαž˜αžΆαž“αž€αžΆαžšαž‘αžΌαž‘αžΆαžαŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αžšαž„αŸ‹αž…αžΆαŸ†αž€αžΆαžšαžŠαž€αž”αŸ’αžšαžΆαž€αŸ‹αžŸαžΆαž€αž›αŸ’αž”αž„αž…αŸ†αž“αž½αž“ $1 αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“ $300 αž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αžŽαž“αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž˜αž½αž™αž†αŸ’αž“αžΆαŸ† αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸ…αž‡αžΆαž•αŸ‚αž“αž€αžΆαžšαž–αž“αŸ’αž’αžŠαŸ„αž™αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž–αŸ’αžšαž½αž™αž”αžΆαžšαž˜αŸ’αž—αž’αŸ†αž–αžΈαž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž”αŸ’αžšαžΆαž€αŸ‹αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“αž“αŸ„αŸ‡αž‘αŸαŸ”

αž…αžΌαžšαž™αžΎαž„αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž•αŸ’αž‘αžΆαŸ†αž„αž‡αžΆαž˜αž½αž™αž‚αž˜αŸ’αžšαŸ„αž„ Firebase αž αžΎαž™αž•αŸ’αž‘αŸαžšαžœαžΆαž‘αŸ…αž‚αž˜αŸ’αžšαŸ„αž„αž–αž“αŸ’αž’ Blaze - αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž™αžΎαž„αž˜αžΆαž“αž’αŸ’αžœαžΈαž˜αž½αž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αž„αŸ‹ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž›αžΎαžŸαž–αžΈαžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž“αŸ„αŸ‡αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ gcloud αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‚αž˜αŸ’αžšαŸ„αž„ Firebase αžšαž”αžŸαŸ‹αž™αžΎαž„ αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž’αžΆαžαž»αž˜αŸ‰αžΊαž“αž»αž™αž˜αŸ "Directory" αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜ Cloud Testing API αž“αž·αž„ Cloud Tools Result API αŸ”

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž’αžΆαžαž»αž˜αŸ‰αžΊαž“αž»αž™ "IAM αž“αž·αž„αžšαžŠαŸ’αž‹αž”αžΆαž›" -> αž‚αžŽαž“αžΈαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ -> αž”αž„αŸ’αž€αžΎαžαž‚αžŽαž“αžΈαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ” αž™αžΎαž„αž•αŸ’αžαž›αŸ‹αžŸαž·αž‘αŸ’αž’αž·αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž‚αž˜αŸ’αžšαŸ„αž„αŸ”

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž”αž„αŸ’αž€αžΎαžαžŸαŸ„ API αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹ JSON

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS

αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš JSON αžŠαŸ‚αž›αž”αžΆαž“αž‘αžΆαž‰αž™αž€αž”αž“αŸ’αžαž·αž…αž€αŸ’αžšαŸ„αž™αž˜αž€ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž–αž·αž…αžΆαžšαžŽαžΆαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Test Lab αžšαž½αž…αžšαžΆαž›αŸ‹αž αžΎαž™αŸ”

5. αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ CircleCI

αžŸαŸ†αžŽαž½αžšαžŸαž˜αž αŸαžαž»αž•αž›αž€αžΎαžαž‘αžΎαž„ - αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‡αžΆαž˜αž½αž™αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹? αž™αž“αŸ’αžαž€αžΆαžšαž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“αž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž„αŸ’αž€αžΎαžαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΉαž„αž‡αž½αž™αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„ αž“αž·αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαžŸαžΎαž”αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ CircleCI αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Environment Variables

αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Firebase Test Lab αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS
αž αžΎαž™αž€αŸ†αžŽαžαŸ‹αž’αžαŸαžšαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

  • αž‚αž“αŸ’αž›αžΉαŸ‡αŸ– GOOGLE_APPLICATION_CREDENTIALS
    αžαž˜αŸ’αž›αŸƒαŸ– αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαž―αž€αžŸαžΆαžš json αž“αŸƒαžŸαŸ„αž‚αžŽαž“αžΈαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ gcloud
  • αž‚αž“αŸ’αž›αžΉαŸ‡αŸ– MATCH_PASSWORD
    αžαž˜αŸ’αž›αŸƒαŸ– αž–αžΆαž€αŸ’αž™β€‹αžŸαž˜αŸ’αž„αžΆαžαŸ‹β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αžŒαž·αž‚αŸ’αžšαžΈαž”β€‹αžƒαŸ’αž›αžΆαŸ†αž„ github αž‡αžΆαž˜αž½αž™β€‹αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš
  • αž‚αž“αŸ’αž›αžΉαŸ‡αŸ– FASTLANE_PASSWORD
    αžαž˜αŸ’αž›αŸƒαŸ– αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‚αžŽαž“αžΈαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αžαžαž› Apple Developer Portal

αž™αžΎαž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž”αž„αŸ’αž€αžΎαž PR αž αžΎαž™αž•αŸ’αž‰αžΎαžœαžΆαž‘αŸ…αž”αŸ’αžšαž’αžΆαž“αž€αŸ’αžšαž»αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αŸ”

αž›αž‘αŸ’αž’αž•αž›

αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž§αž”αžΆαž™αž€αž›αžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‡αŸ†αž αžšαž€αžΆαžšαž„αžΆαžšαž›αŸ’αž’ αž“αž·αž„αž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž– αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαžαžœαžΈαžŠαŸαž’αžΌαž“αŸ…αž›αžΎαž’αŸαž€αŸ’αžšαž„αŸ‹αž§αž”αž€αžšαžŽαŸαž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžŸαžΆαž€αž›αŸ’αž”αž„ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž–αžΈαž˜αŸ‰αžΌαžŠαŸ‚αž›αž§αž”αž€αžšαžŽαŸ iPhone X αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžŸαž·αžŠαŸ’αž‹αžΆαž“αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαžŸαž˜αŸ’αž”αžΌαžšαž”αŸ‚αž”αž–αžΈαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αŸƒαž˜αŸ‰αžΌαžŠαŸ‚αž›αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆ αž“αž·αž„αž€αŸ†αžŽαŸ‚ iOS αŸ”

αž•αŸ’αž“αŸ‚αž€αž‘αžΈαž–αžΈαžšαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž§αž‘αŸ’αž‘αž·αžŸαžŠαž›αŸ‹αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž‡αžΆαž‡αŸ†αž αžΆαž“αŸ—αž“αŸƒ Firebase Test Lab αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Android αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹