рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рдорд╛рдЭреЗ рдирд╛рд╡ рджрд┐рдорд┐рддреНрд░реА рдЖрд╣реЗ, рдореА рдХрдВрдкрдиреАрдд рдкрд░реАрдХреНрд╖рдХ рдореНрд╣рдгреВрди рдХрд╛рдо рдХрд░рддреЛ рдПрдордИрдПрд▓ рд╡рд┐рдЬреНрдЮрд╛рди. рдЕрдЧрджреА рдЕрд▓реАрдХрдбреЗ рдореА рдХрдбреВрди рддреБрд▓рдиреЗрдиреЗ рдЕрд▓реАрдХрдбреАрд▓ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд╣рд╛рддрд╛рд│рдгреЗ рдкреВрд░реНрдг рдХреЗрд▓реЗ рдлрд╛рдпрд░рдмреЗрд╕ рдЪрд╛рдЪрдгреА рдкреНрд░рдпреЛрдЧрд╢рд╛рд│рд╛ тАФ рдореНрд╣рдгрдЬреЗ, рдореВрд│ рдЪрд╛рдЪрдгреА рдлреНрд░реЗрдорд╡рд░реНрдХ XCUITest рд╡рд╛рдкрд░реВрди iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рд╡рд╛рджреНрдп рдЪрд╛рдЪрдгреАрд╕рд╣.

рдпрд╛рдЖрдзреА, рдореА рдЕрдБрдбреНрд░реЙрдЗрдбрд╕рд╛рдареА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдм рд╡рд╛рдкрд░реВрди рдкрд╛рд╣рд┐рд▓реА рд╣реЛрддреА рдЖрдгрд┐ рдорд▓рд╛ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЖрд╡рдбрд▓реЗ, рдореНрд╣рдгреВрди рдореА рдкреНрд░реЛрдЬреЗрдХреНрдЯрдЪреА iOS рдЪрд╛рдЪрдгреА рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рддреНрдпрд╛рдЪ рдкрд╛рдпрд╛рд╡рд░ рдареЗрд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. рдорд▓рд╛ рдЦреВрдк Google рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ рдЖрдгрд┐ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдкреНрд░рдердордЪ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЭрд╛рд▓реЗ рдирд╛рд╣реА, рдореНрд╣рдгреВрди рдореА рдЕрдЬреВрдирд╣реА рд╕рдВрдШрд░реНрд╖ рдХрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛рдВрд╕рд╛рдареА рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреЗ рдард░рд╡рд▓реЗ.

рддреНрдпрд╛рдореБрд│реЗ, рдЬрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ 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 рд╣реЗ рд╕реНрд╡рдпрдВ-рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрд╛рддреНрдордХ рдирд╛рд╡ рджреЗрдКрди.

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЯрд╛рд░реНрдЧреЗрдЯрдЪреНрдпрд╛ рдмрд┐рд▓реНрдб рдлреЗрдЬ рд╡рд┐рднрд╛рдЧрд╛рдд рдЬрд╛ рдЖрдгрд┐ рдЯрд╛рд░реНрдЧреЗрдЯ рдбрд┐рдкреЗрдВрдбреЗрдиреНрд╕реАрдЬ - AmazingApp, рдХрдВрдкрд╛рдЗрд▓ рд╕реЛрд░реНрд╕реЗрд╕ - AmazingAppUITests.swift рдордзреНрдпреЗ рддрдкрд╛рд╕рд╛.

рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рд╕рд░рд╛рд╡ рдореНрд╣рдгрдЬреЗ рд╡рд┐рд╡рд┐рдз рдмрд┐рд▓реНрдб рдкрд░реНрдпрд╛рдпрд╛рдВрдирд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдпреЛрдЬрдирд╛рдВрдордзреНрдпреЗ рд╡реЗрдЧрд│реЗ рдХрд░рдгреЗ. рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ UI рдЪрд╛рдЪрдгреНрдпрд╛рдВрд╕рд╛рдареА рдПрдХ рдпреЛрдЬрдирд╛ рддрдпрд╛рд░ рдХрд░рддреЛ [XCode -> рдЙрддреНрдкрд╛рджрди -> рдпреЛрдЬрдирд╛ -> рдирд╡реАрди рдпреЛрдЬрдирд╛] рдЖрдгрд┐ рддрд┐рд▓рд╛ рддреЗрдЪ рдирд╛рд╡ рджреЗрддреЛ: AmazingAppUITests.

рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдпреЛрдЬрдиреЗрдЪреНрдпрд╛ рдмрд┐рд▓реНрдбрдордзреНрдпреЗ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреЗ рд▓рдХреНрд╖реНрдп рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ - AmazingApp рдЖрдгрд┐ Target UI рдЪрд╛рдЪрдгреНрдпрд╛ - AmazingAppUITests - рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкрд╣рд╛

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рдкреБрдвреЗ, рдЖрдореНрд╣реА UI рдЪрд╛рдЪрдгреНрдпрд╛рдВрд╕рд╛рдареА рдирд╡реАрди рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рддрдпрд╛рд░ рдХрд░рддреЛ. XCode рдордзреНрдпреЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛ рдЖрдгрд┐ рдорд╛рд╣рд┐рддреА рд╡рд┐рднрд╛рдЧрд╛рдд рдЬрд╛. тАЬ+тАЭ рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛ рдЖрдгрд┐ рдирд╡реАрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рддрдпрд╛рд░ рдХрд░рд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде XCtest. рдЬреЗрд╡реНрд╣рд╛ рдХреЛрдб рд╕рд╛рдЗрдирд┐рдВрдЧрдЪрд╛ рдкреНрд░рд╢реНрди рдпреЗрддреЛ рддреЗрд╡реНрд╣рд╛ рдбрдл рд╡рд╛рдЬрд╡реВрди рдирд╛рдЪреВ рдирдпреЗ рдореНрд╣рдгреВрди рдЖрдореНрд╣рд╛рд▓рд╛ рднрд╡рд┐рд╖реНрдпрд╛рдд рдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓.

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рддреБрдордЪреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдордзреНрдпреЗ рдХрд┐рдорд╛рди рддреАрди рд▓рдХреНрд╖реНрдпреЗ рдЖрд╣реЗрдд: рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдпреБрдирд┐рдЯ рдЪрд╛рдЪрдгреНрдпрд╛ (рд╢реЗрд╡рдЯреА, рддреНрдпрд╛ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗрдд, рдмрд░реЛрдмрд░?) рдЖрдгрд┐ рдЖрдореНрд╣реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд▓рдХреНрд╖реНрдп UI рдЪрд╛рдЪрдгреНрдпрд╛.

Target AmazingApp, Build Settings tab, Code Signing Identity рд╡рд┐рднрд╛рдЧрд╛рдд рдЬрд╛. XCtest рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА, iOS рд╡рд┐рдХрд╕рдХ рдирд┐рд╡рдбрд╛. рдХреЛрдб рд╕рд╛рдЗрдирд┐рдВрдЧ рд╢реИрд▓реА рд╡рд┐рднрд╛рдЧрд╛рдд, рдореЕрдиреНрдпреБрдЕрд▓ рдирд┐рд╡рдбрд╛. рдЖрдореНрд╣реА рдЕрдЬреВрди рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд┐рдВрдЧ рдкреНрд░реЛрдлрд╛рдИрд▓ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рдирд┐рд╢реНрдЪрд┐рддрдкрдгреЗ рддреНрдпрд╛рд╡рд░ рдереЛрдбреНрдпрд╛ рд╡реЗрд│рд╛рдиреЗ рдкрд░рдд рдпреЗрдК.

Target AmazingAppUITests рд╕рд╛рдареА рдЖрдореНрд╣реА рддреЗрдЪ рдХрд░рддреЛ, рдкрд░рдВрддреБ рдЙрддреНрдкрд╛рджрди рдмрдВрдбрд▓ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рдХреЙрд▓рдордордзреНрдпреЗ рдЖрдореНрд╣реА com.company.amazingappuitest рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ.

