рдХрд┐рддрдиреА рдмрд╛рд░ рд╣рдо iOS рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдк рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЖрдИрдЯреНрдпреВрдиреНрд╕ рдХрдиреЗрдХреНрдЯ рдРрдк рд╕реНрдЯреЛрд░ рдХрдиреЗрдХреНрдЯ ? рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдХреНрд░рд┐рдп рдмреАрдЯрд╛ рдкрд░реАрдХреНрд╖рдг рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди, рдЖрдкрдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрдпрддрди рдЕрд╕реЗрдВрдмрд▓реА рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рдорд╛рдг рдкрддреНрд░, рдкреНрд░реЛрд╡рд┐рдЬрд╝рди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдирдП рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЪреЗрдХрдорд╛рд░реНрдХ рдФрд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреА рддрд░рд╣ рдПрдХ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░ рдХреА рдореИрдиреНрдпреБрдЕрд▓ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ iOS рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЬрд▓реНрджреА рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реИред
рдкрд░рд┐рдЪрдп
рдпрд╣ рдХреНрдпрд╛ рд╣реИ
рдлрд╛рд╕реНрдЯрд▓реЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрдирд╛рдиреЗ рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛, рдпреВрдирд┐рдЯ / рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛, рд╕реНрд▓реИрдХ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛, рдХреНрд░реИрд╢рд▓рд╛рдЗрдЯрд┐рдХреНрд╕ рд╕реЗ рдЬреБрдбрд╝рдирд╛ рдФрд░ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рдХрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд▓рд╛рдн рдХреНрдпрд╛ рд╣реИ?
рд╢реБрд░реВ рдореЗрдВ рдЖрд╡реЗрджрди рдХреА рдЧрдгрдирд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЖрджреЗрд╢реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рджреЛ рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрдк рд╕реНрдЯреЛрд░ рдкрд░ рдпрд╛ рдЯреЗрд╕реНрдЯрдлрд╝рд▓рд╛рдЗрдЯ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрдЪрд╛рдПрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдПрдХ рдХреЙрд▓ рдореЗрдВ рд╢реБрд░реВ рдХреА рдЬрд╛рдПрдЧреАред
рдзреНрдпрд╛рди рджреЗрдВ: рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдРрдкреНрдкрд▓ рдбреЗрд╡рд▓рдкрд░ рд╕рджрд╕реНрдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрдк рд╕реНрдЯреЛрд░ рдХрдиреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдореБрдлреНрдд рдЦрд╛рддреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
рд╕реНрдерд╛рдкрдирд╛
рдлрд╛рд╕реНрдЯрд▓реЗрди рдЦреБрдж рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Xcode рдХрдорд╛рдВрдб рдЯреВрд▓реНрд╕ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд / рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ:
$ xcode-select --install
рд░рддреНрди рдЙрдкрд╡рд╛рд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
$ sudo gem install fastlane -NV
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдЪрд▓рд╛рдПрдБ:
$ sudo fastlane init
рдлрд╛рд╕реНрдЯрд▓реЗрди рд╣рдореЗрдВ рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░:

рд╣рдо рд╡рд┐рдХрд▓реНрдк 4 рдХреЛ рдЪреБрдиреЗрдВрдЧреЗ рд╣рдо рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ:

