рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

рдореЗрд░рд╛ рдирд╛рдо рджрд┐рдорд┐рддреНрд░реА рд╣реИ, рдореИрдВ рдХрдВрдкрдиреА рдореЗрдВ рдкрд░реАрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдПрдордИрдПрд▓ рд╡рд┐рдЬреНрдЮрд╛рди. рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓рд┐рдпрд╛ рдлреАрдЪрд░ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм - рдЕрд░реНрдерд╛рддреН, рдореВрд▓ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ XCUITest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рдеред

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

рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЖрдЬ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЧреБрдб рдХреЙрд░реНрдкреЛрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдХрд╣рд╛рдиреА рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - GitHub рдкрд░ рдПрдХ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ CircleCI рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдоред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд╛рдо рдЕрдореЗрдЬрд┐рдВрдЧрдРрдк рд╣реИ, рдмрдВрдбрд▓рдЖрдИрдбреА com.company.amazingapp рд╣реИред рдмрд╛рдж рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рднреНрд░рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣ рдбреЗрдЯрд╛ рддреБрд░рдВрдд рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред

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

1. рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдпрдВ

рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢рд╛рдЦрд╛ рдмрдирд╛рдПрдВ:

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

рдЖрдЗрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ XCode рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ UI рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдПрдВ [XCode -> рдлрд╝рд╛рдЗрд▓ -> рдирдпрд╛ -> рд▓рдХреНрд╖реНрдп -> тАЛтАЛiOS рдкрд░реАрдХреНрд╖рдг рдмрдВрдбрд▓], рдЗрд╕реЗ рд╕реНрд╡-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдирд╛рдо рдЕрдореЗрдЬрд┐рдВрдЧAppUITests рджреЗрдВред

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

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

рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ [рдПрдХреНрд╕рдХреЛрдб -> рдЙрддреНрдкрд╛рдж -> рдпреЛрдЬрдирд╛ -> рдирдИ рдпреЛрдЬрдирд╛] рдФрд░ рдЗрд╕реЗ рд╡рд╣реА рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ: рдЕрдореЗрдЬрд┐рдВрдЧрдРрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯреНрд╕ред

рдмрдирд╛рдИ рдЧрдИ рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд▓рдХреНрд╖реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЕрдореЗрдЬрд┐рдВрдЧрдРрдк рдФрд░ рдЯрд╛рд░рдЧреЗрдЯ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг - рдЕрдореЗрдЬрд┐рдВрдЧрдРрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯ - рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЗрдЦреЗрдВ

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

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

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рддреАрди рд▓рдХреНрд╖реНрдп рд╣реИрдВ: рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг (рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ, рд╣реИ рдирд╛?) рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд▓рдХреНрд╖реНрдп рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгред

рдЯрд╛рд░рдЧреЗрдЯ рдЕрдореЗрдЬрд┐рдВрдЧрдРрдк, рдмрд┐рд▓реНрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЯреИрдм, рдХреЛрдб рд╕рд╛рдЗрдирд┐рдВрдЧ рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рд╕реЗрдХреНрд╢рди рдкрд░ рдЬрд╛рдПрдВред XCtest рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, iOS рдбреЗрд╡рд▓рдкрд░ рдЪреБрдиреЗрдВред рдХреЛрдб рд╕рд╛рдЗрдирд┐рдВрдЧ рд╕реНрдЯрд╛рдЗрд▓ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдореИрдиреБрдЕрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рд╣рдордиреЗ рдЕрднреА рддрдХ рдкреНрд░реЛрд╡рд┐рдЬрд╝рдирд┐рдВрдЧ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЗрд╕ рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗред

рдЯрд╛рд░рдЧреЗрдЯ рдЕрдореЗрдЬрд╝рд┐рдВрдЧрдРрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╣рдо рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рдж рдмрдВрдбрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЙрд▓рдо рдореЗрдВ рд╣рдо com.company.amazingappuitests рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред

2. Apple рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░рдирд╛

