iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рд░ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

рдпрд╕ рд▓реЗрдЦрдорд╛, рд╣рд╛рдореА рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдЬрдореНрдорд╛ рдЧрд░реНрдиреЗ рд░ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрдиреЗ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдЧрд░реНрдЫреМрдВ, рдЬреБрди рдкреНрд▓рд╛рд░рд┐рдпрдо рдХреНрд░рд╛рд╕реНрдиреЛрдбрд╛рд░ рд╕реНрдЯреБрдбрд┐рдпреЛрд▓реЗ CI/CD рдбрд┐рдмрдЧ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдЬрдореНрдорд╛ рдЧрд░реЗрдХреЛ рдЫред

iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рд░ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

рдкреНрд░рд╢рд┐рдХреНрд╖рдг

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

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

  • рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдЦрд╛рддрд╛;
  • рдирд┐рд░реНрдорд╛рдг рд╕рд░реНрднрд░рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ macOS-рдЖрдзрд╛рд░рд┐рдд рдЙрдкрдХрд░рдг;
  • рдЙрддреНрдкрдиреНрди рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░, рдЬреБрди рдердк рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫ;
  • рдЕрджреНрд╡рд┐рддреАрдп рд╕рдВрдЧ рдЖрд╡реЗрджрди рд╕рд┐рд░реНрдЬрдирд╛ ID (рдмрдиреНрдбрд▓ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рдХреЛ рдорд╣рддреНрддреНрд╡рд▓рд╛рдИ рдзреНрдпрд╛рди рджрд┐рдиреБрдкрд░реНрдЫ, рдХрд┐рдирдХрд┐ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдЖрдИрдбреАрдХреЛ рдкреНрд░рдпреЛрдЧрд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХрд╛ рдзреЗрд░реИ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐: рд╕рдореНрдмрджреНрдз рдбреЛрдореЗрдирд╣рд░реВ, рдкреБрд╢ рд╕реВрдЪрдирд╛рд╣рд░реВ, рдПрдкреНрдкрд▓ рд╕рд╛рдЗрди рдЗрди рд░ рдЕрдиреНрдп);
  • рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЖрд╡реЗрджрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд╣рд░реВред

рдПрдХ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреБрдиреИ рдкрдирд┐ macOS рдЙрдкрдХрд░рдгрдорд╛ рдХреАрдЪреЗрди рдорд╛рд░реНрдлрдд рдЙрддреНрдкрдиреНрди рд╣реБрдиреБрдкрд░реНрдЫред рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рдкреНрд░рдХрд╛рд░ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред рдЖрд╡реЗрджрди рд╡рд╛рддрд╛рд╡рд░рдг (рджреЗрд╡, QA, рд╕реНрдЯреЗрдЬрд┐рдЩ, рдЙрддреНрдкрд╛рджрди) рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ, рдпреЛ рдлрд░рдХ рд╣реБрдиреЗрдЫ (рд╡рд┐рдХрд╛рд╕ рд╡рд╛ рд╡рд┐рддрд░рдг), рдЬрд╕реНрддреИ рдЖрд╡реЗрджрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рдкреНрд░рдХрд╛рд░ рд╣реБрдиреЗрдЫред

рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░:

  • рд╡рд┐рдХрд╛рд╕ - рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реАрдХреЛ рдЖрд╡реЗрджрдирдорд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ (рдкреНрд░рдХрд╛рд░ рдирд╛рдо рдЖрдИрдлреЛрди рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛: XXXXX);
  • Ad Hoc - QA рд╡рд┐рднрд╛рдЧрджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рд░ рдЖрдиреНрддрд░рд┐рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрдорд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рд╡рд┐рддрд░рдг рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ (рдкреНрд░рдХрд╛рд░ рдирд╛рдо iPhone рд╡рд┐рддрд░рдг: XXXXX);
  • рдПрдк рд╕реНрдЯреЛрд░ - рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯ рдорд╛рд░реНрдлрдд рдмрд╛рд╣реНрдп рдкрд░реАрдХреНрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рд░рд┐рд▓реАрдЬ рдирд┐рд░реНрдорд╛рдг рд░ рдПрдк рд╕реНрдЯреЛрд░рдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░реНрди, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рд╡рд┐рддрд░рдг рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

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

