рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рдореЗрд░реЛ рдирд╛рдо рджрд┐рдорд┐рддреНрд░реА рд╣реЛ, рдо рдХрдореНрдкрдиреАрдорд╛ рдкрд░реАрдХреНрд╖рдХрдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫреБ рдПрдордИрдПрд▓ рд╡рд┐рдЬреНрдЮрд╛рдиред рднрд░реНрдЦрд░реИ рдореИрд▓реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рднрд░реНрдЦрд░рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдХреЛ рд╕рд╛рде рдХрд╛рдо рдЧрд░реНрди рд╕рдорд╛рдкреНрдд рдЧрд░реЗрдВ рдлрд╛рдпрд░рдмреЗрд╕ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ тАФ рдЕрд░реНрдерд╛рддреН, рдиреЗрдЯрд┐рдн рдкрд░реАрдХреНрд╖рдг рдлреНрд░реЗрдорд╡рд░реНрдХ XCUITest рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрдХреЛ рд╕рд╛рдеред

рдпреЛ рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рдореИрд▓реЗ рдПрдиреНрдбреНрд░реЛрдЗрдбрдХреЛ рд▓рд╛рдЧрд┐ рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реНрдпрд╛рдм рдкреНрд░рдпрд╛рд╕ рдЧрд░рд┐рд╕рдХреЗрдХреЛ рдерд┐рдПрдБ рд░ рд╡рд╛рд╕реНрддрд╡рдореИ рд╕рдмреИ рдХреБрд░рд╛ рдорди рдкрд░реНрдпреЛ, рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдЖрдИрдУрдПрд╕ рдкрд░реАрдХреНрд╖рдг рдкреВрд░реНрд╡рд╛рдзрд╛рд░рд▓рд╛рдИ рд╕рдорд╛рди рдЖрдзрд╛рд░рдорд╛ рд░рд╛рдЦреНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВред рдореИрд▓реЗ рдзреЗрд░реИ рдЧреБрдЧрд▓ рдЧрд░реНрдиреБрдкрд░реНтАНрдпреЛ рд░ рд╕рдмреИ рдХреБрд░рд╛ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рдХрд╛рдо рдЧрд░реЗрди, рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рдЕрдЭреИ рд╕рдВрдШрд░реНрд╖ рдЧрд░рд┐рд░рд╣реЗрдХрд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓реЗрдЦ рд▓реЗрдЦреНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВред

рддреНрдпрд╕реЛрднрдП, рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдЖрдИрдУрдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛUI рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЫрдиреН рднрдиреЗ, рддрдкрд╛рдЗрдБ рдкрд╣рд┐рд▓реЗ рдиреИ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЖрдЬ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдгрд╣рд░реВрдорд╛ рдЪрд▓рд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдХреГрдкрдпрд╛ рд░рд╛рдореНрд░реЛ рдирд┐рдЧрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛред рдЗрдЪреНрдЫреБрдХрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рдмрд┐рд░рд╛рд▓реЛрдорд╛ рд╕реНрд╡рд╛рдЧрдд рдЫред

рдХрдерд╛рдорд╛, рдореИрд▓реЗ рдХреЗрд╣реА рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдбреЗрдЯрд╛рдорд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ - GitHub рдорд╛ рдПрдХ рдирд┐рдЬреА рднрдгреНрдбрд╛рд░ рд░ CircleCI рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реАред рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдирд╛рдо AmazingApp рд╣реЛ, bundleID com.company.amazingapp рд╣реЛред рдо рдкрдЫрд┐рдХреЛ рднреНрд░рдо рдХрдо рдЧрд░реНрди рдпреЛ рддрдереНрдпрд╛рдЩреНрдХ рддреБрд░реБрдиреНрддреИ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджрдЫреБред

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдХреЗрд╣реА рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдлрд░рдХ рд░реВрдкрдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рдЖрдлреНрдиреЛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

1. рдкрд░реАрдХреНрд╖рдг рдЖрдлреИрдВ

UI рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢рд╛рдЦрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

$ git checkout develop
$ git pull
$ git checkout -b тАЬfeature/add-ui-testsтАЭ