рд╣реЛ рдЧрдпрд╛! рдлрд╛рд╕реНрдЯрд▓реЗрди рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдЬреЗрдордлрд╛рдЗрд▓ рдХреЛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЬрд╛рд░реА рд░рдЦреЗрдВ
рдпрджрд┐ рд▓реЛрдХреЗрд▓ рд╢реЗрд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓ UTF-8 рдирд╣реАрдВ рд╣реИ , рддреЛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред рд╣рдо рдЖрдкрдХреЗ рд╢реЗрд▓ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ ( ~ / .bashrc , ~ / .bash_profile , ~ / .profile or ~ / .zshrc ) рдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
рдЕрдм рдЖрдк рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдХрджрдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдлрд╛рд╕реНрдЯрд▓реЗрди рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ: рдЗрд╕рдХреЗ рдореБрдЦреНрдп рдЖрджреЗрд╢ рдФрд░ рд╣рдо рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХрдорд╛рдВрдб (рдХрд╛рд░реНрдп)
рдлрд╛рд╕реНрдЯрд▓реЗрди рдХрдИ рдЙрдкрдпреЛрдЧреА рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ:
- рдкреНрд░рдорд╛рдгрд┐рдд : рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ (рд╡рд┐рддрд░рдг, рд╡рд┐рдХрд╛рд╕) рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ;
- increment_build_number : рдмрд┐рд▓реНрдб рд╕рдВрдЦреНрдпрд╛ рдХреЛ 1 рд╕реЗ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдпрд╛ build_number рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реИ
- рдЖрд╣ : рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ;
- рд╕реНрдиреИрдкрд╢реЙрдЯ : UI рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдРрдк рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрдорд┐рдЯ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
- рдЬрд┐рдо : рд╕рдВрдЧреНрд░рд╣ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░, рдпрд╣рд╛рдВ, рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЕрдВрддрд┐рдо рдЖрдИрдкреАрдП;
- рд╕реНрдХреИрди : рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рдХреНрд╖реНрдп рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ;
- рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ : рдРрдк рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕реАрдзреЗ рдЖрдИрдкреАрдП, рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ;
- рдкрд╛рдпрд▓рдЯ : TestFlight рдореЗрдВ рдмреАрдЯрд╛ рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рддрд╛рдЬрд╛ ipa рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдХ рднреА рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдФрд░ рдХрдИ рдЕрдиреНрдп
Fastfile
Fastlane рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ Fastfile рдФрд░ Appfile рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ред Appfile рдореЗрдВ, рд╣рдо рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рд▓рд┐рдЦреЗрдВрдЧреЗ: рдмрдВрдбрд▓ рдЖрдИрдбреА, рдРрдк рдЖрдИрдбреА, рдЯреАрдо рдЖрдИрдбреА рдФрд░ рдЕрдиреНрдпред рдлрд╛рд╕реНрдЯрдлрд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдЕрдкрдиреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
default_platform(:ios) platform :ios do desc "Description of what the lane does" lane :custom_lane do # add actions here: https://docs.fastlane.tools/actions end end
- default_platform (: ios) - рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реЗрдЯ рдХрд░реЗрдВред
- рдордВрдЪ: IOS рдХрд░рддреЗ рд╣реИрдВ ... рдЕрдВрдд - iOS рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП "рд▓реЗрди" рдХрд╛ рд╡рд░реНрдгрди рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- desc "рд▓реЗрди рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ" рдХрд╛ рд╡рд░реНрдгрди - "рд▓реЗрди" рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдгред рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рднреА "рд▓реЗрди" рдХреА рд╕реВрдЪреА
$ fastlane lanes
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред - рд▓реЗрди: custom_lane рдХрд░рддреЗ рд╣реИрдВ ... рдЕрдВрдд : рд▓реЗрди (рдкрде, рдкрдЯреНрдЯреА), рдЕрдзрд┐рдХ рд╕рд░рд▓рддрд╛ рд╕реЗ, рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рдирд╛рдо, рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдмреЙрдбреА рд╣реИред рд╢рд░реАрд░ рдореЗрдВ, рд╣рдо рдЙрди рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдмрдирд╛рдиреЗ, рдмрд┐рдЫрд╛рдиреЗ, рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдЖрджрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ,
$ fastlane [lane_name] [parameters]
рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ $ fastlane [lane_name] [parameters]
рдХреЙрд▓ рдХрд░рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЧрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЗ рд╕рд╛рде рд╣реИ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрджрдо рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
TestFlight рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ
рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рд▓реЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдХреВрд▓ рдирд╛рдо рд╕реЗрдЯ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред Custom_lane рдХреЛ testflight_lane рдХрд╛ рдирд╛рдо рджреЗрдВ ред рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо TestFlight рдореЗрдВ рднрд░реА рд╣реБрдИ рддрд╛рдЬрд╛ рдЕрд╕реЗрдВрдмрд▓реА рд╣реЛрдЧреА ред
default_platform(:ios) platform :ios do desc "Builds, achieves and uploads ipa to TestFlight" lane :testflight_lane do
Appfile рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдВрдбрд▓ рдФрд░ рдРрдкреНрдкрд▓ рдЖрдИрдбреА рджрд░реНрдЬ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ Appfile рдореЗрдВ рд▓рд┐рдЦреЗрдВ :
app_identifier "ru.ee.shishko.TheHatGame" apple_id "ee.shishko@gmail.com"
рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдФрд░ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╛рдЗрд▓
рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╢рдГ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдФрд░ рдЖрд╣реЗрдВ рдЬреЛрдбрд╝реЗрдВ:
( рдзреНрдпрд╛рди рджреЗрдВ : рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдРрдк рд╕реНрдЯреЛрд░ рдХрдиреЗрдХреНрдЯ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ app_name рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛)
default_platform(:ios) platform :ios do desc "Builds, achieves and uploads ipa to TestFlight" lane :testflight_lane do # App Store Connect: # produce ( # app_name: "MyAppName" # ) cert sigh end end
рдХрдорд╛рдВрдб $ fastlane testflight_lane
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ
рдлрд╛рд╕реНрдЯрд▓реЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗ, рдЗрд╕реЗ рджрд░реНрдЬ рдХрд░реЗрдВред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ - рдлрд╛рд╕реНрдЯрд▓реЗрди рдЗрд╕реЗ рдпрд╛рдж рд░рдЦреЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдЕрдЧрд▓реЗ рд▓реЙрдиреНрдЪ рдореЗрдВ рдХреБрдЫ рднреА рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдЬрдм рдлрд╛рд╕реНрдЯрд▓реЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЕрдм рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдФрд░ рдкреНрд░рд╛рд╡рдзрд╛рди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЧрджрд╛рди рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд▓рдХреНрд╖реНрдп рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:

