GitLab рдФрд░ fastlane рдХреЗ рд╕рд╛рде iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдРрдк рд╕реНрдЯреЛрд░ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛

GitLab рдФрд░ fastlane рдХреЗ рд╕рд╛рде iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдРрдк рд╕реНрдЯреЛрд░ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛

рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреЗ рд╕рд╛рде GitLab рдХреИрд╕реЗ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдРрдк рд╕реНрдЯреЛрд░ рдкрд░ рдПрдХрддреНрд░рд┐рдд, рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдФрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдерд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреБрд░рдВрдд рдмрдирд╛рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ GitLab рдХреЗ рд╕рд╛рде рдФрд░ рддреЗрдЬ рдЧрддрд┐ рдХреА рд▓реЗрди. рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ iOS рдРрдк рдХреИрд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕реЗ TestFlight рдкрд░ рдХреИрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВред рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдореИрдВ GitLab рд╡реЗрдм IDE рдХреЗ рд╕рд╛рде iPad Pro рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЕрд╕реЗрдВрдмрд▓реА рд▓реЗрддрд╛ рд╣реВрдВ рдФрд░ рдЙрд╕реА рдЖрдИрдкреИрдб рдкреНрд░реЛ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред

рдпрд╣рд╛рдВ рд╣рдо рд▓реЗрдВрдЧреЗ рд╕реНрд╡рд┐рдлреНрдЯ рдкрд░ рд╕рд░рд▓ рдЖрдИрдУрдПрд╕ рдРрдк, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ред

Apple рд╕реНрдЯреЛрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж

рд╣рдореЗрдВ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдк рд╕реНрдЯреЛрд░ рдРрдк, рд╡рд┐рддрд░рдг рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдПрдХ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдХрдард┐рди рдХрд╛рдо рдРрдк рд╕реНрдЯреЛрд░ рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрдзрд┐рдХрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдирдП рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рд╕рд╣реА рджрд┐рд╢рд╛ рдмрддрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣рд╛рдВ Apple рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╡реЗ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдкреЛрд╕реНрдЯ рдЖрдкрдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА.

рдореЗрд░реА рдПрдкреНрдкреНрд╕

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

рдЖрд░рдВрднреАрдХрд░рдг рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓

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

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

рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк

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

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореИрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдЖрд╣, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡рддрдГ рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИ рдореИрдЪ.

GitLab рдФрд░ fastlane рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рд╕реАрдЖрдИ рд░рдирд░ рддреИрдпрд╛рд░ рдХрд░рдирд╛

рдпрд╣ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо MacOS рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ GitLab рд░рдирд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдХреЗрд╡рд▓ MacOS рдкрд░ iOS рдРрдкреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦреЗрдВ xcbuild ╨╕ рд╕рдВрдХреЗрдд, рдФрд░ рд╣рдорд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рдЧрд┐рдЯрд▓реИрдм-рд╕реАрдИ#57576.

рд░рдирд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд╡рд░реНрддрдорд╛рди рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ MacOS рдкрд░ GitLab рд░рдирд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢.

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

sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
cd ~
gitlab-runner install
gitlab-runner start

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

рдлрд╛рд╕реНрдЯрд▓реЗрди init

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

рдЕрдкрдиреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдпреЗ рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:

xcode-select --install
sudo gem install fastlane -NV
# Alternatively using Homebrew
# brew cask install fastlane
fastlane init

рдлрд╛рд╕реНрдЯрд▓реЗрди рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдВрдЧреЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рддреАрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдлрд╛рд╕реНрдЯрд▓реЗрди рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдЧрд╛:

1. fastlane/Appfile

рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ. рдмрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреА рдРрдкреНрдкрд▓ рдЖрдИрдбреА рдФрд░ рдРрдк рдЖрдИрдбреА рд╕рд╣реА рд╣реИрдВред

app_identifier("com.vontrance.flappybird") # The bundle identifier of your app
apple_id("[email protected]") # Your Apple email address

2. fastlane/Fastfile

Fastfile рдирд┐рд░реНрдорд╛рдг рдЪрд░рдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рднреА рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╣рдо рдПрдХ рд▓рд╛рдЗрди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рдЕрд╕реЗрдВрдмрд▓реА рдХрд░рддреА рд╣реИ рдФрд░ рдЙрд╕реЗ рдЯреЗрд╕реНрдЯрдлрд╝реНрд▓рд╛рдЗрдЯ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рд╕рднреА рдСрдкрд░реЗрд╢рди (get_certificates, get_provisioning_profile, gym ╨╕ upload_to_testflight) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд╛рд╕реНрдЯрд▓реЗрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдХрд╛рд░реНрд░рд╡рд╛рдИ get_certificates ╨╕ get_provisioning_profile рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдЖрд╣. рдпрджрд┐ рдЖрдк рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдореИрдЪ рдпрд╛ рдЬреЛ рднреА рд╣реЛ, рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВред

default_platform(:ios)

platform :ios do
  desc "Build the application"
  lane :flappybuild do
    get_certificates
    get_provisioning_profile
    gym
    upload_to_testflight
  end
end

3. fastlane/Gymfile

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

https://docs.fastlane.tools/actions/gym/

рд╣рдорд╛рд░рд╛ .gitlab-ci.yml

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдЖрдИ рд░рдирд░ рд╣реИ, рдФрд░ рд╣рдо рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ .gitlab-ci.yml:

stages:
  - build

variables:
  LC_ALL: "en_US.UTF-8"
  LANG: "en_US.UTF-8"
  GIT_STRATEGY: clone

build:
  stage: build
  script:
    - bundle install
    - bundle exec fastlane flappybuild
  artifacts:
    paths:
    - ./FlappyBird.ipa

рдкреВрд░реА рддрд░рд╣ рд╕реЗ! рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рдХреЛ UTF-8 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ clone рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде shell, рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдлрд╝ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╣реЛ, рдФрд░ рдмрд╕ рдХреЙрд▓ рдХрд░реЗрдВ flappybuild рдлрд╛рд╕реНрдЯрд▓реЗрди, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ TestFlight рдореЗрдВ рдирд╡реАрдирддрдо рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдЕрд╕реЗрдВрдмрд▓реА, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдФрд░ рддреИрдирд╛рддреА рдорд┐рд▓рддреА рд╣реИред

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

рдЕрдиреНрдп рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░

рдпрд╣рд╛рдВ рдХреБрдЫ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╣реИрдВ рдЬреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD ╨╕ FASTLANE_SESSION

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

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣реИ, рддреЛ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВ FASTLANE_SESSION (рд╡рд╣рд╛рдВ рдирд┐рд░реНрджреЗрд╢)ред

FASTLANE_USER ╨╕ FASTLANE_PASSWORD

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

рдЕрдВрдд рдореЗрдВ

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдореЗрд░реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ.

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рдерд╛ рдФрд░ рдЖрдкрдХреЛ GitLab рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ iOS рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╣реИ рд╕реАрдЖрдИ рдпреБрдХреНрддрд┐рдпрд╛рдБ рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреЗ рд▓рд┐рдП, рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВред рдЖрдк рд╢рд╛рдпрдж рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ CI_BUILD_ID (рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП) рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡реГрджреНрдзрд┐ рд╕рдВрд╕реНрдХрд░рдг.

рдлрд╛рд╕реНрдЯрд▓реЗрди рдХрд╛ рдПрдХ рдФрд░ рдмрдврд╝рд┐рдпрд╛ рдлреАрдЪрд░ рд╣реИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдРрдк рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕реЗ рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрддрд╛рдПрдВ рдФрд░ iOS рдРрдк рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП GitLab рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред

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

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