XCode рдорд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЦреЛрд▓реМрдВ рд░ UI рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ [XCode -> рдлрд╛рдЗрд▓ -> рдирдпрд╛рдБ -> рд▓рдХреНрд╖реНрдп -> тАЛтАЛiOS рдкрд░реАрдХреНрд╖рдг рдмрдиреНрдбрд▓] рдХреЛ рд╕рд╛рде рдирдпрд╛рдБ рд▓рдХреНрд╖реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ, рдпрд╕рд▓рд╛рдИ рдЖрддреНрдо-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдирд╛рдо AmazingAppUITests рджрд┐рдиреБрд╣реЛрд╕реНред

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рд▓рдХреНрд╖реНрдпрдХреЛ рдмрд┐рд▓реНрдб рдЪрд░рдгрд╣рд░реВ рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рд░ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН - AmazingApp, рдХрдореНрдкрд╛рдЗрд▓ рд╕реНрд░реЛрддрд╣рд░реВрдорд╛ - AmazingAppUITests.swiftред

рдПрдЙрдЯрд╛ рд░рд╛рдореНрд░реЛ рдЕрднреНрдпрд╛рд╕ рднрдиреЗрдХреЛ рдмрд┐рднрд┐рдиреНрди рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрд▓рд╛рдИ рдЫреБрдЯреНрдЯрд╛рдЫреБрдЯреНрдЯреИ рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдЕрд▓рдЧ рдЧрд░реНрдиреБ рд╣реЛред рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ UI рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ [XCode -> рдЙрддреНрдкрд╛рджрди -> рдпреЛрдЬрдирд╛ -> рдирдпрд╛рдБ рдпреЛрдЬрдирд╛] рдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рдЙрд╣реА рдирд╛рдо рджрд┐рдиреНрдЫреМрдВ: AmazingAppUITestsред

рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдпреЛрдЬрдирд╛рдХреЛ рдирд┐рд░реНрдорд╛рдгрд▓реЗ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рдХреНрд╖реНрдп рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрдкрд░реНрдЫ - AmazingApp рд░ Target UI рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ - AmazingAppUITests - рд╕реНрдХреНрд░рд┐рдирд╕рдЯ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рдЕрд░реНрдХреЛ, рд╣рд╛рдореА UI рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рдирд┐рд░реНрдорд╛рдг рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред XCode рдорд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╛рдЗрд▓рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдЬрд╛рдирдХрд╛рд░реА рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реНред "+" рдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдирдпрд╛рдБ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ XCtestред рдХреЛрдб рд╕рд╛рдЗрдирд┐рдЩрдХреЛ рдХреБрд░рд╛ рдЖрдЙрдБрджрд╛ рдЯреНрдпрд╛рдореНрдмреЛрд░рд┐рдирд╕рдБрдЧ рдирд╛рдЪреНрдирдмрд╛рдЯ рдмрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рднрд╡рд┐рд╖реНрдпрдорд╛ рдпрд╕рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░реНрдиреЗрдЫред

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рддрдкрд╛рдИрдВрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдХрдореНрддрд┐рдорд╛ рддреАрдирд╡рдЯрд╛ рд▓рдХреНрд╖реНрдпрд╣рд░реВ рдЫрдиреН: рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдПрдХрд╛рдЗ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ (рдХреЗрд╣реА рдкрдЫрд┐, рддрд┐рдиреАрд╣рд░реВ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреН, рд╕рд╣реА?) рд░ рд╣рд╛рдореАрд▓реЗ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХрд╛ рд▓рдХреНрд╖реНрдп UI рдкрд░реАрдХреНрд╖рдгрд╣рд░реВред

Target AmazingApp, Build Settings рдЯреНрдпрд╛рдм, Code Signing Identity рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реНред XCtest рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд▓рд╛рдЧрд┐, iOS рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдХреЛрдб рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╢реИрд▓реА рдЦрдгреНрдбрдорд╛, рдореНрдпрд╛рдиреБрдЕрд▓ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╣рд╛рдореАрд▓реЗ рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдЧрд░реЗрдХрд╛ рдЫреИрдиреМрдВ, рддрд░ рд╣рд╛рдореА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рдХреЗрд╣рд┐ рдкрдЫрд┐ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗрдЫреМрдВред

Target AmazingAppUITests рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рддреНрдпрд╕реНрддреИ рдЧрд░реНрдЫреМрдВ, рддрд░ Product Bundle Identifier рд╕реНрддрдореНрднрдорд╛ рд╣рд╛рдореА com.company.amazingappuitest рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдЫреМрдВред

