iOS ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдЕрд╕реЗрдВрдмрд▓рд┐рдВрдЧ рдЖрдгрд┐ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рддреЛ, рдЬреЛ рдкреНрд▓рд╛рд░рд┐рдпрдо рдХреНрд░реЕрд╕реНрдиреЛрдбрд╛рд░ рд╕реНрдЯреБрдбрд┐рдУрдиреЗ CI/CD рдбреАрдмрдЧ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдЬрдорд╛ рдХреЗрд▓рд╛ рдЖрд╣реЗ.

iOS ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

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

рдНрдкрд▓ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕реЗрд╕рд╕рд╛рдареА рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рдордзреНрдпреЗ рдПрдХ рдХрд┐рдВрд╡рд╛ рджреБрд╕рд░реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рдЧреБрдВрддрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддреАрдиреЗ рдЖрдзреАрдЪ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╕реЛрдпреАрдЪреА рдкреНрд░рд╢рдВрд╕рд╛ рдХреЗрд▓реА рдЖрд╣реЗ. рд╕рд░реНрд╡рддреНрд░ рдЕрдбрдЪрдгреА рдЖрдврд│рддрд╛рдд: рд╡рд┐рдХрд╕рдХ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдиреВрдкрд╛рд╕реВрди рдбреАрдмрдЧ рдЖрдгрд┐ рдмрд┐рд▓реНрдб рдЯреВрд▓реНрд╕рдкрд░реНрдпрдВрдд.

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

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

рд╡рд┐рдХрд╛рд╕рдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА macOS рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╡рд░ рдХреАрдЪреЗрдирджреНрд╡рд╛рд░реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдЪрд╛ рдкреНрд░рдХрд╛рд░ рдЦреВрдк рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдЖрд╣реЗ. ре▓рдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рд╡рд░ (рджреЗрд╡, рдХреНрдпреВрдП, рд╕реНрдЯреЗрдЬрд┐рдВрдЧ, рдЙрддреНрдкрд╛рджрди) рддреЗ рд╡реЗрдЧрд│реЗ рдЕрд╕реЗрд▓ (рд╡рд┐рдХрд╛рд╕ рдХрд┐рдВрд╡рд╛ рд╡рд┐рддрд░рдг), рдЬрд╕реЗ рдХреА ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓рдЪрд╛ рдкреНрд░рдХрд╛рд░ рдЕрд╕реЗрд▓.

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

  • рд╡рд┐рдХрд╛рд╕ - рд╡рд┐рдХрд╛рд╕ рдХрд╛рд░реНрдпрд╕рдВрдШрд╛рдЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рд╡рд░ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ, рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ (рдЖрдпрдлреЛрди рд╡рд┐рдХрд╕рдХрд╛рдЪреЗ рдирд╛рд╡: XXXXX);
  • рддрджрд░реНрде - рдЪрд╛рдЪрдгреА рдЕрд░реНрдЬрд╛рд╡рд░ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ QA рд╡рд┐рднрд╛рдЧрд╛рджреНрд╡рд╛рд░реЗ рдЕрдВрддрд░реНрдЧрдд рдкрдбрддрд╛рд│рдгреАрд╕рд╛рдареА, рд╡рд┐рдХрд╕рдХрд╛рдЪреЗ рд╡рд┐рддрд░рдг рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ (рдкреНрд░рдХрд╛рд░ рдирд╛рд╡ iPhone рд╡рд┐рддрд░рдг: XXXXX);
  • ре▓рдк рд╕реНрдЯреЛрдЕрд░ - рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯрджреНрд╡рд╛рд░реЗ рдмрд╛рд╣реНрдп рдЪрд╛рдЪрдгреАрд╕рд╛рдареА рд░рд┐рд▓реАрдЬ рдмрд┐рд▓реНрдб рдЖрдгрд┐ ре▓рдк рд╕реНрдЯреЛрдЕрд░рд╡рд░ рдЕрдкрд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд┐рдХрд╕рдХрд╛рдЪреЗ рд╡рд┐рддрд░рдг рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ.