Apple рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдБ, рдкреНрд░рдорд╛рдгрдкрддреНрд░, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдлрд┐рд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЖрдЗрдЯрдо рдХреЗ рдРрдк рдЖрдИрдбреА рдХреЙрд▓рдо рдкрд░ рдЬрд╛рдПрдБред рдПрдХ рдирдИ рдРрдк рдЖрдИрдбреА рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдЕрдореЗрдЬрд┐рдВрдЧрдПрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯреНрд╕ рдФрд░ рдмрдВрдбрд▓рдЖрдИрдбреА com.company.amazingappuitests рд╣реИред

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

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

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдордиреЗ Developer.apple.com рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХреЛ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдХреЗ рд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ рдлрд╛рд╕реНрдЯрд▓реЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕рд╛рдЗрдЯ рдФрд░ рдореИрдЪ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реБрд░реВ рд╕реЗ рдЕрдВрдд рддрдХ рдкрдврд╝реЗрдВред

рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдирд┐рдЬреА рднрдВрдбрд╛рд░ рдФрд░ рдРрдкреНрдкрд▓ рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рдЬреАрдердм рджреЛрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╡рд╛рд▓реЗ рдПрдХ рдЦрд╛рддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдо рдкреНрд░рдкрддреНрд░ рдХрд╛ рдПрдХ рд▓реЗрдЦрд╛-рдЬреЛрдЦрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдРрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИ)ред [рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд], рдПрдХ рдордЬрдмреВрдд рдкрд╛рд╕рд╡рд░реНрдб рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдбреЗрд╡рд▓рдкрд░.рдПрдкреНрдкрд▓.рдХреЙрдо рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпреБрдХреНрдд рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЦрд╛рддреЗ рдХреЛ рдЖрдкрдХреА рдХрдВрдкрдиреА рдХреЗ рдЬреАрдердм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдореЗрдЬрд┐рдВрдЧрдРрдкрдореИрдЪ рдЬреИрд╕реЗ рдирд╛рдо рд╕реЗ рдПрдХ рдирдпрд╛ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рддреЗ рд╣реИрдВред

3. рдлрд╛рд╕реНрдЯрд▓реЗрди рдФрд░ рдореИрдЪ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛

рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрдиреБрдЕрд▓. рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж

$ fastlane init

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

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

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

рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдРрдкрдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлреЙрд░реНрдо рдореЗрдВ рд▓рд╛рдПрдВ:

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

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рдЦрд╛рддрд╛, рдкрд╛рд╕рд╡рд░реНрдб, рдЖрджрд┐ред

рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдЬрдм рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдореИрдЪ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ; рд╕реАрдЖрдИ рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА!

рдлрд╛рд╕реНрдЯрд▓реЗрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ - рдореИрдЪрдлрд╝рд╛рдЗрд▓ред рдЗрд╕реЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ:

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

рдпрджрд┐ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреНрд░реИрд╢рд▓рд┐рдЯрд┐рдХреНрд╕ рдФрд░/рдпрд╛ рдРрдкрд╕реНрдЯреЛрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛рдиреА рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдмрдВрдбрд▓ рдЖрдИрдбреА рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рднрд░рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ, рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдг рдмрд┐рд▓реНрдб рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдЖрдИрдбреА рдмрдирд╛рдИ рдереАред рдЗрд╕рд▓рд┐рдП, рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдХ рдирдИ рд▓реЗрди рджрд░реНрдЬ рдХрд░реЗрдВ:

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

рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдлрд╛рд╕реНрдЯрд▓реЗрди рдиреЗ рдПрдХ рдирдпрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдирд╛рдпрд╛ рдФрд░ рдЙрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред рдорд╣рд╛рди!

рдПрдХреНрд╕рдХреЛрдб рдЦреЛрд▓реЗрдВ. рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореИрдЪ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ com.company.* рдлреЙрд░реНрдо рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЛрд╡рд┐рдЬрдирд┐рдВрдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдореЗрдЬрд┐рдВрдЧрдРрдк рдФрд░ рдЕрдореЗрдЬрд┐рдВрдЧрдРрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╡рд┐рдЬрдирд┐рдВрдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