2. рдПрдкреНрдкрд▓ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдорд╛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрдЕрдк

рдПрдкреНрдкрд▓ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреГрд╖реНрдардорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН, рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ, рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рд╣рд░реВ рд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд╣рд░реВ рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЖрдЗрдбреЗрдиреНрдЯрд┐рдлрд╛рдпрд░ рд╡рд╕реНрддреБрдХреЛ рдПрдк рдЖрдИрдбреА рд╕реНрддрдореНрднрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реНред AmazingAppUITests рд░ bundleID com.company.amazingappuitest рднрдирд┐рдиреЗ рдирдпрд╛рдБ рдПрдк ID рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рдЕрдм рд╣рд╛рдореАрд╕рдБрдЧ рдЫреБрдЯреНрдЯреИ рдкреНрд░рдорд╛рдгрдкрддреНрд░рдХреЛ рд╕рд╛рде рд╣рд╛рдореНрд░реЛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдорд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрд░реНрдиреЗ рдЕрд╡рд╕рд░ рдЫ, рддрд░... рдкрд░реАрдХреНрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд░реНрдорд╛рдг рд╕рдВрдпреЛрдЬрди рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдЖрдлреИрдВ рдЬрдореНрдорд╛ рдЧрд░реНрдиреЗ рд░ рдкрд░реАрдХреНрд╖рдг рдзрд╛рд╡рдХрд▓рд╛рдИ рдЬрдореНрдорд╛ рдЧрд░реНрдиреЗ рд╕рдорд╛рд╡реЗрд╢ рдЫред рддрджрдиреБрд╕рд╛рд░, рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рде рджреБрдИрд╡рдЯрд╛ рдмрдиреНрдбрд▓ рдЖрдИрдбреА рд╕рд╛рдЗрди рдЧрд░реНрди рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рд╛рдордирд╛ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВред рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, рддреНрдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдЫ - Wildcard App IDред рд╣рд╛рдореА рдирдпрд╛рдБ рдПрдк рдЖрдИрдбреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдБрдЫреМрдВ, рддрд░ рд╕реНрдкрд╖реНрдЯ рдПрдк рдЖрдИрдбреАрдХреЛ рд╕рдЯреНрдЯрд╛, рд╕реНрдХреНрд░рд┐рдирд╕рдЯрдорд╛ рдЬрд╕реНрддреИ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдПрдк рдЖрдИрдбреА рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рдпрд╕ рдмрд┐рдиреНрджреБрдорд╛, рд╣рд╛рдореАрд▓реЗ developer.apple.com рд╕рдБрдЧ рдХрд╛рдо рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВ, рддрд░ рд╣рд╛рдореА рдмреНрд░рд╛рдЙрдЬрд░ рд╡рд┐рдиреНрдбреЛрд▓рд╛рдИ рдХрдо рдЧрд░реНрджреИрдиреМрдВред рдЬрд╛рдФрдВ рдлрд╛рд╕реНрдЯрд▓реЗрди рдХрд╛рдЧрдЬрд╛рдд рд╕рд╛рдЗрдЯ рд░ рдХрднрд░ рджреЗрдЦрд┐ рдХрднрд░ рд╕рдореНрдо рдорд┐рд▓рд╛рди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрд╛рд░реЗ рдкрдвреНрдиреБрд╣реЛрд╕реНред