рд╕реНрдкрд╖реНрдЯрддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдЗрдБ рддрд▓рдХреЛ рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд░реВрдкрдорд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдПрд╕реЗрдореНрдмрд▓реАрдХрд╛ рд▓рд╛рдЧрд┐ рдХреБрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ рд░ рдХрд╣рд╛рдБрдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдмреБрдЭреНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫред

iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рд░ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

рд╡рд┐рдзрд╛рдирд╕рднрд╛

рдпрд╕рд▓рд╛рдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░ рд╡рд╛рддрд╛рд╡рд░рдг рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдкреНрд░реЛрдлрд╛рдЗрд▓ рдирд╛рдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫреМрдВ ${ProjectName}_${Instance}, рддреНрдпреЛ рд╣реЛ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╛рдо + рдЙрджрд╛рд╣рд░рдг (рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ: Dev, QA, GD, рд╕реНрдЯреЗрдЬрд┐рдЩ, рд▓рд╛рдЗрдн, рд░ рдпрд╕реНрддреИ)ред

рдмрд┐рд▓реНрдб рд╕рд░реНрднрд░рдорд╛ рдЖрдпрд╛рдд рдЧрд░реНрджрд╛, рдкреНрд░реЛрдлрд╛рдЗрд▓рд▓реЗ рдЖрдлреНрдиреЛ рдирд╛рдорд▓рд╛рдИ рдЕрджреНрд╡рд┐рддреАрдп ID рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдЫ рд░ рдлреЛрд▓реНрдбрд░рдорд╛ рд╕рд╛рд░рд┐рдиреНрдЫ /Users/$Username/Library/MobileDevice/Provisioning Profiles (рдХрд╣рд╛рдБ $Username рдмрд┐рд▓реНрдб рд╕рд░реНрднрд░рдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддрд╛ рдирд╛рдорд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ)ред

*.ipa рдлрд╛рдЗрд▓ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рджреБрдИ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН - рд▓рд┐рдЧреЗрд╕реА (рдкреНрдпрд╛рдХреЗрдЬ рдЕрдиреБрдкреНрд░рдпреЛрдЧ) рд░ рдЖрдзреБрдирд┐рдХ (XcAchive рд╕рд┐рд░реНрдЬрдирд╛ рд░ рдирд┐рд░реНрдпрд╛рдд рдорд╛рд░реНрдлрдд)ред рдкрд╣рд┐рд▓реЛ рд╡рд┐рдзрд┐рд▓рд╛рдИ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдорд╛рдирд┐рдиреНрдЫ, рдХрд┐рдирдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 8.3 рджреЗрдЦрд┐ рдПрдк рдлрд╛рдЗрд▓ рдкреНрдпрд╛рдХреЗрдЬрд┐рдЩ рдореЛрдбреНрдпреБрд▓рд▓рд╛рдИ Xcode рд╡рд┐рддрд░рдгрдмрд╛рдЯ рд╣рдЯрд╛рдЗрдпреЛред рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдлреЛрд▓реНрдбрд░рдорд╛ рдкреБрд░рд╛рдиреЛ Xcode (рд╕рдВрд╕реНрдХрд░рдг 8.2 рд░ рдЕрдШрд┐рд▓реНрд▓реЛ) рдмрд╛рдЯ рдореЛрдбреНрдпреБрд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:

chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/*

рдЕрд░реНрдХреЛ рддрдкрд╛рдИрдВрд▓реЗ рдЖрд╡реЗрджрдирдХреЛ *.app рдлрд╛рдЗрд▓ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

xcodebuild 
-workspace $ProjectDir/$ProjectName.xcworkspace 
-scheme $SchemeName 
-sdk iphoneos 
build 
-configuration Release 
-derivedDataPath build 
CODE_SIGN_IDENTITY=тАЭ$DevAccNameтАЭ
PROVISIONING_PROFILE=тАЭ$ProfileIdтАЭ
DEPLOYMENT_POSTPROCESSING=YES 
SKIP_INSTALL=YES 
ENABLE_BITCODE=NO

рдХрд╣рд╛рдВ

-workspace - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╛рдЗрд▓рдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рд░реНрдЧред

-scheme - рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдпреЛрдЬрдирд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯред

-derivedDataPath - рдПрд╕реЗрдореНрдмрд▓ рдЧрд░рд┐рдПрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рд░реНрдЧ (*.app)ред

CODE_SIGN_IDENTITY тАФ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдЦрд╛рддрд╛рдХреЛ рдирд╛рдо, рдЬреБрди рдХрд┐рдЪреЗрдирдорд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ (iPhone рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛: XXXX XXXXXXX, рдХреЛрд╖реНрдардХрдорд╛ TeamID рдмрд┐рдирд╛)ред

iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рд░ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

PROVISIONING_PROFILE - рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЖрдИрдбреА, рдЬреБрди рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:

cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//'

рдпрджрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреБрд╢ рд╕реВрдЪрдирд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐), рддреНрдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛ PROVISIONING_PROFILE рд╕рдВрдХреЗрдд:

APP_PROFILE=тАЭ$AppProfileтАЭ 
EXTENSION_PROFILE=тАЭ$ExtProfileтАЭ 

рдЕрд░реНрдХреЛ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк *.app рдлрд╛рдЗрд▓ *.ipa рдорд╛ рдкреНрдпрд╛рдХреЗрдЬ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдЗрдБ рдирд┐рдореНрди рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

/usr/bin/xcrun --sdk iphoneos PackageApplication 
-v $(find "$ProjectDir/build/Build/Products/Release-iphoneos" -name "*.app") 
-o "$ProjectDir/$ProjectName_$Instance.ipa"

рдпрджреНрдпрдкрд┐, рдпреЛ рд╡рд┐рдзрд┐ рдПрдкреНрдкрд▓рдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдорд╛рдирд┐рдиреНрдЫред рдпреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрднрд┐рд▓реЗрдЦрдмрд╛рдЯ рдирд┐рд░реНрдпрд╛рдд рдЧрд░реЗрд░ *.ipa рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЫред

рдкрд╣рд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

xcodebuild 
-workspace $ProjectDir/$ProjectName.xcworkspace 
-scheme $SchemeName 
-sdk iphoneos 
-configuration Release 
archive 
-archivePath $ProjectDir/build/$ProjectName.xcarchive 
CODE_SIGN_IDENTITY=тАЭ$DevAccNameтАЭ 
PROVISIONING_PROFILE=тАЭ$ProfileIdтАЭ
ENABLE_BITCODE=NO 
SYNCHRONOUS_SYMBOL_PROCESSING=FALSE

рднрд┐рдиреНрдирддрд╛рд╣рд░реВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╡рд┐рдзрд┐ рд░ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрдорд╛ рдЫрдиреН SYNCHRONOUS_SYMBOL_PROCESSING, рдЬрд╕рд▓реЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордпрдорд╛ рдкреНрд░рддреАрдХ рдЕрдирд▓реЛрдбрд┐рдЩ рдЕрд╕рдХреНрд╖рдо рдкрд╛рд░реНрдЫред

рдЕрд░реНрдХреЛ рд╣рд╛рдореАрд▓реЗ рдирд┐рд░реНрдпрд╛рдд рд╕реЗрдЯрд┐рдЩрд╣рд░реВрд╕рдБрдЧ рдлрд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

ExportSettings="$ProjectDir/exportOptions.plist"

cat << EOF > $ExportSettings
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<false/>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<false/>
<key>method</key>
<string>$Method</string>
<key>provisioningProfiles</key>
<dict>
<key>$BundleID</key>
<string>$ProfileId</string>
</dict>
<key>signingCertificate</key>
<string>$DevAccName</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>$TeamID</string>
<key>thinning</key>
<string><none></string>
</dict>
</plist>
EOF

рдХрд╣рд╛рдВ

$Method тАФ рд╡рд┐рддрд░рдг рд╡рд┐рдзрд┐, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ, рддреНрдпреЛ рд╣реЛ, рд╡рд┐рдХрд╛рд╕рдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рди рд╡рд┐рдХрд╛рд╕ рд╣реБрдиреЗрдЫ, Ad Hoc рдХреЛ рд▓рд╛рдЧрд┐ - ad-hoc, рд░ App Store рдХреЛ рд▓рд╛рдЧрд┐ - app-storeред

$BundleID - рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдЖрдИрдбреА, рдЬреБрди рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫред рддрдкрд╛рдЗрдБ рдЖрджреЗрд╢ рд╕рдВрдЧ рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName ╨╕ $ProfileId - рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рдирд╛рдо рд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЖрдИрдбреА рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЬреБрди рдкрд╣рд┐рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рд░ рдирд┐рд░реНрдпрд╛рдд рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдорд╛рдирд╣рд░реВ рдорд┐рд▓реНрдиреБрдкрд░реНрдЫред

$TeamID тАФ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рдирд╛рдо рдкрдЫрд┐ рдХреЛрд╖реНрдардХрдорд╛ рджрд╕-рдЕрдЩреНрдХрдХреЛ ID, рдЙрджрд╛рд╣рд░рдг: iPhone рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛: тАжтАж (XXXXXXXXXX); Keychain рдорд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдЕрд░реНрдХреЛ, рдирд┐рд░реНрдпрд╛рдд рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рдЖрд╡рд╢реНрдпрдХ *.ipa рдлрд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ:

xcodebuild 
-exportArchive 
-archivePath $ProjectDir/build/$ProjectName.xcarchive 
-exportPath $ProjectDir 
-exportOptionsPlist $ExportSettings

╨Ф╨╛╤Б╤В╨░╨▓╨║╨░

рдЕрдм рд╕рдЩреНрдХрд▓рди рдлрд╛рдЗрд▓ рдЕрдиреНрддрд┐рдо рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рддреНрдпреЛ рдЙрдкрдХрд░рдгрдорд╛ рд╕реНрдерд╛рдкрд┐рдд рдЫред

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

IOS рдХреЛ рд▓рд╛рдЧреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдерд╛рдкрдирд╛ 2 рдЪрд░рдгрд╣рд░реВрдорд╛ рд╣реБрдиреНрдЫ:

  1. рд╡рд╕реНрддреБ рд╕реЗрд╡рд╛ рдорд╛рд░реНрдлрдд рдЖрд╡реЗрджрди рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХрдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИред
  2. HTTPS рдорд╛рд░реНрдлрдд manifest рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдЕрдиреБрд╕рд╛рд░ *.ipa рдлрд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдкрдирд╛ред

рддрд╕рд░реНрде, рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рд╕реНрдерд╛рдкрдирд╛ рдореНрдпрд╛рдирд┐рдлреЗрд╕реНрдЯ (рдлрд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ *.plist) рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

cat << EOF > $manifest
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>$ipaUrl</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>$BundleID</string>
<key>bundle-version</key>
<string>$AppVersion</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>$ProjectName_$Instance</string>
<key>subtitle</key>
<string>$Instance</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOF

рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреЗ рд░реВрдкрдорд╛, рдореНрдпрд╛рдирд┐рдлреЗрд╕реНрдЯрд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рд░реНрдорд╛рдгрдорд╛ рд╕рдВрд▓рдЧреНрди рд▓рдЧрднрдЧ рд╕рдмреИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

рдЖрд╡реЗрджрди рд╕рдВрд╕реНрдХрд░рдг ($AppVersion) рдЖрджреЗрд╢ рд╕рдВрдЧ рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:

defaults read $ProjectDir/Info CFBundleVersion

рдкрд░рд┐рдорд┐рддрд┐ $ipaUrl *.ipa рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рдкреНрд░рддреНрдпрдХреНрд╖ рд▓рд┐рдЩреНрдХ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдЖрдИрдУрдПрд╕рдХреЛ рд╕рд╛рддреМрдВ рд╕рдВрд╕реНрдХрд░рдгрдмрд╛рдЯ, рдПрдк HTTPS рдорд╛рд░реНрдлрдд рд╕реНрдерд╛рдкрд┐рдд рд╣реБрдиреБрдкрд░реНрдЫред рдЖрдареМрдВ рд╕рдВрд╕реНрдХрд░рдгрдорд╛, рдореНрдпрд╛рдирд┐рдлреЗрд╕реНрдЯрдХреЛ рдврд╛рдБрдЪрд╛ рдЕрд▓рд┐рдХрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫ: рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдЖрдЗрдХрдирд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрд╕рдБрдЧ рдмреНрд▓рдХрд╣рд░реВ рдЬрд╕реНрддреИ

<images>
   <image>...</image>
</images>

рддрд╕рд░реНрде, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди, рдпреЛ рдЬрд╕реНрддреИ рд▓рд┐рдЩреНрдХ рднрдПрдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг HTML рдкреГрд╖реНрда рдкрд░реНрдпрд╛рдкреНрдд рдЫ:

itms-services://?action=download-manifest&url=https://$ServerUrl/$ProjectName/$Instance/iOS/$AppVersion/manifest.plist

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

  • рд╕реНрд╡рд╛рдпрддреНрддрддрд╛ рд░ рд╕реНрд╡рддрдиреНрддреНрд░рддрд╛,
  • рдкрд╣реБрдБрдЪ рдирд┐рдпрдиреНрддреНрд░рдгрдХреЛ рдХреЗрдиреНрджреНрд░реАрдХрд░рдг рд░ "рдЕрд╕реНрдерд╛рдпреА" рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдорд╛рд░реНрдлрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдерд╛рдкрдирд╛,
  • рд╡рд┐рд╕реНрддрд╛рд░рдпреЛрдЧреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рдЕрд░реНрдерд╛рдд, рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реАрд▓реЗ рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдЫреБрдЯреЗрдХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВрд▓рд╛рдИ рдПрдХреАрдХреГрдд рдЧрд░реНрди рд╕рдХреНрдЫ)ред

рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджреИ

рдЕрдм рд╣рд╛рдореА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬ рдкрд░реАрдХреНрд╖рдгрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВ рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯ.

рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рд░реНрддрд╣рд░реВ рдПрдк рд╕реНрдЯреЛрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рдХреЛ рдкреНрд░рдХрд╛рд░ рд░ рдЙрддреНрдкрдиреНрди API рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реЛред

рддреНрдпрд╣рд╛рдБ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рдзреЗрд░реИ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН:

  • Xcode (рдЖрдпреЛрдЬрдХ) рдорд╛рд░реНрдлрдд,
  • altool рдорд╛рд░реНрдлрдд,
  • Xcode (рдЕрд╣рд┐рд▓реЗ рдЯреНрд░рд╛рдиреНрд╕рдкреЛрд░реНрдЯрд░) рдХреЛ рдкреБрд░рд╛рдиреЛ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд▓реЛрдбрд░ рдорд╛рд░реНрдлрддред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдбрд╛рдЙрдирд▓реЛрдбрдХреЛ рд▓рд╛рдЧрд┐, altool рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рдорд╛ рджреБрдИ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐рд╣рд░реВ рдкрдирд┐ рдЫрдиреН:

  • рдПрдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб,
  • API рдХреБрдЮреНрдЬреАред

рдПрдкреАрдЖрдИ рдХреБрдЮреНрдЬреА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд░рд╛рдореНрд░реЛ рдЫред

API рдХреБрдЮреНрдЬреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рдЬрд╛рдиреБрд╣реЛрд╕реН рд▓рд┐рдЩреНрдХ рд░ рдХреБрдЮреНрдЬреА рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред *.p8 рдврд╛рдБрдЪрд╛рдорд╛ рдХреБрдЮреНрдЬреАрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рд╛рдореАрд▓рд╛рдИ рджреБрдИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ: IssuerID рд░ KeyIDред

iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рд░ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

рдЕрд░реНрдХреЛ, рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдХреБрдЮреНрдЬреА рдмрд┐рд▓реНрдб рд╕рд░реНрднрд░рдорд╛ рдЖрдпрд╛рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН:

mkdir -p ~/.appstoreconnect/private_keys
mv ~/Downloads/AuthKey_${KeyID}.p8 ~/.appstoreconnect/private_keys/

TestFlight рдорд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдЕрдкрд▓реЛрдб рдЧрд░реНрдиреБ рдЕрдШрд┐, рддрдкрд╛рдИрд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рд╣рд╛рдореА рдпреЛ рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдЧрд░реНрдЫреМрдВ:

xcrun altool 
--validate-app 
-t ios 
-f $(find "$ProjectDir" -name "*.ipa") 
--apiKey тАЬ$KeyIDтАЭ 
--apiIssuer тАЬ$IssuerIDтАЭ 

рдХрд╣рд╛рдБ apiKey ╨╕ apiIssuer API рдХреБрдЮреНрдЬреА рдЙрддреНрдкрд╛рджрди рдкреГрд╖реНрдардмрд╛рдЯ рдлрд┐рд▓реНрдб рдорд╛рдирд╣рд░реВ рдЫрдиреНред

рдЕрд░реНрдХреЛ, рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрдЫрд┐, рд╣рд╛рдореА рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓реЛрдб рдЧрд░реНрдЫреМрдВ --upload-app рд╕рдорд╛рди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕рдВрдЧред

рдПрдк рдПрдХ рд╡рд╛ рджреБрдИ рджрд┐рди рднрд┐рддреНрд░ Apple рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЧрд░рд┐рдиреЗрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдмрд╛рд╣реНрдп рдкрд░реАрдХреНрд╖рдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рд╣реБрдиреЗрдЫ: рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реНрдерд╛рдкрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдЗрдореЗрд▓ рдЧрд░рд┐рдиреЗрдЫред

altool рдорд╛рд░реНрдлрдд рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреЗ рдЕрд░реНрдХреЛ рддрд░рд┐рдХрд╛ рдПрдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд╣реЛред

рдПрдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рддрдкрд╛рдИрдВрд▓реЗ рдЬрд╛рдиреБ рдкрд░реНрдЫ рд▓рд┐рдЩреНрдХ рд░ рдпрд╕рд▓рд╛рдИ рд╕реБрд░рдХреНрд╖рд╛ рдЦрдгреНрдбрдорд╛ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред

iOS рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рд░ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

рдЕрд░реНрдХреЛ, рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдкрд╛рд╕рд╡рд░реНрдбрдХреЛ рд╕рд╛рде рдХрд┐рдЪреЗрдирдорд╛ рдмрд┐рд▓реНрдб рд╕рд░реНрднрд░ рд░реЗрдХрд░реНрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫред Xcode рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 11 рдмрд╛рдЯ рдпреЛ рдЖрджреЗрд╢ рд╕рдВрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:

xcrun altool --store-password-in-keychain-item "Altool" -u "$DeveloperName" -p $AppPswd

рдХрд╣рд╛рдВ

$DeveloperName - рдПрдкреНрдкрд▓ рд╕реЗрд╡рд╛рд╣рд░реВрдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдЖрдИрдУрдПрд╕ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдЦрд╛рддрд╛рдХреЛ рдирд╛рдоред

$AppPswd - рдЙрддреНрдкрдиреНрди рдПрдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдбред

рдЕрд░реНрдХреЛ, рд╣рд╛рдореА asc-рдкреНрд░рджрд╛рдпрдХ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдорд╛рди рдкрд╛рдЙрдБрдЫреМрдВ рд░ рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдкрд╛рд╕рд╡рд░реНрдб рдЖрдпрд╛рддрдХреЛ рд╕рдлрд▓рддрд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдЫреМрдВ:

xcrun altool --list-providers -u "$DeveloperName" -p "@keychain:Altool"

рд╣рд╛рдореАрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рдЙрдБрдЫреМрдВ:

Provider listing:
- Long Name - - Short Name -
XXXXXXX        XXXXXXXXX

рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЖрд╡рд╢реНрдпрдХ рдЫреЛрдЯреЛ рдирд╛рдо рдорд╛рди (asc-рдкреНрд░рджрд╛рдпрдХ) $TeamID рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВред

TestFlight рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рд░ рд▓реЛрдб рдЧрд░реНрди, рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

xcrun altool 
--(validate|upload)-app   
-f $(find "$ProjectDir" -name "*.ipa") 
-u "$DeveloperName" 
-p "@keychain:Altool" 

рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдорд╛рдирдХреЛ рд░реВрдкрдорд╛ -p рддрдкрд╛рдИрдВ рдореВрд▓реНрдп рд▓рд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ $AppPswd рдЕрдирдЗрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб (рд╕реНрдкрд╖реНрдЯ) рдлрд╛рд░рдордорд╛ред

рдпрджреНрдпрдкрд┐, рдкрд╣рд┐рд▓реЗ рдиреИ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдЭреИрдВ, рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ, altool рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ API рдХреБрдЮреНрдЬреА рдЫрдиреЛрдЯ рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫ, рдХрд┐рдирдХрд┐ Xcode рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдорд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЫрдиреН ("рджреЗрдЦреНрджреИрди" рдХрд┐рдЪреЗрди, рдЕрдкрд▓реЛрдб рдЧрд░реНрджрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддреНрд░реБрдЯрд┐рд╣рд░реВ, рдЖрджрд┐)ред

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

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

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