рдЖрд╡реЗрджрди рдмрдирд╛рдПрдБ
рдмрд┐рд▓реНрдб рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП increment_build_number рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВред рдпрджрд┐ рдЖрдкрдХреА рдореБрдЦреНрдп .xcodeproj рдлрд╝рд╛рдЗрд▓ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ xcodeproj рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
default_platform(:ios) platform :ios do desc "Builds, achieves and uploads ipa to TestFlight" lane :testflight_lane do cert sigh increment_build_number # .xcodeproj , : # # increment_build_number( # xcodeproj: "./path/to/MyApp.xcodeproj" # ) end end
рдмрд┐рд▓реНрдб рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд┐рд▓реНрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ / рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдРрдкреНрдкрд▓ рдЬреЗрдиреЗрд░рд┐рдХ рдФрд░ рдХрд░рдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 1 рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ :

рдЬрд┐рдо рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рдЖрдИрдкреАрдП рдлрд╛рдЗрд▓ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ:

рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдИрдкреАрдП ( рдЖрдЙрдЯрдкреБрдЯ_рдирд┐рджреЗрд╢рдХ ), рдЖрдИрдкреАрдП ( рдЖрдЙрдЯрдкреБрдЯ_рдирд╛рдо ) рдирд╛рдо, рд╕реНрдХреАрдо ( рд╕реНрдХреАрдо ) рдбрд╛рд▓ рджреА рдЬрд╛рдПрдЧреА, рдЪрд╛рд╣реЗ рдХреНрд▓реАрди ( рд╕реНрд╡рдЪреНрдЫ ) рдФрд░ рдХреБрдЫ рдЕрдиреНрдпред рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ - рдлрд╛рд╕реНрдЯрд▓реЗрди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛, рдЖрдИрдкреАрдП рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ: рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
default_platform(:ios) platform :ios do desc "Builds, achieves and uploads ipa to TestFlight" lane :testflight_lane do cert sigh increment_build_number gym # : # # gym( # workspace: "TheHatGame.xcworkspace", # scheme: "TheHatGame", # configuration: "Release", # clean: true, # output_directory: "./build", # output_name: "TheHatGame.ipa", # codesigning_identity: "iPhone Distribution: Evgeny Shishko" # ) end end
TestFlight рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ
TestFlight рдореЗрдВ ipa рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╛рдпрд▓рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

рдкрд╛рдпрд▓рдЯ рдХреЗ рд╕рд╛рде рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ
- рдмреАрдЯрд╛ рдЯреЗрд╕реНрдЯрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдирд┐рдХрд╛рд▓реЗрдВ;
- рдкрд░реАрдХреНрд╖рдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ;
- рдирд┐рд░реНрдпрд╛рдд рдкрд░реАрдХреНрд╖рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .csv рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреЗ рд╣реИрдВред
рд╣рдо рдЗрд╕рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: Apple Store Connect рдкрд░ рдЕрд╕реЗрдВрдмрд▓рд┐рдпрд╛рдБ рднреЗрдЬрдирд╛ред
Skip_submission рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде test_light uploadlto call upload_to_testflight рдЬреЛрдбрд╝реЗрдВ (рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ ipa рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ) рдФрд░ Skip_waiting_for_build_processing (рд╣рдо рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ):
default_platform(:ios) platform :ios do desc "Builds, achieves and uploads ipa to TestFlight" lane :testflight_lane do cert sigh increment_build_number gym upload_to_testflight( skip_submission: true, skip_waiting_for_build_processing: true ) end end
рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ
рд╣рдо рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдХрдВрд╕реЛрд▓ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ:
$ fastlane testflight_lane
рдЯреЗрд╕реНрдЯрдлрд╝рд▓рд╛рдЗрдЯ рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ, рдЖрдкрдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдбрд░ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред рдЖрдк рдЗрд╕реЗ "рдЬрдирд░реЗрдЯ рдкрд╛рд╕рд╡рд░реНрдб" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЬреЗрдирд░реЗрдЯ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдРрдкреНрдкрд▓ рдЖрдИрдбреА рдЕрдХрд╛рдЙрдВрдЯ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рддрд╛рдЬрд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рдЯреЗрд╕реНрдЯрдлрд▓рд╛рдЗрдЯ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд╛рд╕реНрдЯрд▓реЗрди рд╡рд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛:

рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдРрдк рд╕реНрдЯреЛрд░ рдХрдиреЗрдХреНрдЯ рдореЗрдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:

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