рдПрдХ рд╕рдЪреЗрдд рдкрд╛рдардХрд▓реЗ рдпрд╛рдж рдЧрд░реЗ рдХрд┐ рдпреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╣рд╛рдореАрд▓рд╛рдИ рдПрдХ рдирд┐рдЬреА рднрдгреНрдбрд╛рд░ рд░ рдПрдкреНрдкрд▓ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд░ Github рджреБрдмреИ рдкрд╣реБрдБрдЪ рднрдПрдХреЛ рдЦрд╛рддрд╛ рдЪрд╛рд╣рд┐рдиреНрдЫред рд╣рд╛рдореАрд▓реЗ рдлрд╛рд░рдордХреЛ рдЦрд╛рддрд╛ (рдпрджрд┐ рдЕрдЪрд╛рдирдХ рддреНрдпрд╕реНрддреЛ рдХреБрдиреИ рдЪреАрдЬ рдЫреИрди рднрдиреЗ) рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ [рдИрдореЗрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд], рдмрд▓рд┐рдпреЛ рдкрд╛рд╕рд╡рд░реНрдб рд▓рд┐рдПрд░ рдЖрдЙрдиреБрд╣реЛрд╕реН, рдпрд╕рд▓рд╛рдИ developer.apple.com рдорд╛ рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рд╢рд╛рд╕рдХрдХреЛ рд░реВрдкрдорд╛ рдирд┐рдпреБрдХреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЕрд░реНрдХреЛ, рд╣рд╛рдореА рдЦрд╛рддрд╛рд▓рд╛рдИ рддрдкрд╛рдИрдВрдХреЛ рдХрдореНрдкрдиреАрдХреЛ рдЧрд┐рдердм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдорд╛ рдкрд╣реБрдБрдЪ рджрд┐рдиреНрдЫреМрдВ рд░ AmazingAppMatch рдЬрд╕реНрддрд╛ рдирд╛рдордХреЛ рд╕рд╛рде рдирдпрд╛рдБ рдирд┐рдЬреА рднрдгреНрдбрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред

3. рдлрд╛рд╕реНрдЯрд▓реЗрди рд░ рдорд┐рд▓рд╛рди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

рдПрдЙрдЯрд╛ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН, рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд╕рд╛рде рдлреЛрд▓реНрдбрд░рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рд░ рд╕рдВрдХреЗрдд рдЧрд░реЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╛рд╕реНрдЯрд▓реЗрди рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореНрдпрд╛рдиреБрдЕрд▓ред рдЖрджреЗрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реЗрдкрдЫрд┐

$ fastlane init

рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЙрдкрд▓рдмреНрдз рдЙрдкрдпреЛрдЧ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд╣рд░реВ рдЪрдпрди рдЧрд░реНрди рдкреНрд░реЗрд░рд┐рдд рдЧрд░рд┐рдиреЗрдЫред рдЪреМрдереЛ рд╡рд┐рдХрд▓реНрдк рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН - рдореНрдпрд╛рдиреБрдЕрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдкред

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рдкрд░рд┐рдпреЛрдЬрдирд╛рд╕рдБрдЧ рдирдпрд╛рдБ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдлрд╛рд╕реНрдЯрд▓реЗрди рдЫ, рдЬрд╕рдорд╛ рджреБрдИ рдлрд╛рдЗрд▓рд╣рд░реВ рдЫрдиреН - рдПрдкрдлрд╛рдЗрд▓ рд░ рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓ред рд╕рдВрдХреНрд╖реЗрдкрдорд╛, рд╣рд╛рдореА рдПрдкрдлрд╛рдЗрд▓рдорд╛ рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдЫреМрдВ, рд░ рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓рдорд╛ рдХрд╛рдорд╣рд░реВ рд▓реЗрдЦреНрдЫреМрдВ, рдлрд╛рд╕реНрдЯрд▓реЗрди рд╢рдмреНрджрд╛рд╡рд▓реАрдорд╛ рд▓реЗрди рднрдирд┐рдиреНрдЫред рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдкрдвреНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫреБ: рдкрдЯрдХ, ╨┤╨▓╨░.

рдЖрдлреНрдиреЛ рдордирдкрд░реНрдиреЗ рдкрд╛рда рд╕рдореНрдкрд╛рджрдХрдорд╛ рдПрдкрдлрд╛рдЗрд▓ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рдирд┐рдореНрди рдлрд╛рд░рдордорд╛ рд▓реНрдпрд╛рдЙрдиреБрд╣реЛрд╕реН:

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 рд╕рд░реНрднрд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд▓рд╛рдИ рдпрд╕рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реБрдиреЗрдЫ!

рдлрд╛рд╕реНрдЯрд▓реЗрди рдлреЛрд▓реНрдбрд░рдорд╛ рдирдпрд╛рдБ рдлрд╛рдЗрд▓ рджреЗрдЦрд╛ рдкрд░реЗрдХреЛ рдЫ - рдореНрдпрд╛рдЪрдлрд╛рдЗрд▓ред рдпрд╕рд▓рд╛рдИ рдЖрдлреНрдиреЛ рдордирдкрд░реНрдиреЗ рдкрд╛рда рд╕рдореНрдкрд╛рджрдХрдорд╛ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рдпрд╕рд░реА рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреБрд╣реЛрд╕реН:

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

