рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдФрд░ рд╡рд┐рддрд░рдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдХреНрд╕рд┐рдо Shestakov, Plarium рдХреНрд░рд╛рд╕реНрдиреЛрджрд░ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ DevOps рдЗрдВрдЬреАрдирд┐рдпрд░, рд╕реАрдЖрдИ / рд╕реАрдбреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЬрдорд╛ рд╣реБрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред



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


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

рдиреЗрдЯ рдкрд░ рдореВрд▓ рдмрд╛рддреЗрдВ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдореБрдЦреНрдп рдмрд╛рдд рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

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

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

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

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

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

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



рд╕рднрд╛


рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреГрд╢реНрдп рдХреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН ${ProjectName}_${Instance}, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг + рдЙрджрд╛рд╣рд░рдг (рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: рджреЗрд╡, рдХреНрдпреВрдП, рдЬреАрдбреА, рд╕реНрдЯреЗрдЬрд┐рдВрдЧ, рд▓рд╛рдЗрд╡, рдФрд░ рдЗрд╕реА рддрд░рд╣)ред

рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЕрдкрдирд╛ рдирд╛рдо рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ /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-file рдПрдХрддреНрд░ рдХрд░рдиреА рд╣реЛрдЧреА:

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, рдмреНрд░реИрдХреЗрдЯ рдореЗрдВ рдЯреАрдордЖрдИрдбреА рдХреЗ рдмрд┐рдирд╛) рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



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"

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ Apple рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдХреЗ * .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

рд╡рд┐рддрд░рдг


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

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

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 рдиреЗ рдЕрдкрдирд╛ рдмрд┐рд▓реНрдб рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рджреЗрддрд╛ рд╣реИ:

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

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


рдЕрдм рд╣рдо TestFlight рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ ред

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

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:

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

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

  • рдРрдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб,
  • рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА

рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ рдФрд░ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред * .P8 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдЬрд╛рд░реАрдХрд░реНрддрд╛ рдФрд░ рдХреАрдЖрдИрдбреАред



рдЕрдЧрд▓рд╛, рд╣рдо рдирд┐рд░реНрдорд┐рдд рд╕рд░реНрд╡рд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдХреБрдВрдЬреА рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ:

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тАЭ 

API рдХреБрдВрдЬреА рдкреАрдврд╝реА рдкреГрд╖реНрда рд╕реЗ рдлрд╝реАрд▓реНрдб рдорд╛рди рдХрд╣рд╛рдБ apiKeyрдФрд░ рдХрд╣рд╛рдБ рд╣реИ apiIssuerред

рдлрд┐рд░, рд╕рдлрд▓ рд╕рддреНрдпрд╛рдкрди рдкрд░, рд╣рдо рдПрдХ --upload-appрд╣реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ ред

рдРрдкреНрдкрд▓ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕реЗ рджреЛ рджрд┐рдиреЛрдВ рдХреЗ рднреАрддрд░ рдЖрд╡реЗрджрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдмрд╛рд╣рд░реА рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛: рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдИ-рдореЗрд▓ рд▓рд┐рдВрдХ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗред

Altool рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдРрдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рдРрдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рдЕрдЧрд▓рд╛, рдЗрд╕ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХрд┐рдЪреЗрди рдореЗрдВ рдПрдХ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдПрдВред Xcode рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 11 рд╕реЗ, рдпрд╣ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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

рдХрд╣рд╛рдБ:

$DeveloperNameiOS рдбреЗрд╡рд▓рдкрд░ рдЦрд╛рддреЗ рдХрд╛ рдирд╛рдо Apple рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

$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 рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ (рдпрд╣ рдЪрд╛рдмреА рдХрд╛ рдЧреБрдЪреНрдЫрд╛ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИ, рдПрдХреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рдЖрджрд┐)ред

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

All Articles