2. рдНрдкрд▓ рдбреЗрд╡реНрд╣рд▓рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░рдгреЗ

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

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

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

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рдЖрдореНрд╣реА developer.apple.com рд╕рд╣ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдХреЗрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рдмреНрд░рд╛рдЙрдЭрд░ рд╡рд┐рдВрдбреЛ рдХрдореА рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рдЪрд▓ рдЬрд╛рдКрдпрд╛ рдлрд╛рд╕реНрдЯрд▓реЗрди рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рд╕рд╛рдЗрдЯ рдЖрдгрд┐ рдХрд╡реНрд╣рд░рдкрд╛рд╕реВрди рдХрд╡реНрд╣рд░рдкрд░реНрдпрдВрдд рдореЕрдЪ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдмрджреНрджрд▓ рд╡рд╛рдЪрд╛.

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

3. рдлрд╛рд╕реНрдЯрд▓реЗрди рдЖрдгрд┐ рдореЕрдЪ рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╕реЗрдЯ рдХрд░рдгреЗ

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

$ fastlane init

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

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдирд╡реАрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдлрд╛рд╕реНрдЯрд▓реЗрди рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рджреЛрди рдлрд╛рдпрд▓реА рдЖрд╣реЗрдд - рдНрдкрдлрд╛рдЗрд▓ рдЖрдгрд┐ рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓. рдереЛрдбрдХреНрдпрд╛рдд, рдЖрдореНрд╣реА Appfile рдордзреНрдпреЗ рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ рдЖрдгрд┐ Fastfile рдордзреНрдпреЗ рдЬреЙрдмреНрд╕ рд▓рд┐рд╣рд┐рддреЛ, рдЬреНрдпрд╛рд▓рд╛ 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 рд╕рд░реНрд╡реНрд╣рд░ рд╕реЗрдЯ рдХрд░рддрд╛рдирд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓!

рдлрд╛рд╕реНрдЯрд▓реЗрди рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рдПрдХ рдирд╡реАрди рдлрд╛рдЗрд▓ рдЖрд▓реА рдЖрд╣реЗ - рдореЕрдЪрдлрд╛рдИрд▓. рддреЗ рддреБрдордЪреНрдпрд╛ рдЖрд╡рдбрддреНрдпрд╛ рдордЬрдХреВрд░ рд╕рдВрдкрд╛рджрдХрд╛рдд рдЙрдШрдбрд╛ рдЖрдгрд┐ рдпрд╛рдкреНрд░рдорд╛рдгреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рд╛:

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

рдХреНрд░реЕрд╢рд▓рд╛рдЗрдЯрд┐рдХреНрд╕ рдЖрдгрд┐/рдХрд┐рдВрд╡рд╛ AppStore рдордзреНрдпреЗ рдкреНрд░рджрд░реНрд╢рдирд╛рд╕рд╛рдареА рдмрд┐рд▓реНрдбрд╡рд░ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдореНрд╣рдгрдЬреЗрдЪ рддреБрдордЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рдЪреНрдпрд╛ рдмрдВрдбрд▓ рдЖрдпрдбреАрд╡рд░ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ рднрд╡рд┐рд╖реНрдпрд╛рдд рд╕рд╛рдордирд╛ рд╡рд╛рдкрд░рд╛рдпрдЪрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдореНрд╣реА рддреЗ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рднрд░рддреЛ.

рдкрд░рдВрддреБ, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рддреЗ рдХреА, рдЖрдореНрд╣реА рдЪрд╛рдЪрдгреА рдмрд┐рд▓реНрдбрд╡рд░ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдЖрдпрдбреА рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдореНрд╣рдгреВрди, рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓ рдЙрдШрдбрд╛ рдЖрдгрд┐ рдирд╡реАрди рд▓реЗрди рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛:

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 рд▓рдХреНрд╖реНрдпрд╛рдВрд╕рд╛рдареА рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд┐рдВрдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рдЪрд╛рдЪрдгреНрдпрд╛ рдПрдХрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓реЗрди рдЬреЛрдбрдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ. рдЪрд▓ рдЬрд╛рдКрдпрд╛ рднрд╛рдВрдбрд╛рд░ рдлрд╛рд╕реНрдЯрд▓реЗрдирд╕рд╛рдареА рдПрдХ рдкреНрд▓рдЧрдЗрди рдкреНрд░рдХрд▓реНрдк рдЬреЛ рдлрд╛рдпрд░рдмреЗрд╕ рдЪрд╛рдЪрдгреА рд▓реЕрдмрдордзреНрдпреЗ рдирд┐рд░реНрдпрд╛рдд рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрдгрд┐ рд╕реВрдЪрдирд╛рдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рдгреЗ рд╕реЛрдкреЗ рдХрд░рддреЗ.