рдпрджрд┐ рд╣рд╛рдореА рднрд╡рд┐рд╖реНрдпрдорд╛ рдХреНрд░реНрдпрд╛рд╢рд▓рд╛рдЗрдЯрд┐рдХреНрд╕ рд░/рд╡рд╛ рдПрдкрд╕реНрдЯреЛрд░рдорд╛ рдкреЛрд╕реНрдЯ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдмрд┐рд▓реНрдбрд╣рд░реВ рд╕рд╛рдЗрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдореНрдпрд╛рдЪ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рднрдиреЗ, рдЕрд░реНрдерд╛рддреН, рддрдкрд╛рдИрдВрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдХреЛ рдмрдиреНрдбрд▓ ID рдорд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрд░реНрди рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдареНрдпрд╛рдХреНрдХреИ рдпрд╕рд░реА рднрд░реНрдЫреМрдВред

рддрд░, рд╣рд╛рдореАрд▓рд╛рдИ рд╕рдореНрдЭрдирд╛ рдЕрдиреБрд╕рд╛рд░, рд╣рд╛рдореАрд▓реЗ рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрдорд╛рдгрдорд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрд░реНрди рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдЖрдИрдбреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдпреМрдВред рддреНрдпрд╕рдХрд╛рд░рдг, рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН рд░ рдирдпрд╛рдБ рд▓реЗрди рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

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

рд░ рд╣рд╛рдореА рд╣реЗрд░реНрдЫреМрдВ рдХрд┐ рдХрд╕рд░реА рдлрд╛рд╕реНрдЯрд▓реЗрдирд▓реЗ рдирдпрд╛рдБ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдпреЛ рд░ рднрдгреНрдбрд╛рд░рдорд╛ рд░рд╛рдЦреНрдпреЛред рдорд╣рд╛рди!

XCode рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реНред рдЕрдм рд╣рд╛рдореАрд╕рдБрдЧ рдореНрдпрд╛рдЪ рдбреЗрднрд▓рдкрдореЗрдиреНрдЯ com.company.* рдлрд╛рд░рдордХреЛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЫ, рдЬреБрди AmazingApp рд░ AmazingAppUITests рд▓рдХреНрд╖реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реЗрдХреНрд╕рдирдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реБрдиреБрдкрд░реНрдЫред

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рдПрд╕реЗрдореНрдмрд▓рд┐рдЩ рдЯреЗрд╕реНрдЯрдХрд╛ рд▓рд╛рдЧрд┐ рд▓реЗрди рдердкреНрди рдмрд╛рдБрдХреА рдЫред рдЬрд╛рдФрдВ рднрдгреНрдбрд╛рд░ рдлрд╛рд╕реНрдЯрд▓реЗрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд╕рд▓реЗ рдпрд╕рд▓рд╛рдИ Firebase рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдорд╛ рдирд┐рд░реНрдпрд╛рдд рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рд░ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкрд╛рд▓рдирд╛ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫред

рд╣рд╛рдореНрд░реЛ рд▓реЗрди testing_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

рд╕рд░реНрдХрд▓рд╕реАрдЖрдИрдорд╛ рдлрд╛рд╕реНрдЯрд▓реЗрди рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐, рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдкрдвреНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫреБ рдкрдЯрдХ, ╨┤╨▓╨░.

рд╣рд╛рдореНрд░реЛ 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 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫ, рд╡рд╛ рд╣реБрдирд╕рдХреНрдЫред рддреНрдпрд╣рд╛рдБ рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдиреИ рдЖрдзрд╛рд░рднреВрдд рднрд┐рдиреНрдирддрд╛ рдЫреИрди, рдХрд┐рдирднрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдирд┐рдГрд╢реБрд▓реНрдХ рдкреНрд░рдпреЛрдЧрдХреЛ рдПрдХ рд╡рд░реНрд╖рдХреЛ рд╕рд╛рде рдЫреБрдЯреНрдЯреИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ (рдареВрд▓реЛ, рд╕рд╣реА?)

рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдЦрд╛рддрд╛рдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрдЫреМрдВ (рд╡рд╛ рдХреБрдиреИ рдЕрдиреНрдп, рдпрд╕рд▓реЗ рдлрд░рдХ рдкрд╛рд░реНрджреИрди), рд░ рдЬрд╛рдиреНрдЫреМрдВ рдлрд╛рдпрд░рдмреЗрд╕ рдХрдиреНрд╕реЛрд▓ рдкреГрд╖реНрдаред AmazingAppUITests рдирд╛рдордХреЛ рдирдпрд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдпреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ: Fastfile in lane firebase_test_lab_ios_xctest рдорд╛ рдЕрдШрд┐рд▓реНрд▓реЛ рдЪрд░рдгрдорд╛ gcp_project рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╛рдорд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреБрдкрд░реНрдЫред

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╣рд╛рдореАрд▓рд╛рдИ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдорд┐рд▓реНрдЫред

рдЯреНрдпрд╛рдм рдмрдиреНрдж рдирдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЙрд╣реА рдЦрд╛рддрд╛ рдЕрдиреНрддрд░реНрдЧрдд рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН GCloud - рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрд╛рдп рд╣реЛ, рдХрд┐рдирдХрд┐ рдлрд╛рдпрд░рдмреЗрд╕рд╕рдБрдЧ рд╕рдЮреНрдЪрд╛рд░ gcloud рдХрдиреНрд╕реЛрд▓ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣реБрдиреНрдЫред

Google рд▓реЗ рдПрдХ рд╡рд░реНрд╖рдХреЛ рд▓рд╛рдЧрд┐ $ 300 рджрд┐рдЗрд░рд╣реЗрдХреЛ рдЫ, рдЬреБрди рд╕реНрд╡рдд: рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗ рд╕рдиреНрджрд░реНрднрдорд╛ рд╕реЗрд╡рд╛рдХреЛ рдирд┐рдГрд╢реБрд▓реНрдХ рдкреНрд░рдпреЛрдЧрдХреЛ рдПрдХ рд╡рд░реНрд╖ рдмрд░рд╛рдмрд░ рд╣реЛред рд╣рд╛рдореА рддрдкрд╛рдИрдВрдХреЛ рднреБрдХреНрддрд╛рдиреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдЫреМрдВ, $1 рдХреЛ рдкрд░реАрдХреНрд╖рдг рдбреЗрдмрд┐рдЯрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреБрд╣реЛрд╕реН рд░ рддрдкрд╛рдИрдВрдХреЛ рдЦрд╛рддрд╛рдорд╛ $300 рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдПрдХ рд╡рд░реНрд╖ рдкрдЫрд┐, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдирд┐: рд╢реБрд▓реНрдХ рдЯреНрдпрд╛рд░рд┐рдл рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрд╣рд╕реНрддрд╛рдиреНрддрд░рдг рд╣реБрдиреЗрдЫ, рддреНрдпрд╕реИрд▓реЗ рдкреИрд╕рд╛рдХреЛ рд╕рдореНрднрд╛рд╡рд┐рдд рд╣рд╛рдирд┐рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЪрд┐рдиреНрддрд╛ рд▓рд┐рдиреБ рдкрд░реНрджреИрдиред

Firebase рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд╕рд╛рде рдЯреНрдпрд╛рдмрдорд╛ рдлрд░реНрдХреМрдВ рд░ рдпрд╕рд▓рд╛рдИ Blaze рдЯреНрдпрд╛рд░рд┐рдл рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реМрдВ - рдЕрдм рд╣рд╛рдореАрд╕рдБрдЧ рд╕реАрдорд╛ рдирд╛рдШреЗрдХреЛ рдЦрдгреНрдбрдорд╛ рддрд┐рд░реНрдиреБ рдкрд░реНрдиреЗ рдХреБрд░рд╛ рдЫред

gcloud рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛, рд╣рд╛рдореНрд░реЛ Firebase рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН, "рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рдореБрдЦреНрдп рдореЗрдиреБ рд╡рд╕реНрддреБ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ Cloud Testing API рд░ Cloud Tools Result API рдердкреНрдиреБрд╣реЛрд╕реНред

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рддреНрдпрд╕рдкрдЫрд┐ рдореЗрдиреБ рд╡рд╕реНрддреБрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН "IAM рд░ рдкреНрд░рд╢рд╛рд╕рди" -> рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛рд╣рд░реВ -> рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╣рд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреЗ рдЕрдзрд┐рдХрд╛рд░ рджрд┐рдиреНрдЫреМрдВред

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