рд╡рд┐рдХрд╛рд╕ рдЖрдгрд┐ рддрджрд░реНрде рдкреНрд░реЛрдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рд╣реЗ рджреЗрдЦреАрд▓ рд╕реВрдЪрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рд╕реВрдЪреА, рдЬреНрдпрд╛рд╡рд░ рддреБрдореНрд╣реА рдмрд┐рд▓реНрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддрд╛, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдкреНрд░рд╡реЗрд╢ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. ре▓рдк рд╕реНрдЯреЛрдЕрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рдордзреНрдпреЗ рдЙрдкрдХрд░рдгрд╛рдВрдЪреА рдХреЛрдгрддреАрд╣реА рд╕реВрдЪреА рдирд╛рд╣реА, рдХрд╛рд░рдг рдмрдВрдж рдмреАрдЯрд╛ рдЪрд╛рдЪрдгреА рджрд░рдореНрдпрд╛рди рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдг TestFlight рджреНрд╡рд╛рд░реЗ рд╣рд╛рддрд╛рд│рд▓реЗ рдЬрд╛рддреЗ, рдЬреНрдпрд╛рдЪреА рдирдВрддрд░ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рдЬрд╛рдИрд▓.

рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА, рддреБрдореНрд╣реА рд╡рд┐рдХрд╛рд╕рдХрд╛рдЪреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЦрд╛рд▓реАрд▓ рд╕рд╛рд░рдгреАрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рд╕рд╛рджрд░ рдХрд░реВ рд╢рдХрддрд╛. рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЕрд╕реЗрдВрдмреНрд▓реАрд╕рд╛рдареА рдХреЛрдгрддреЗ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд рдЖрдгрд┐ рддреЗ рдХреЛрдареВрди рдорд┐рд│рд╡рд╛рдпрдЪреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рд╕реЛрдкреЗ рдХрд░рддреЗ.

iOS ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

рдЕрд╕реЗрдВрдмреНрд▓реА

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

рдмрд┐рд▓реНрдб рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЖрдпрд╛рдд рдХреЗрд▓реНрдпрд╛рд╡рд░, рдкреНрд░реЛрдлрд╛рдЗрд▓ рддреНрдпрд╛рдЪреЗ рдирд╛рд╡ рдПрдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдпрдбреАрдордзреНрдпреЗ рдмрджрд▓рддреЗ рдЖрдгрд┐ рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рд╣рд▓рд╡рд▓реЗ рдЬрд╛рддреЗ /Users/$Username/Library/MobileDevice/Provisioning Profiles (рдХреБрдареЗ $Username рдмрд┐рд▓реНрдб рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЦрд╛рддреНрдпрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ).