рдЕрд╕реЗрдВрдмрд▓рд┐рдВрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрди рдЬреЛрдбрд╝рдирд╛ рдмрд╛рдХреА рд╣реИред рдХреЗ рд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ рдХреЛрд╖ рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛ рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдЖрдЗрдП рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реА рд▓реЗрди рдЯреЗрд╕реНрдЯрд┐рдВрдЧ_рдмрд┐рд▓реНрдб_рдлреЙрд░_рдлрд╛рдпрд░рдмреЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗ:


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

рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд▓реЗрдЦ рдХрд┐рд╕ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

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

рд╣рдо рдЕрдкрдиреЗ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЦрд╛рддреЗ (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛) рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдлрд╛рдпрд░рдмреЗрд╕ рдХрдВрд╕реЛрд▓ рдкреЗрдЬ. рдЕрдореЗрдЬрд╝рд┐рдВрдЧрдРрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯреНрд╕ рдирд╛рдо рд╕реЗ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред

рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓ рдЗрди рд▓реЗрди рдлрд╛рдпрд░рдмреЗрд╕_рдЯреЗрд╕реНрдЯ_рд▓реИрдм_рдЖрдИрдУрдПрд╕_рдПрдХреНрд╕рд╕реАрдЯреЗрд╕реНрдЯ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ gcp_project рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред

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

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

рдЖрдЗрдП рдлрд╛рдпрд░рдмреЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд╛рд▓реЗ рдЯреИрдм рдкрд░ рд╡рд╛рдкрд╕ рдЖрдПрдВ рдФрд░ рдЗрд╕реЗ рдмреНрд▓реЗрдЬрд╝ рдЯреИрд░рд┐рдл рдкреНрд▓рд╛рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ - рдЕрдм рд╕реАрдорд╛ рдкрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИред

рдЬреАрдХреНрд▓рд╛рдЙрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдлрд╛рдпрд░рдмреЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, "рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рдореБрдЦреНрдп рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдХреНрд▓рд╛рдЙрдб рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдПрдкреАрдЖрдИ рдФрд░ рдХреНрд▓рд╛рдЙрдб рдЯреВрд▓реНрд╕ рд░рд┐рдЬрд▓реНрдЯ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝реЗрдВред

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

рдлрд┐рд░ рдореЗрдиреВ рдЖрдЗрдЯрдо "IAM рдФрд░ рдкреНрд░рд╢рд╛рд╕рди" -> рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ -> рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ рдкрд░ рдЬрд╛рдПрдВред рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рджреЗрддреЗ рд╣реИрдВред

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ API рдХреБрдВрдЬреА рдмрдирд╛рдПрдВ

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

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

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

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

рд╣рдо рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдореЗрдВ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реЗрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░реЗрдВ:

  • рдХреБрдВрдЬреА: GOOGLE_APPLICATION_CREDENTIALS
    рдорд╛рди: gcloud рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдХреБрдВрдЬреА рдХреА json рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА
  • рдХреБрдВрдЬреА: MATCH_PASSWORD
    рдорд╛рди: рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреАрдердм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб
  • рдХреБрдВрдЬреА: FASTLANE_PASSWORD
    рдорд╛рди: Apple рдбреЗрд╡рд▓рдкрд░ рдкреЛрд░реНрдЯрд▓ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЦрд╛рддрд╛ рдкрд╛рд╕рд╡рд░реНрдб

рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЯреАрдо рд▓реАрдб рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВред

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

рдЗрди рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдордп рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛, рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реНрдЯреИрдВрдб рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ iPhone X рдбрд┐рд╡рд╛рдЗрд╕ рдореЙрдбрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рд░реНрдо рд╡рд┐рднрд┐рдиреНрди рдореЙрдбрд▓реЛрдВ рдФрд░ iOS рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдПрдХ рд╕рдореГрджреНрдз рдЪрдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