рдореВрд│ рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░реВрди рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░реВ рдпрд╛ рдЬреЗрдгреЗрдХрд░реВрди рдЖрдордЪреЗ рд▓реЗрди 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

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. рдЖрдордЪреНрдпрд╛ рдЪрд╛рдЪрдгреА рдЦрдВрдбрдкреАрдард╛рдЪреЗ рдХрд╛рдп? рдлрд╛рдпрд░рдмреЗрд╕ рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ.

рд▓реЗрдЦ рдХрд╢рд╛рд╕рд╛рдареА рд▓рд┐рд╣рд┐рд▓рд╛ рддреЗ рдЦрд╛рд▓реА рдЙрддрд░реВрдпрд╛.

рдХрджрд╛рдЪрд┐рдд рддреБрдордЪрд╛ рдЕтАНреЕрдк рдореЛрдлрдд рдпреЛрдЬрдиреЗрд╡рд░ рдлрд╛рдпрд░рдмреЗрд╕ рд╡рд╛рдкрд░рдд рдЕрд╕реЗрд▓ рдХрд┐рдВрд╡рд╛ рдЕрдЬрд┐рдмрд╛рдд рдирд╛рд╣реА. рдпрд╛рдд рдХреЛрдгрддрд╛рд╣реА рдореВрд▓рднреВрдд рдлрд░рдХ рдирд╛рд╣реА, рдХрд╛рд░рдг рдЪрд╛рдЪрдгреА рдЧрд░рдЬрд╛рдВрд╕рд╛рдареА рдЖрдореНрд╣реА рдПрдХ рд╡рд░реНрд╖ рд╡рд┐рдирд╛рдореВрд▓реНрдп рд╡рд╛рдкрд░рд╛рд╕рд╣ рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ (рдЫрд╛рди, рдмрд░реЛрдмрд░?)

рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЦрд╛рддреНрдпрд╛рдд рд▓реЙрдЧ рдЗрди рдХрд░рддреЛ (рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХреЛрдгрддреЗрд╣реА, рдХрд╛рд╣реА рдлрд░рдХ рдкрдбрдд рдирд╛рд╣реА), рдЖрдгрд┐ рд╡рд░ рдЬрд╛рддреЛ рдлрд╛рдпрд░рдмреЗрд╕ рдХрдиреНрд╕реЛрд▓ рдкреГрд╖реНрда. AmazingAppUITests рдирд╛рд╡рд╛рдЪрд╛ рдирд╡реАрди рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХрд░рд╛.

рд╣реЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рдлрд╛рд╕реНрдЯрдлрд╛рдИрд▓ рдЗрди рд▓реЗрди рдлрд╛рдпрд░рдмреЗрд╕_рдЯреЗрд╕реНрдЯ_рд▓реЕрдм_рдЖрдпрдУрдПрд╕_рдПрдХреНрд╕рдХреНрдЯреЗрд╕реНрдЯ рдордзреАрд▓ рдорд╛рдЧреАрд▓ рдЪрд░рдгрд╛рдд gcp_project рдкреЕрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╢реА рдЬреБрд│рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рдбреАрдлреЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрд╣реЗрдд.

рдЯреЕрдм рдмрдВрдж рдХрд░реВ рдирдХрд╛, рддреНрдпрд╛рдЪ рдЦрд╛рддреНрдпрд╛рдЦрд╛рд▓реА рдиреЛрдВрджрдгреА рдХрд░рд╛ GCloud - рд╣реЗ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрд╛рдп рдЖрд╣реЗ, рдХрд╛рд░рдг рдлрд╛рдпрд░рдмреЗрд╕рд╢реА рд╕рдВрд╡рд╛рдж gcloud рдХрдиреНрд╕реЛрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд╛рдкрд░реВрди рд╣реЛрддреЛ.

Google рдПрдХрд╛ рд╡рд░реНрд╖рд╛рд╕рд╛рдареА $300 рджреЗрдд рдЖрд╣реЗ, рдЬреЗ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд рд╕реЗрд╡реЗрдЪреНрдпрд╛ рдореЛрдлрдд рд╡рд╛рдкрд░рд╛рдЪреНрдпрд╛ рд╡рд░реНрд╖рд╛рдЪреНрдпрд╛ рд╕рдорддреБрд▓реНрдп рдЖрд╣реЗ. рдЖрдореНрд╣реА рддреБрдордЪреА рджреЗрдп рдорд╛рд╣рд┐рддреА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ, $1 рдЪреНрдпрд╛ рдЪрд╛рдЪрдгреА рдбреЗрдмрд┐рдЯрдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЛ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рдЦрд╛рддреНрдпрд╛рдд $300 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЛ. рдПрдХрд╛ рд╡рд░реНрд╖рд╛рдирдВрддрд░, рдкреНрд░рдХрд▓реНрдк рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЯреЕрд░рд┐рдл рдкреНрд▓реЕрдирдордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓, рддреНрдпрд╛рдореБрд│реЗ рдкреИрд╢рд╛рдЪреНрдпрд╛ рд╕рдВрднрд╛рд╡реНрдп рдиреБрдХрд╕рд╛рдирд╛рдмрджреНрджрд▓ рдХрд╛рд│рдЬреА рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.

рдЪрд▓рд╛ рдлрд╛рдпрд░рдмреЗрд╕ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╣ рдЯреЕрдмрд╡рд░ рдкрд░рдд рдпреЗрдК рдЖрдгрд┐ рддреЗ рдмреНрд▓реЗрдЭ рдЯреЕрд░рд┐рдл рдкреНрд▓реЕрдирдордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░реВ - рдЖрддрд╛ рдорд░реНрдпрд╛рджрд╛ рдУрд▓рд╛рдВрдбрд▓реНрдпрд╛рд╕ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдкреИрд╕реЗ рднрд░рд╛рдпрдЪреЗ рдЖрд╣реЗрдд.

gcloud рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ, рдЖрдордЪрд╛ рдлрд╛рдпрд░рдмреЗрд╕ рдкреНрд░рдХрд▓реНрдк рдирд┐рд╡рдбрд╛, "рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рдореБрдЦреНрдп рдореЗрдиреВ рдЖрдпрдЯрдо рдирд┐рд╡рдбрд╛ рдЖрдгрд┐ рдХреНрд▓рд╛рдЙрдб рдЪрд╛рдЪрдгреА API рдЖрдгрд┐ рдХреНрд▓рд╛рдЙрдб рдЯреВрд▓реНрд╕ рдкрд░рд┐рдгрд╛рдо API рдЬреЛрдбрд╛.

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рдирдВрддрд░ рдореЗрдиреВ рдЖрдпрдЯрдорд╡рд░ рдЬрд╛ тАЬIAM рдЖрдгрд┐ рдкреНрд░рд╢рд╛рд╕рдитАЭ -> рд╕реЗрд╡рд╛ рдЦрд╛рддреА -> рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рддрдпрд╛рд░ рдХрд░рд╛. рдЖрдореНрд╣реА рдкреНрд░рдХрд▓реНрдк рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреЗ рдЕрдзрд┐рдХрд╛рд░ рджреЗрддреЛ.

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

JSON рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ API рдХреА рддрдпрд╛рд░ рдХрд░рд╛

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк

рдЖрдореНрд╣рд╛рд▓рд╛ рдереЛрдбреНрдпрд╛ рд╡реЗрд│рд╛рдиреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ JSON рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓, рдкрд░рдВрддреБ рдЖрддреНрддрд╛ рдЖрдореНрд╣реА рдЪрд╛рдЪрдгреА рд▓реЕрдм рд╕реЗрдЯрдЕрдк рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ.

5. CircleCI рдЪреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рдгреЗ

рдПрдХ рд╡рд╛рдЬрд╡реА рдкреНрд░рд╢реНрди рдЙрджреНрднрд╡рддреЛ - рдкрд╛рд╕рд╡рд░реНрдбрдЪреЗ рдХрд╛рдп рдХрд░рд╛рд╡реЗ? рдЖрдордЪреНрдпрд╛ рдмрд┐рд▓реНрдб рдорд╢реАрдирдЪреА рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдпрдВрддреНрд░рдгрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреЗ рдкрд╛рд╕рд╡рд░реНрдб рдЖрдгрд┐ рдЗрддрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░реЗрд▓. CircleCI рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ, Environment Variables рдирд┐рд╡рдбрд╛

рдЖрдореНрд╣реА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рддреЛ. рднрд╛рдЧ 1: iOS рдкреНрд░рдХрд▓реНрдк
рдЖрдгрд┐ рдЦрд╛рд▓реАрд▓ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рд╛:

  • рдХреА: GOOGLE_APPLICATION_CREDENTIALS
    рдореВрд▓реНрдп: gcloud рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреА рдЪреНрдпрд╛ json рдлрд╛рдЗрд▓рдЪреА рд╕рд╛рдордЧреНрд░реА
  • рдХреА: MATCH_PASSWORD
    рдореВрд▓реНрдп: рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрд╕рд╣ рдЧрд┐рдердм рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд╛рд╕рд╡рд░реНрдб
  • рдХреА: FASTLANE_PASSWORD
    рдореВрд▓реНрдп: рдНрдкрд▓ рд╡рд┐рдХрд╕рдХ рдкреЛрд░реНрдЯрд▓ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдЦрд╛рддреЗ рд╕рдВрдХреЗрддрд╢рдмреНрдж

рдЖрдореНрд╣реА рдмрджрд▓ рд╕реЗрд╡реНрд╣ рдХрд░рддреЛ, PR рддрдпрд╛рд░ рдХрд░рддреЛ рдЖрдгрд┐ рддреЗ рдЖрдордЪреНрдпрд╛ рдЯреАрдо рд▓реАрдбрдХрдбреЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрдирд╛рд╕рд╛рдареА рдкрд╛рдард╡рддреЛ.

рдкрд░рд┐рдгрд╛рдо

рдпрд╛ рд╕рд╛рдзреНрдпрд╛ рд╣рд╛рддрд╛рд│рдгреАрдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА, рдЖрдореНрд╣рд╛рд▓рд╛ рдЪрд╛рдЪрдгреАрдЪреНрдпрд╛ рд╡реЗрд│реА рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рд╕реНрдХреНрд░реАрдирд╡рд░ рд╡реНрд╣рд┐рдбрд┐рдУ рд░реЗрдХреЙрд░реНрдб рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд╖рдорддреЗрд╕рд╣ рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛, рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдп рд╕реНрдЯрдБрдб рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓рд╛. рдЪрд╛рдЪрдгреА рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ, рдореА iPhone X рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдореЙрдбреЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдлрд╛рд░реНрдо рд╡рд┐рд╡рд┐рдз рдореЙрдбреЗрд▓реНрд╕ рдЖрдгрд┐ iOS рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдпреЛрдЬрдирд╛рддреВрди рд╕рдореГрджреНрдз рдирд┐рд╡рдб рдкреНрд░рджрд╛рди рдХрд░рддреЗ.

рджреБрд╕рд░рд╛ рднрд╛рдЧ Android рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реЕрдмрдЪреНрдпрд╛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рд╕реЗрдЯрдЕрдкрд╕рд╛рдареА рд╕рдорд░реНрдкрд┐рдд рдЕрд╕реЗрд▓.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