рдореЗрд░рд╛ рдирд╛рдо рджрд┐рдорд┐рддреНрд░реА рд╣реИ, рдореИрдВ рдХрдВрдкрдиреА рдореЗрдВ рдкрд░реАрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА рдФрд░ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрд╕рдВрдж рдЖрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдИрдУрдПрд╕ рдЯреЗрд╕реНрдЯ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдЙрд╕реА рд╕реНрддрд░ рдкрд░ рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдмрд╣реБрдд рдЧреВрдЧрд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рдЕрднреА рднреА рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЖрдЬ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЧреБрдб рдХреЙрд░реНрдкреЛрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдХрд╣рд╛рдиреА рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - GitHub рдкрд░ рдПрдХ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ CircleCI рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдоред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд╛рдо рдЕрдореЗрдЬрд┐рдВрдЧрдРрдк рд╣реИ, рдмрдВрдбрд▓рдЖрдИрдбреА com.company.amazingapp рд╣реИред рдмрд╛рдж рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рднреНрд░рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣ рдбреЗрдЯрд╛ рддреБрд░рдВрдд рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред
рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред
1. рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдпрдВ
рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢рд╛рдЦрд╛ рдмрдирд╛рдПрдВ:
$ git checkout develop
$ git pull
$ git checkout -b тАЬfeature/add-ui-testsтАЭ
рдЖрдЗрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ XCode рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ UI рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдПрдВ [XCode -> рдлрд╝рд╛рдЗрд▓ -> рдирдпрд╛ -> рд▓рдХреНрд╖реНрдп -> тАЛтАЛiOS рдкрд░реАрдХреНрд╖рдг рдмрдВрдбрд▓], рдЗрд╕реЗ рд╕реНрд╡-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдирд╛рдо рдЕрдореЗрдЬрд┐рдВрдЧAppUITests рджреЗрдВред
рдмрдирд╛рдП рдЧрдП рд▓рдХреНрд╖реНрдп рдХреЗ рдмрд┐рд▓реНрдб рдЪрд░рдг рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╕рдВрдХрд▓рди рд╕реНрд░реЛрддреЛрдВ - рдЕрдореЗрдЬрд┐рдВрдЧрдПрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯреНрд╕.рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрднрд░рддрд╛ - рдЕрдореЗрдЬрд┐рдВрдЧрдРрдк рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ [рдПрдХреНрд╕рдХреЛрдб -> рдЙрддреНрдкрд╛рдж -> рдпреЛрдЬрдирд╛ -> рдирдИ рдпреЛрдЬрдирд╛] рдФрд░ рдЗрд╕реЗ рд╡рд╣реА рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ: рдЕрдореЗрдЬрд┐рдВрдЧрдРрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯреНрд╕ред
рдмрдирд╛рдИ рдЧрдИ рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд▓рдХреНрд╖реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЕрдореЗрдЬрд┐рдВрдЧрдРрдк рдФрд░ рдЯрд╛рд░рдЧреЗрдЯ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг - рдЕрдореЗрдЬрд┐рдВрдЧрдРрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯ - рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЗрдЦреЗрдВ
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВред XCode рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдБред "+" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП XCtestред рдЬрдм рдХреЛрдб рд╕рд╛рдЗрдирд┐рдВрдЧ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рдбрдл рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рддреАрди рд▓рдХреНрд╖реНрдп рд╣реИрдВ: рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг (рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ, рд╣реИ рдирд╛?) рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд▓рдХреНрд╖реНрдп рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгред
рдЯрд╛рд░рдЧреЗрдЯ рдЕрдореЗрдЬрд┐рдВрдЧрдРрдк, рдмрд┐рд▓реНрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЯреИрдм, рдХреЛрдб рд╕рд╛рдЗрдирд┐рдВрдЧ рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рд╕реЗрдХреНрд╢рди рдкрд░ рдЬрд╛рдПрдВред XCtest рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, iOS рдбреЗрд╡рд▓рдкрд░ рдЪреБрдиреЗрдВред рдХреЛрдб рд╕рд╛рдЗрдирд┐рдВрдЧ рд╕реНрдЯрд╛рдЗрд▓ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдореИрдиреБрдЕрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рд╣рдордиреЗ рдЕрднреА рддрдХ рдкреНрд░реЛрд╡рд┐рдЬрд╝рдирд┐рдВрдЧ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЗрд╕ рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗред
рдЯрд╛рд░рдЧреЗрдЯ рдЕрдореЗрдЬрд╝рд┐рдВрдЧрдРрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╣рдо рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рдж рдмрдВрдбрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЙрд▓рдо рдореЗрдВ рд╣рдо com.company.amazingappuitests рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред
2. Apple рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░рдирд╛
Apple рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдБ, рдкреНрд░рдорд╛рдгрдкрддреНрд░, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдлрд┐рд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЖрдЗрдЯрдо рдХреЗ рдРрдк рдЖрдИрдбреА рдХреЙрд▓рдо рдкрд░ рдЬрд╛рдПрдБред рдПрдХ рдирдИ рдРрдк рдЖрдИрдбреА рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдЕрдореЗрдЬрд┐рдВрдЧрдПрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯреНрд╕ рдФрд░ рдмрдВрдбрд▓рдЖрдИрдбреА com.company.amazingappuitests рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рд▓реЗрдХрд┐рди... рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдирд╛ рдФрд░ рдЯреЗрд╕реНрдЯ рд░рдирд░ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рджреЛ рдмрдВрдбрд▓ рдЖрдИрдбреА рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ - рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдРрдк рдЖрдИрдбреАред рд╣рдо рдПрдХ рдирдИ рдРрдк рдЖрдИрдбреА рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рдРрдк рдЖрдИрдбреА рдХреЗ рдмрдЬрд╛рдп, рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдРрдк рдЖрдИрдбреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдордиреЗ Developer.apple.com рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХреЛ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдХреЗ рд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ
рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдирд┐рдЬреА рднрдВрдбрд╛рд░ рдФрд░ рдРрдкреНрдкрд▓ рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рдЬреАрдердм рджреЛрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╡рд╛рд▓реЗ рдПрдХ рдЦрд╛рддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдо рдкреНрд░рдкрддреНрд░ рдХрд╛ рдПрдХ рд▓реЗрдЦрд╛-рдЬреЛрдЦрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдРрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИ)ред [рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд], рдПрдХ рдордЬрдмреВрдд рдкрд╛рд╕рд╡рд░реНрдб рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдбреЗрд╡рд▓рдкрд░.рдПрдкреНрдкрд▓.рдХреЙрдо рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпреБрдХреНрдд рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЦрд╛рддреЗ рдХреЛ рдЖрдкрдХреА рдХрдВрдкрдиреА рдХреЗ рдЬреАрдердм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдореЗрдЬрд┐рдВрдЧрдРрдкрдореИрдЪ рдЬреИрд╕реЗ рдирд╛рдо рд╕реЗ рдПрдХ рдирдпрд╛ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рддреЗ рд╣реИрдВред
3. рдлрд╛рд╕реНрдЯрд▓реЗрди рдФрд░ рдореИрдЪ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛
рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ
$ fastlane init
рдЖрдкрдХреЛ рдЙрдкрд▓рдмреНрдз рдЙрдкрдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪреМрдерд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВ - рдореИрдиреНрдпреБрдЕрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдкред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдирдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдлрд╛рд╕реНрдЯрд▓реЗрди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ - рдРрдкрдлрд╛рдЗрд▓ рдФрд░ рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдо рдРрдкрдлрд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓ рдореЗрдВ рдиреМрдХрд░рд┐рдпрд╛рдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдлрд╛рд╕реНрдЯрд▓реЗрди рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рд▓реЗрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:
рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдРрдкрдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлреЙрд░реНрдо рдореЗрдВ рд▓рд╛рдПрдВ:
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.* рдлреЙрд░реНрдо рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЛрд╡рд┐рдЬрдирд┐рдВрдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдореЗрдЬрд┐рдВрдЧрдРрдк рдФрд░ рдЕрдореЗрдЬрд┐рдВрдЧрдРрдкрдпреВрдЖрдИрдЯреЗрд╕реНрдЯ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╡рд┐рдЬрдирд┐рдВрдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрд╕реЗрдВрдмрд▓рд┐рдВрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрди рдЬреЛрдбрд╝рдирд╛ рдмрд╛рдХреА рд╣реИред рдХреЗ рд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ
рдЖрдЗрдП рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реА рд▓реЗрди рдЯреЗрд╕реНрдЯрд┐рдВрдЧ_рдмрд┐рд▓реНрдб_рдлреЙрд░_рдлрд╛рдпрд░рдмреЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗ:
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 рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред
рдЯреИрдм рдмрдВрдж рди рдХрд░реЗрдВ, рдЙрд╕реА рдЦрд╛рддреЗ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдкрдВрдЬреАрдХрд░рдг рдХрд░реЗрдВ
Google рдПрдХ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП $300 рджреЗ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЗ рдПрдХ рд╡рд░реНрд╖ рдХреЗ рдирд┐рдГрд╢реБрд▓реНрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд╣рдо рдЖрдкрдХреА рднреБрдЧрддрд╛рди рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, $1 рдХреЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдмрд┐рдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдЦрд╛рддреЗ рдореЗрдВ $300 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╡рд░реНрд╖ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рдЯреИрд░рд┐рдл рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧреА, рдЗрд╕рд▓рд┐рдП рдзрди рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд╣рд╛рдирд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдЗрдП рдлрд╛рдпрд░рдмреЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд╛рд▓реЗ рдЯреИрдм рдкрд░ рд╡рд╛рдкрд╕ рдЖрдПрдВ рдФрд░ рдЗрд╕реЗ рдмреНрд▓реЗрдЬрд╝ рдЯреИрд░рд┐рдл рдкреНрд▓рд╛рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ - рдЕрдм рд╕реАрдорд╛ рдкрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИред
рдЬреАрдХреНрд▓рд╛рдЙрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдлрд╛рдпрд░рдмреЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, "рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рдореБрдЦреНрдп рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдХреНрд▓рд╛рдЙрдб рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдПрдкреАрдЖрдИ рдФрд░ рдХреНрд▓рд╛рдЙрдб рдЯреВрд▓реНрд╕ рд░рд┐рдЬрд▓реНрдЯ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝реЗрдВред
рдлрд┐рд░ рдореЗрдиреВ рдЖрдЗрдЯрдо "IAM рдФрд░ рдкреНрд░рд╢рд╛рд╕рди" -> рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ -> рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ рдкрд░ рдЬрд╛рдПрдВред рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рджреЗрддреЗ рд╣реИрдВред
JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ API рдХреБрдВрдЬреА рдмрдирд╛рдПрдВ
рд╣рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП JSON рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЕрднреА рд╣рдо рдЯреЗрд╕реНрдЯ рд▓реИрдм рд╕реЗрдЯрдЕрдк рдХреЛ рдкреВрд░реНрдг рдорд╛рдиреЗрдВрдЧреЗред
5. рд╕рд░реНрдХрд┐рд▓рд╕реАрдЖрдИ рдХреА рд╕реНрдерд╛рдкрдирд╛
рдПрдХ рд╡рд╛рдЬрд┐рдм рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ - рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдХреНрдпрд╛ рдХрд░реЗрдВ? рд╣рдорд╛рд░реА рдмрд┐рд▓реНрдб рдорд╢реАрди рдХрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рддрдВрддреНрд░ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдЕрдиреНрдп рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд╕рд░реНрдХрд▓рд╕реАрдЖрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реЗрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░реЗрдВ:
- рдХреБрдВрдЬреА: GOOGLE_APPLICATION_CREDENTIALS
рдорд╛рди: gcloud рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдХреБрдВрдЬреА рдХреА json рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА - рдХреБрдВрдЬреА: MATCH_PASSWORD
рдорд╛рди: рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреАрдердм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб - рдХреБрдВрдЬреА: FASTLANE_PASSWORD
рдорд╛рди: Apple рдбреЗрд╡рд▓рдкрд░ рдкреЛрд░реНрдЯрд▓ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЦрд╛рддрд╛ рдкрд╛рд╕рд╡рд░реНрдб
рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЯреАрдо рд▓реАрдб рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо
рдЗрди рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдордп рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛, рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реНрдЯреИрдВрдб рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ iPhone X рдбрд┐рд╡рд╛рдЗрд╕ рдореЙрдбрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рд░реНрдо рд╡рд┐рднрд┐рдиреНрди рдореЙрдбрд▓реЛрдВ рдФрд░ iOS рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдПрдХ рд╕рдореГрджреНрдз рдЪрдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рднрд╛рдЧ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдлрд╛рдпрд░рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд▓реИрдм рдХреЗ рдЪрд░рдг-рджрд░-рдЪрд░рдг рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧрд╛ред
рд╕реНрд░реЛрдд: www.habr.com