*.ipa рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рджреЛрди рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд - рд╡рд╛рд░рд╕рд╛ (PackageApplication) рдЖрдгрд┐ рдЖрдзреБрдирд┐рдХ (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 тАФ рдбрд┐рд▓рд┐рд╡реНрд╣рд░реА рдкрджреНрдзрдд, рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░рд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗ, рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╛рдареА рдореВрд▓реНрдп рд╡рд┐рдХрд╛рд╕ рдЕрд╕реЗрд▓, ре▓рдб-рд╣реЙрдХрд╕рд╛рдареА - ре▓рдб-рд╣реЙрдХ рдЖрдгрд┐ ре▓рдк рд╕реНрдЯреЛрдЕрд░рд╕рд╛рдареА - ре▓рдк-рд╕реНрдЯреЛрдЕрд░.

$BundleID тАФ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдпрдбреА, рдЬреЛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдЖрдкрдг рдХрдорд╛рдВрдбрд╕рд╣ рддрдкрд╛рд╕реВ рд╢рдХрддрд╛:

defaults read $ProjectDir/Info CFBundleIdentifier

$DevAccName ╨╕ $ProfileId тАФ рд╡рд┐рдХрд╛рд╕рдХрд╛рдЪреЗ рдирд╛рд╡ рдЖрдгрд┐ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЖрдпрдбреА рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдЬреА рдкреВрд░реНрд╡реА рд╡рд╛рдкрд░рд▓реА рдЧреЗрд▓реА рд╣реЛрддреА рдЖрдгрд┐ рдирд┐рд░реНрдпрд╛рдд рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреАрд▓ рдореВрд▓реНрдпрд╛рдВрд╢реА рдЬреБрд│рд▓реА рдкрд╛рд╣рд┐рдЬреЗ.

$TeamID тАФ рдбреЗрд╡реНрд╣рд▓рдкрд░рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдирдВрддрд░ рдХрдВрд╕рд╛рдд рджрд╣рд╛-рдЕрдВрдХреА рдЖрдпрдбреА, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде: iPhone рдбреЗрд╡реНрд╣рд▓рдкрд░: тАжтАж (XXXXXXXXXX); рдХреАрдЪреЗрдирдордзреНрдпреЗ рддрдкрд╛рд╕рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

рдкреБрдвреЗ, рдирд┐рд░реНрдпрд╛рдд рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди, рдЖрдореНрд╣реА рдЖрд╡рд╢реНрдпрдХ *.ipa рдлрд╛рдЗрд▓ рдорд┐рд│рд╡рддреЛ:

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

рд╢рд┐рдкрд┐рдВрдЧ рдорд╛рд╣рд┐рддреА

рдЖрддрд╛ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗрд▓реА рдлрд╛рдЗрд▓ рдЕрдВрддрд┐рдо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗрдЪ, рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ.

HockeyApp, AppBlade рдЖрдгрд┐ рдЗрддрд░ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдЖрдгрд┐ ре▓рдб рд╣реЙрдХ рдмрд┐рд▓реНрдбреНрд╕рдЪреЗ рд╡рд┐рддрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рд╕реЗрд╡рд╛ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдкрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рддрд░рдгрд╛рд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ рд╕рд░реНрд╡реНрд╣рд░рдмрджреНрджрд▓ рдмреЛрд▓реВ.

iOS рд╕рд╛рдареА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ 2 рдЯрдкреНрдкреНрдпрд╛рдд рд╣реЛрддреЗ:

  1. рдЖрдпрдЯрдо рд╕реЗрд╡реЗрджреНрд╡рд╛рд░реЗ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдореЕрдирд┐рдлреЗрд╕реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ.
  2. HTTPS рджреНрд╡рд╛рд░реЗ рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдорд╛рд╣рд┐рддреАрдиреБрд╕рд╛рд░ *.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 рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдереЗрдЯ рд▓рд┐рдВрдХ рдЖрд╣реЗ. iOS рдЪреНрдпрд╛ рд╕рд╛рддрд╡реНрдпрд╛ рдЖрд╡реГрддреНрддреАрдкрд╛рд╕реВрди, рдЕрдиреБрдкреНрд░рдпреЛрдЧ 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 рдХреА рд╡рд╛рдкрд░реВрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ рдЕрдзрд┐рдХ рд╢реНрд░реЗрдпрд╕реНрдХрд░ рдЖрд╣реЗ.

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 рд╕рдорд╛рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣.

ре▓рдкрд▓рджреНрд╡рд╛рд░реЗ рдПрдХ рдХрд┐рдВрд╡рд╛ рджреЛрди рджрд┐рд╡рд╕рд╛рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА рдЪрд╛рдЪрдгреА рдХреЗрд▓реА рдЬрд╛рдИрд▓ рдЖрдгрд┐ рдирдВрддрд░ рдмрд╛рд╣реНрдп рдкрд░реАрдХреНрд╖рдХрд╛рдВрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рд╣реЛрдИрд▓: рддреНрдпрд╛рдВрдирд╛ рд╕реНрдерд╛рдкрдиреЗрд╕рд╛рдареА рд▓рд┐рдВрдХ рдИрдореЗрд▓ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓.

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

ре▓рдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдЬрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рджреБрд╡рд╛ рдЖрдгрд┐ рддреЗ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рднрд╛рдЧрд╛рдд рддрдпрд╛рд░ рдХрд░рд╛.

iOS ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

рдкреБрдвреЗ, рддреБрдореНрд╣реА рдпрд╛ рдкрд╛рд╕рд╡рд░реНрдбрд╕рд╣ рдХреАрдЪреЗрдирдордзреНрдпреЗ рдПрдХ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡реНрд╣рд░ рд░реЗрдХреЙрд░реНрдб рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ. Xcode рдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреА 11 рд╡рд░реВрди рд╣реЗ рдХрдорд╛рдВрдбрд╕рд╣ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:

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

рдХреЛрдареЗ:

$DeveloperName тАФ Apple рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рд▓реЙрдЧ рдЗрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ iOS рд╡рд┐рдХрд╕рдХ рдЦрд╛рддреНрдпрд╛рдЪреЗ рдирд╛рд╡.

$AppPswd тАФ рд╡реНрдпреБрддреНрдкрдиреНрди ре▓рдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб.

рдкреБрдвреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ asc-рдкреНрд░рджрд╛рддрд╛ рдкреЕрд░рд╛рдореАрдЯрд░рдЪреЗ рдореВрд▓реНрдп рдорд┐рд│рддреЗ рдЖрдгрд┐ рдХрдорд╛рдВрдбрд╕рд╣ рдкрд╛рд╕рд╡рд░реНрдб рдЗрдВрдкреЛрд░реНрдЯрдЪреЗ рдпрд╢ рддрдкрд╛рд╕рд╛:

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

рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд│рддреЗ:

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

рдЬрд╕реЗ рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдЖрд╡рд╢реНрдпрдХ рд▓рд╣рд╛рди рдирд╛рд╡ рдореВрд▓реНрдп (asc-provider) рд╣реЗ $TeamID рдкреЕрд░рд╛рдореАрдЯрд░рд╢реА рдЬреБрд│рддреЗ рдЬреЗ рдЖрдореНрд╣реА ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рд╡рд╛рдкрд░рд▓реЗ рд╣реЛрддреЗ.

рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯрдордзреНрдпреЗ ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдорд╛рдгрд┐рдд рдЖрдгрд┐ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рд╛:

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

рдкреЕрд░рд╛рдореАрдЯрд░ рдореВрд▓реНрдп рдореНрд╣рдгреВрди -p рдЖрдкрдг рдореВрд▓реНрдп рдШреЗрдК рд╢рдХрддрд╛ $AppPswd рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб (рд╕реНрдкрд╖реНрдЯ) рд╕реНрд╡рд░реВрдкрд╛рдд.

рддрдерд╛рдкрд┐, рдЖрдзреАрдЪ рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, altool рдЕрдзрд┐рдХреГрддрддреЗрд╕рд╛рдареА API рдХреА рдирд┐рд╡рдбрдгреЗ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ, рдХрд╛рд░рдг Xcode рдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдордзреНрдпреЗ рдХрд╛рд╣реА рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗрдд (рдХреАрдЪреЗрди тАЬрджрд┐рд╕рдд рдирд╛рд╣реАтАЭ, рдЕрдкрд▓реЛрдб рджрд░рдореНрдпрд╛рди рдЕрдзрд┐рдХреГрддрддрд╛ рддреНрд░реБрдЯреА рдЗ.).

рддреЗ рд╕рд░реНрд╡ рдЖрд╣реЗ, рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд. App Store рдордзреАрд▓ рдпрд╢рд╕реНрд╡реА рдмрд┐рд▓реНрдб рдЖрдгрд┐ рд╕рдорд╕реНрдпрд╛-рдореБрдХреНрдд рд░рд┐рд▓реАрдЭрдордзреНрдпреЗ рд╕рд╣рднрд╛рдЧреА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рд▓рд╛ рдорд╛рдЭреА рдЗрдЪреНрдЫрд╛ рдЖрд╣реЗ.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