JSON рдврд╛рдБрдЪрд╛рдорд╛ API рдХреБрдЮреНрдЬреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛

рд╣рд╛рдореАрд▓рд╛рдИ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ JSON рдЕрд▓рд┐ рдкрдЫрд┐ рдЪрд╛рд╣рд┐рдиреНрдЫ, рддрд░ рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдкрд░реАрдХреНрд╖рдг рд▓реНрдпрд╛рдм рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рднрдПрдХреЛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред

5. рд╕рд░реНрдХрд▓рд╕реАрдЖрдИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░рд╢реНрди рдЙрдареНрдЫ - рдкрд╛рд╕рд╡рд░реНрдб рд╕рдВрдЧ рдХреЗ рдЧрд░реНрдиреЗ? рд╣рд╛рдореНрд░реЛ рдирд┐рд░реНрдорд╛рдг рдореЗрд╕рд┐рдирдХреЛ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рдЪрд░ рд╕рдВрдпрдиреНрддреНрд░рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╣рд╛рдореНрд░рд╛ рдкрд╛рд╕рд╡рд░реНрдбрд╣рд░реВ рд░ рдЕрдиреНрдп рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбрд╛рдЯрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫред CircleCI рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛, рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╣рд╛рдореА Firebase Test Lab рдорд╛ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯрд▓ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред рднрд╛рдЧ 1: iOS рдкрд░рд┐рдпреЛрдЬрдирд╛
рд░ рдирд┐рдореНрди рдЪрд░рд╣рд░реВ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН:

  • рдХреБрдЮреНрдЬреА: GOOGLE_APPLICATION_CREDENTIALS
    рдорд╛рди: gcloud рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдХреБрдЮреНрдЬреАрдХреЛ json рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рдордЧреНрд░реА
  • рдХреБрдЮреНрдЬреА: MATCH_PASSWORD
    рдорд╛рди: рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВрдХреЛ рд╕рд╛рде github рднрдгреНрдбрд╛рд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рд╕рд╡рд░реНрдб
  • рдХреБрдЮреНрдЬреА: FASTLANE_PASSWORD
    рдорд╛рди: рдПрдкреНрдкрд▓ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдкреЛрд░реНрдЯрд▓ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдЦрд╛рддрд╛ рдкрд╛рд╕рд╡рд░реНрдб

рд╣рд╛рдореА рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдмрдЪрдд рдЧрд░реНрдЫреМрдВ, PR рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ рд░ рд╕рдореАрдХреНрд╖рд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореНрд░реЛ рдЯреЛрд▓реА рдиреЗрддреГрддреНрд╡рд▓рд╛рдИ рдкрдард╛рдЙрдБрдЫреМрдВред

рдкрд░рд┐рдгрд╛рдорд╣рд░реВ

рдпреА рд╕рд░рд▓ рд╣реЗрд░рдлреЗрд░рд╣рд░реВрдХреЛ рдкрд░рд┐рдгрд╛рдордХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рдкрд░реАрдХреНрд╖рдгрдХреЛ рд╕рдордпрдорд╛ рдпрдиреНрддреНрд░ рд╕реНрдХреНрд░рд┐рдирдорд╛ рднрд┐рдбрд┐рдпреЛ рд░реЗрдХрд░реНрдб рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛рдХреЛ рд╕рд╛рде рд░рд╛рдореНрд░реЛ, рд╕реНрдерд┐рд░ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕реНрдЯреНрдпрд╛рдиреНрдб рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдпреМрдВред рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдгрдорд╛, рдореИрд▓реЗ iPhone X рдпрдиреНрддреНрд░ рдореЛрдбреЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрдВ, рддрд░ рдлрд╛рд░реНрдорд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдореЛрдбреЗрд▓рд╣рд░реВ рд░ iOS рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд╕рдВрдпреЛрдЬрдирдмрд╛рдЯ рд╕рдореГрджреНрдз рдЪрдпрди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред

рджреЛрд╕реНрд░реЛ рднрд╛рдЧ рдПрдиреНрдбреНрд░реЛрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реНрдпрд╛рдмрдХреЛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рд╕реЗрдЯрдЕрдкрдорд╛ рд╕рдорд░реНрдкрд┐рдд рд╣реБрдиреЗрдЫред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди