GitLab рд░ fastlane рдХреЛ рд╕рд╛рде рдПрдк рд╕реНрдЯреЛрд░рдорд╛ iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрджреИ

GitLab рд░ fastlane рдХреЛ рд╕рд╛рде рдПрдк рд╕реНрдЯреЛрд░рдорд╛ iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрджреИ

рдлрд╛рд╕реНрдЯрд▓реЗрдирдХреЛ рд╕рд╛рде GitLab рд▓реЗ рдХрд╕рд░реА рдПрдк рд╕реНрдЯреЛрд░рдорд╛ iOS рдПрдкрд╣рд░реВ рд╕рдЩреНрдХрд▓рди, рд╕рдЩреНрдХреЗрдд рд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдЫред

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

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

рдПрдкреНрдкрд▓ рд╕реНрдЯреЛрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдмрд╛рд░реЗ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВ

рд╣рд╛рдореАрд▓рд╛рдИ рдПрдХ рдПрдк рд╕реНрдЯреЛрд░ рдПрдк, рд╡рд┐рддрд░рдг рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ, рд░ рд╕рдмреИ рдХреБрд░рд╛рд▓рд╛рдИ рдПрдХрд╕рд╛рде рдЬреЛрдбреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЪрд╛рд╣рд┐рдиреНрдЫред

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

рдореЗрд░рд╛ рдПрдкрд╣рд░реВ

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

рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреНрд░реЛрдлрд╛рдЗрд▓

рдПрдк рд╕реЗрдЯрдЕрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдПрдкреНрдкрд▓ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдХрдиреНрд╕реЛрд▓рдХреЛ рдкреНрд░рдорд╛рдгрдкрддреНрд░, рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЦрдгреНрдбрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ iOS рд╡рд┐рддрд░рдг рд░ рд╡рд┐рдХрд╛рд╕ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫред рдпреА рд╕рдмреИ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╛рдЗрд▓рдорд╛ рдЬреЛрдбреНрди рд╕рдХрд┐рдиреНрдЫред

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

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

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

рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛ рдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдЫреБ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд░ рд╕рд╛рд╕, рддрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рд╕рдореНрднрд╡рддрдГ рд░рд╛рдореНрд░реЛ рдЙрдкрдпреБрдХреНрдд рдЫ рдореНрдпрд╛рдЪ.

GitLab рд░ рдлрд╛рд╕реНрдЯрд▓реЗрди рддрдпрд╛рд░реА рдЧрд░реНрджреИ

CI рдзрд╛рд╡рдХ рддрдпрд╛рд░реА рдЧрд░реНрджреИ

рдпреЛ рд╕рдмреИ рдбрд╛рдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рд╣рд╛рдореА MacOS рдЙрдкрдХрд░рдгрдорд╛ GitLab рдзрд╛рд╡рдХрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдЬрд╛рдиреНрдЫреМрдВред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рддрдкрд╛рдИрдВ MacOS рдорд╛ iOS рдПрдкрд╣рд░реВ рдорд╛рддреНрд░ рдмрдирд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрд░ рд╕рдмреИ рдХреБрд░рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрди рд╕рдХреНрдЫ, рд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ рдпрд╕ рдХреНрд╖реЗрддреНрд░рдорд╛ рдкреНрд░рдЧрддрд┐рдХреЛ рдЖрд╢рд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдЬрд╕реНрддреИ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдирдЬрд░ рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реН xcbuild ╨╕ рдЪрд┐рдиреНрд╣рд░ рд╣рд╛рдореНрд░реЛ рдЖрдиреНрддрд░рд┐рдХ рдХрд╛рд░реНрдп gitlab-ce#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

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

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

рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдлрд╛рд╕реНрдЯрд▓реЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН fastlane initред рдорд╛рддреНрд░ рдкрдЫреНрдпрд╛рдЙрдиреБрд╣реЛрд╕реН рдлрд╛рд╕реНрдЯрд▓реЗрди рд╕реНрдерд╛рдкрдирд╛ рд░ рдЪрд▓рд╛рдЙрдирдХрд╛ рд▓рд╛рдЧрд┐ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдХреЛ рдмрд╛рд░реЗ рдорд╛ рдЦрдгреНрдб рдорд╛ Gemfile, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд CI рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдорд╛рд░реНрдлрдд рдЫрд┐рдЯреЛ рд░ рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХреНрд╖реЗрдкрдг рдЪрд╛рд╣рд┐рдиреНрдЫред

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

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

рдпреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдлрд╛рдЗрд▓ рд╣реЛ, рддрд░ рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд░ рд╣рд╛рд▓рдХреЛ рдлреЛрд▓реНрдбрд░рдорд╛ рдЖрдЙрдЯрдкреБрдЯ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХреЛ рдЫреБред рдпрд╕рд▓реЗ CI рд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрдЫред рдпрджрд┐ рд░реБрдЪрд┐ рдЫ рднрдиреЗ, рдмрд╛рд░реЗ рдкрдвреНрдиреБрд╣реЛрд╕реН 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

рдлрд╛рд╕реНрдЯрд▓реЗрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдПрдк рд╕реНрдЯреЛрд░рдорд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЧрд░реНрди рд░ TestFlight рдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, CI рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдпрд╣рд╛рдБ.

рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рджреБрдИ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЫ рднрдиреЗ, рдПрдЙрдЯрд╛ рдЪрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН FASTLANE_SESSION (рддреНрдпрд╣рд╛рдБ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ)ред

FASTLANE_USER ╨╕ FASTLANE_PASSWORD

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

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рд╕рдмреИ рдХрд╛рдо рдХрд╕рд░реА рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдореЗрд░реЛ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгрдорд╛.

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

рдлрд╛рд╕реНрдЯрд▓реЗрдирдХреЛ рдЕрд░реНрдХреЛ рд░рд╛рдореНрд░реЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреНрд░рд┐рдирд╕рдЯрд╣рд░реВ рдПрдк рд╕реНрдЯреЛрд░рдХреЛ рд▓рд╛рдЧрд┐, рдЬреБрди рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рдзреЗрд░реИ рд╕рдЬрд┐рд▓реЛ рдЫред

рд╣рд╛рдореАрд▓рд╛рдИ рддрдкрд╛рдИрдВрдХреЛ рдЕрдиреБрднрд╡рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рднрдиреНрдиреБрд╣реЛрд╕реН рд░ iOS рдПрдк рд╡рд┐рдХрд╛рд╕рдХреЛ рд▓рд╛рдЧрд┐ GitLab рд╕реБрдзрд╛рд░ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЖрдлреНрдирд╛ рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

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

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