рдж рдиреНрдпреВ рдЖрдИрдУрдПрд╕ рдореЛрдмрд╛рдЗрд▓ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬред рднрд╛рдЧ # 1: рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрдирд░реЗрд╢рди

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!


рдореЗрд░рд╛ рдирд╛рдо рджрд┐рдорд┐рддреНрд░реА рд╣реИред рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдкрд┐рдЫрд▓реЗ рджреЛ рд╡рд░реНрд╖реЛрдВ рд╕реЗ 13 рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдПрдХ рдЯреАрдо рдореЗрдВ рдПрдХ рдЯреАрдо рд▓реАрдбрд░ рд╣реВрдВред рдФрд░ рд╕рд╛рде рдореЗрдВ рд╣рдо рдЯрд┐рдВрдХрдСрдл рдмрд┐рдЬрдиреЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред


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


рдореИрдВ рдЖрдкрдХреЛ рдЙрди рдкреНрд░рдерд╛рдУрдВ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдЬрд┐рдирдХреА рдорджрдж рд╕реЗ рдЯреАрдо рдХреЛ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реА рд╣реИ рдФрд░ рдПрдХ рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдпрд╛ рддрддреНрдХрд╛рд▓ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рддрдирд╛рд╡, рдХреАрдбрд╝реЗ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред #MakeReleaseWithoutStress


рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!


рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред


рдПрдХ рдФрд░ рд░рд┐рд▓реАрдЬ рд╣реИред рдпрд╣ рдкреНрд░рддрд┐рдЧрдорди рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдерд╛, рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХ рдЬрдЧрд╣ рдорд┐рд▓реА рдЬрд╣рд╛рдВ рдЖрд╡реЗрджрди рдореЗрдВ рдкрд╛рда рдХреЗ рдмрдЬрд╛рдп, рд▓рд╛рдЗрди рдЖрдИрдбреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдмрдЧ

рдпрд╣ рд╣рдорд╛рд░реА рд╕рдмрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдереА рдЬрд┐рд╕рдХрд╛ рд╣рдордиреЗ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред


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


рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗ:


  • рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЪрд┐рддреНрд░ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдмрд▓ рдкреВрд░реНрд╡рд╡рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ
    UIImage(named: "NotExist")! 
  • рдпрджрд┐ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХреЛ рд▓рдХреНрд╖реНрдп рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
  • рдпрджрд┐ рдЖрдк рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рд╕реЗ рдХрд┐рд╕реА рдЧреИрд░-рдореМрдЬреВрдж рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
  • рдпрджрд┐ рдЖрдкрдиреЗ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рд╕реЗ рдПрдХ рдореМрдЬреВрджрд╛ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдпрд╛ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд▓рдд рд╡рд░реНрдЧ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдпрджрд┐ рдЖрдк рдХреЛрдб рдореЗрдВ рдПрдХ рдлрд╝реЙрдиреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ info.plist рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдлрд╝реЙрдиреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рджреБрд░реНрдШрдЯрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдирдХ рдлрд╝реЙрдиреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред рдбреЗрд╡рд▓рдкрд░ Apple: рдХрд╕реНрдЯрдо рдлрд╝реЙрдиреНрдЯреНрд╕ , Stackoverflow: рдХреНрд░реИрд╢
  • рдпрджрд┐ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
  • рдиреАрд░рд╕ рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЬреЛ рдЖрдЗрдХрди, рдлреЛрдВрдЯ, рдирд┐рдпрдВрддреНрд░рдХ, рджреГрд╢реНрдп рдмрдирд╛рддрд╛ рд╣реИ
  • рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХреЛрдИ рдЪрд┐рддреНрд░, рдЖрдЗрдХрди рдирд╣реАрдВ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рддрд╕реНрд╡реАрд░ рдХрд╛ рдирд╛рдо рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ
  • рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдПрдХ рдРрд╕реЗ рдлреЙрдиреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ info.plist рдореЗрдВ рдирд╣реАрдВ рд╣реИ
  • рд╕реНрдерд╛рдиреАрдп рдкрд╣рдЪрд╛рди рдпреЛрдЧреНрдпред рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдкрдВрдХреНрддрд┐ рдореЗрдВ рд░реЛ рдЖрдИрдбреА рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ (рд╕реЛрдЪрд╛ рдХрд┐ рд╡реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ)
  • рдХреБрдЫ рдФрд░ рдЬреЛ рдореИрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛, рдпрд╛ рд╣рдордиреЗ рдЕрднреА рддрдХ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдХрд╛рд░рдг тЖТ рдкреНрд░рднрд╛рд╡


рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ?


рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рдЧрд▓рдд рд▓рд┐рдЦрд╛ рд╣реИ (рдлреЛрди рдХрд░рддреЗ рд╕рдордп рд╡рд╛рдХреНрдп рд░рдЪрдирд╛, рдпрд╛ рдЧрд▓рдд рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо), рддреЛ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╕ рдЕрд╕реЗрдВрдмрд▓ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп, рд╕реНрдкрд╖реНрдЯ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред


рд▓реЗрдХрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рдХреНрдпрд╛?


рд╡реЗ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдмрд╕ рдмрдВрдбрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓рд╛ - рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдореЗрдВ рддрд╛рд░ рдХреЗ рд╕рд╛рдеред


рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ


рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ mail.ru рдкрд░ Cocoaheads рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛рдж рдЖрдпрд╛ред рдХреЛрдб рдЬрдирд░реЗрд╢рди рдЯреВрд▓реНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рд╣реБрдИред


рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдпреЗ рдЙрдкрдХрд░рдг (рдкреБрд╕реНрддрдХрд╛рд▓рдп / рд░реВрдкрд░реЗрдЦрд╛) рдХреНрдпрд╛ рд╣реИрдВ, рд╣рдордиреЗ рдЕрдВрдд рдореЗрдВ рдкрд╛рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред


рдЗрд╕реА рд╕рдордп, рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Google рдиреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдПрдХ рдРрд╕рд╛ рдЙрдкрдХрд░рдг рдмрдирд╛рдпрд╛ред рд▓реЗрдХрд┐рди Apple, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдерд┐рд░ Xcode, рд╣рдореЗрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ...


рдЬреЛ рдХреБрдЫ рднреА рдерд╛ рд╡рд╣ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдЙрдкрдХрд░рдг рдЪреБрдирдирд╛ рд╣реИ: рдирддрд╛рд▓реА , рд╕реНрд╡рд┐рдлреНрдЯрдЧреИрди рдпрд╛ рдЖрд░ ред рд╕реНрд╡рд┐рдлреНрдЯ ?


рдирддрд╛рд▓реА рдХреЗ рдкрд╛рд╕ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдерд╛, рдЗрд╕реЗ рддреБрд░рдВрдд рддреНрдпрд╛рдЧрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред SwiftGen рдФрд░ R.swift рдореЗрдВ рдмрд╣реБрдд рд╕рдорд╛рди рдХреНрд╖рдорддрд╛рдПрдВ рдереАрдВред рд╣рдордиреЗ R.swift рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛, рдмрд╕ рд╕рд┐рддрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп рд╣рдо SwiftGen рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред


R.swift рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдПрдХ рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рди рдмрд┐рд▓реНрдб рдЪрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ R.generated.swift рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ (рд╣рдо рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдХреИрд╕реЗ рдХрд░реЗрдВ)ред


рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рд╣реИ:


 import Foundation import Rswift import UIKit /// This `R` struct is generated and contains references to static resources. struct R: Rswift.Validatable { fileprivate static let applicationLocale = hostingBundle.preferredLocalizations.first.flatMap(Locale.init) ?? Locale.current fileprivate static let hostingBundle = Bundle(for: R.Class.self) static func validate() throws { try intern.validate() } // ... /// This `R.string` struct is generated, and contains static references to 2 localization tables. struct string { /// This `R.string.localizable` struct is generated, and contains static references to 1196 localization keys. struct localizable { /// en translation:  Apple Pay /// /// Locales: en, ru static let card_actions_activate_apple_pay = Rswift.StringResource(key: "card_actions_activate_apple_pay", tableName: "Localizable", bundle: R.hostingBundle, locales: ["en", "ru"], comment: nil) // ... /// en translation:  Apple Pay /// /// Locales: en, ru static func card_actions_activate_apple_pay(_: Void = ()) -> String { return NSLocalizedString("card_actions_activate_apple_pay", bundle: R.hostingBundle, comment: "") } } } } 

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


 let str = R.string.localizable.card_actions_activate_apple_pay() print(str) >  Apple Pay 

" Rswift.StringResource рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?", рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВред рдореИрдВ рдЦреБрдж рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦрдХ рдмрддрд╛рддреЗ рд╣реИрдВ, рдирд┐рдореНрди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд▓рд┐рдВрдХ ред


рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдЖрд╡реЗрджрди


рдиреАрдЪреЗ рджреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рдЫреЛрдЯреА рд╡реНрдпрд╛рдЦреНрдпрд╛:


* рдпрд╣ рдерд╛ - рдЙрдиреНрд╣реЛрдВрдиреЗ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рдЕрдВрдд рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛
* рдпрд╣ рдмрди рдЧрдпрд╛ рд╣реИ - рдирдпрд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рд╣рдо рдЬрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
* рдпрд╣ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрднреА рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдорд┐рд▓рд╛, рдЙрди рджрд┐рдиреЛрдВ рдореЗрдВ, рдЬрдм рдореИрдВрдиреЗ рдЯрд┐рдВрдХреЙрдл.рдХреЙрдо рдкрд░ рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред


рд╕реНрдерд╛рдиреАрдпрдХрд░рдг


рд╣рдордиреЗ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП R.swift рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рдиреЗ рд╣рдореЗрдВ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрд╛рдпрд╛, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред рдЕрдм, рдпрджрд┐ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдореЗрдВ рдЖрдИрдбреА рдмрджрд▓ рдЧрдИ рд╣реИ, рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


* рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╕рднреА рд╕реНрдерд╛рдиреАрдпрдХрд░рдгреЛрдВ рдореЗрдВ рдЖрдИрдбреА рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдореЗрдВ рд░рд╣рддреА рд╣реИ, рддреЛ рд╕рдВрдХрд▓рди рдкрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрдЧреА рдХрд┐ рдпрд╣ рдЖрдИрдбреА рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдирд╣реАрдВ рд╣реИред


рдЪреЗрддрд╛рд╡рдиреА

рд╡рд╣рд╛рдБ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
 final class NewsViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() titleLabel.text = NSLocalizedString("news_title", comment: "News title") } } 

рдпрд╣ рдерд╛:
 extension String { public func localized(in bundle: Bundle = .main, value: String = "", comment: String = "") -> String { return NSLocalizedString(self, tableName: nil, bundle: bundle, value: value, comment: comment) } } final class NewsViewController: UIViewController { private enum Localized { static let newsTitle = "news_title".localized() } override func viewDidLoad() { super.viewDidLoad() titleLabel.text = Localized.newsTitle } } 

рдпрд╣ рдмрди рдЧрдпрд╛:
 titleLabel.text = R.string.localizable.newsTitle() 

рдЫрд╡рд┐рдпрд╛рдБ


рдЕрдм, рдпрджрд┐ рд╣рдордиреЗ * .xcassets рдореЗрдВ рдХреБрдЫ рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рд╛, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЗрд╡рд▓ рдЕрд╕реЗрдВрдмрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдпрд╣ рдерд╛:
 imageView.image = UIImage(named: "NotExist") //     imageView.image = UIImage(named: "NotExist")! // crash imageView.image = #imageLiteral(resourceName: "NotExist") // crash 

рдпрд╣ рдмрди рдЧрдпрд╛:
 imageView.image = R.image.tinkoffLogo() //     

рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб


рдпрд╣ рдерд╛:
 let someStoryboardName = "SomeStoryboard" // Change to something else (eg: "somestoryboard") - get nil or crash in else let someVCIdentifier = "SomeViewController" // Change to something else (eg: "someviewcontroller") - get nil or crash in else let storyboard = UIStoryboard(name: someStoryboardName, bundle: .main) let _vc = storyboard.instantiateViewController(withIdentifier: someVCIdentifier) guard let vc = _vc as? SomeViewController else { //    -  ,  Fabric  Firebase //    fatalError() ┬п\_(уГД)_/┬п} 

рдпрд╣ рдмрди рдЧрдпрд╛:
 guard let vc = R.storyboard.someStoryboard.someViewController() else { //    -  ,  Fabric  Firebase //    fatalError() ┬п\_(уГД)_/┬п } 

рдФрд░ рдЗрд╕реА рддрд░рд╣ред


рдорд╛рдиреНрдпрддрд╛ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб


рдпрджрд┐ рдЖрдк рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдпрд╛ xib рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ R.validate () рдПрдХ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рд╣рд╛рдереЛрдВ рдХреЛ рд╣рд┐рд▓рд╛рддрд╛ рд╣реИ (рдпрд╛ рдпреВрдБ рдХрд╣реЗрдВ рдХрд┐ рдПрдХ рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


  • рдЪрд┐рддреНрд░ рдХрд╛ рдирд╛рдо рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛, рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд╣реАрдВ рд╣реИ
  • рдЙрдиреНрд╣реЛрдВрдиреЗ рдлрд╝реЙрдиреНрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ (info.plist рд╕реЗ)

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


 final class AppDelegate: UIResponder { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Bool { #if DEBUG do { try R.validate() } catch { //   fatalError      //        debug        //  -   ,                 production fatalError(error.localizedDescription) } #endif return true } } 

рдФрд░ рдЕрдм рдЖрдк рджреЛ рдЦрд░реАрджрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ!


рдЪреБрдк рд░рд╣реЛ рдФрд░ рдореЗрд░реЗ рдкреИрд╕реЗ рд▓реЗ рд▓реЛ!

рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ?


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


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


рдпрджрд┐ рдЖрдк рдПрдХ рдЕрдЦрдВрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рддреГрддреАрдп-рдкрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рднрд╛рдЧреНрдп рдореЗрдВ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИ)ред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓реЗрдВ рдФрд░ рдЙрд╕ рдкрд░ рд╕рдЦреНрддреА рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд░реЗрдВред


рдпрд╣ рд╣рдорд╛рд░рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рдерд╛ред рд╣рдо рдЬреБрдбрд╝ рдЧрдПред рдЪреВрдВрдХрд┐ рд╣рдо рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ R.swift рдПрдореНрдмреЗрдб , рдПрдХ рдШрдЯрдХ-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдкреЙрдбреНрд╕ (рдЬреЛ рдШрдЯрдХ рд╣реИрдВ) рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред


рд╕реНрдерд╛рдиреАрдпрдХрд░рдг, рдЪрд┐рддреНрд░реЛрдВ рдФрд░ R.generated.swift рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдирд┐рд░рдВрддрд░ рдЕрджреНрдпрддрди рдХреЗ рдХрд╛рд░рдг, рд╕рд╛рдорд╛рдиреНрдп рд╢рд╛рдЦрд╛ рдореЗрдВ рд╡рд┐рд▓рдп рд╣реЛрдиреЗ рдкрд░ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдИ рд╕рдВрдШрд░реНрд╖ рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ R.generated.swift рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдЦрдХ рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ ред


рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ .gitignore


 # R.Swift generated files *.generated.swift 

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


 "${PODS_ROOT}/R.swift/rswift" generate "${SRCROOT}/Example" "--rswiftignore" "Example/.rswiftignore" 

.rswiftignore рдХрд╛ рд╡рд░реНрдгрди


рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдкреЙрдбреНрд╕ рд╕реЗ рдЧрд┐рдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ R.generated.swift рдлрд╛рдЗрд▓реЗрдВ рди рдЬреЛрдбрд╝реЗрдВред рд╣рдордиреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


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


    рдЬрд╛рджреВ
    рдЬрд╛рджреВ

     pre_install do |installer| installer.pod_targets.flat_map do |pod_target| if pod_target.pod_target_srcroot.include? 'LocalPods' #           LocalPods,     ,   pod_target_srcroot = pod_target.pod_target_srcroot #   pod_target_path = pod_target_srcroot.sub('${PODS_ROOT}/..', '.') #       pod_target_sources_path = pod_target_path + '/' + pod_target.name + '/Sources' #     Sources generated_file_path = pod_target_sources_path + '/R.generated.swift' #     R.generated.swift File.new(generated_file_path, 'w') #    R.generated.swift      end end end 



  • рдФрд░ рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк ... рдЕрднреА рднреА g.g рдореЗрдВ R.generated.swift рдЬреЛрдбрд╝реЗрдВ

рд╣рдо рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдмрд╕ рдЧрдП: "рдкреЛрдбрдлрд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рджреВ", рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕рдореЗрдВ рдХрдИ рдХрдорд┐рдпрд╛рдВ рдереАрдВ:


  • рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдлреЛрд▓реНрдбрд░ рд╕реЗ рдХреЛрдХреЛрдкреЛрдбреНрд╕ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)
  • рд╕рднреА рдкреЙрдбреНрд╕ рдореЗрдВ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╕реНрд░реЛрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдкреЙрдб рдХреНрд░рдо рдореЗрдВ рд╣реИрдВ)
  • рд╡рд╣ рдЕрдЬреАрдм рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЙрд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмреИрд╕рд╛рдЦреА рд╣реИ)
  • рдпрджрд┐ рдХреБрдЫ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкрдиреЗ рдорд╛рд░реНрдЧ рдореЗрдВ "LocalPods" рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╣рд╛рдБ R.generated.swift рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ рдпрд╛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛрдЧрд╛

prepare_command


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


* рд╕рдорд╛рдЪрд╛рд░ - рдлрд▓реА рдХрд╛ рдирд╛рдо, рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ рд╕реНрдерд╛рдиреАрдп рдкреЙрдб рдХреЗ рдирд╛рдо рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
* рдЯрдЪ - рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдбред рддрд░реНрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рд╣реИ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╕рд╣рд┐рдд)


рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо News.podspec рдХреЗ рд╕рд╛рде рдзреЛрдЦрд╛рдзрдбрд╝реА рдХрд░реЗрдВрдЧреЗ


рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ pod install рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд░рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╛рдЗрд▓ рдХреЛ рд╣рдо рдЪреВрд▓реНрд╣рд╛ рдореЗрдВ рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред


 Pod::Spec.new do |s| # ... generated_file_path = "News/Sources/R.generated.swift" s.prepare_command = <<-CMD touch "#{generated_file_path}" CMD # ... end 

рдЕрдЧрд▓рд╛ рдПрдХ рдФрд░ "рдХрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЭрдЧрдбрд╝рд╛" рд╣реИ - рд╣рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ R.swift рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 Pod::Spec.new do |s| # ... s.dependency 'R.swift' r_swift_script = '"${PODS_ROOT}/R.swift/rswift" generate "${PODS_TARGET_SRCROOT}/News/Sources"' s.script_phases = [ { :name => 'R.swift', :script => r_swift_script, :execution_position => :before_compile } ] end 

рд╕рдЪ рд╣реИ, рдПрдХ рд╣реИ "рд▓реЗрдХрд┐рдиред" prepare_command рд╕реНрдерд╛рдиреАрдп рдкреЙрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЧрд┐рддреБрдм рдкрд░ рдЪрд░реНрдЪрд╛ рдЪрд▓ рд░рд╣реА рд╣реИ ред


рд╡рд┐рдкрддреНрддрд┐


* рдШрд╛рддрдХ - рд╡рд┐рдХреА , рдореМрдд рдХрд╛ рд╕рдВрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдВрддрд┐рдо рд╣рд┐рдЯред


рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рд╢реЛрдз рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ - рдП рдХрд╛ рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб c prepare_command рдФрд░ pre_install ред


рдкреЛрдбрдлрд╛рдЗрд▓ рд╕реЗ рдЬрд╛рджреВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╢реЛрдзрди:


 pre_install do |installer| # map development pods installer.development_pod_targets.each do |target| # get only main spec and exclude subspecs spec = target.non_test_specs.first # get full podspec file path podspec_file_path = spec.defined_in_file # get podspec dir path pod_directory = podspec_file_path.parent # check if path contains local pods directory # exclude development but non local pods local_pods_directory_name = "LocalPods" if pod_directory.to_s.include? local_pods_directory_name # go to pod root directorty and run prepare command in sub-shell system("cd \"#{pod_directory}\"; #{spec.prepare_command}") end end end 

рдФрд░ рд╡рд╣реА рд▓рд┐рдкрд┐ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдЪреВрд▓реНрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЪрд▓рддреА рдереА


 Pod::Spec.new do |s| # ... s.dependency 'R.swift' generated_file_path = "News/Sources/R.generated.swift" s.prepare_command = <<-CMD touch "#{generated_file_path}" CMD r_swift_script = '"${PODS_ROOT}/R.swift/rswift" generate "${PODS_TARGET_SRCROOT}/News/Sources"' s.script_phases = [ { :name => 'R.swift', :script => r_swift_script, :execution_position => :before_compile } ] end 

рдЕрдВрдд рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рдЕрдВрдд рдореЗрдВ!


рдкреБрдирд╢реНрдЪ:


рдореИрдВрдиреЗ prepare_command рдмрдЬрд╛рдп рдПрдХ рдФрд░ рдХрд╕реНрдЯрдо рдХрдорд╛рдВрдб рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди pod lib lint prepare_command pod lib lint (рдкреЙрдбрд╕реЗрдХ рд╕рд╛рдордЧреНрд░реА рдФрд░ рдЪреВрд▓реНрд╣рд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб) рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░ рдкрд░ рд╢рдкрде рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред


рдЧреИрд░-рд╕реНрдерд╛рдиреАрдп рдЪреВрд▓реНрд╣рд╛


рд░рд┐рдореЛрдЯ рдкреЙрдбреНрд╕ рдореЗрдВ (рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рд╣реИрдВ) рдЖрдкрдХреЛ рдпрд╣ рд╕рдм рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдЬрд╛рджреВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ рдХреЛрдб рдЖрдзрд╛рд░ рд╕рдЦреНрддреА рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИред


рдпрд╣ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдлрд▓реА рдХрд╛рдо рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрддреНрдкрдиреНрди рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ <рдирд╛рдо> рдЖрджреЗрд╢) R.swift рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реА рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреИрдХреЗрдЬ (рдиреАрдЪреЗ) рдХреЗ рд▓рд┐рдП R.generated.swift рдЬреЛрдбрд╝реЗрдВред рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрджреНрдзреГрдд рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред


рдкреБрдирд╢реНрдЪ:


рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИ:
R.swift + Xcode 10 + рдирдпрд╛ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо + рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ рдмрд┐рд▓реНрдб! = <3
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдпрд╛ рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА
R.swift v4.0.0 рдХреЛрдХреЛрдкреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ 1.6.0 :(
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


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


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


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


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


рдФрд░ R.swift рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд▓рд╛рдн рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирд╡-рдШрдВрдЯреЗ рд╣реИ рдЬреЛ рдЯреАрдо рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЛрдВ рдкрд░ рдЦрд░реНрдЪ рдХрд░ рд╕рдХрддреА рд╣реИ: рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ, рдирдП рддрдХрдиреАрдХреА рд╕рдорд╛рдзрд╛рди, рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рдЗрддрдиреЗ рдкрд░ред R.swift рдиреЗ рдЕрдкрдиреЗ рдПрдХреАрдХрд░рдг рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд╛рдкрд╕реА рдХреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдорд╛рди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ред


R.swift


рдмреЛрдирд╕


рдЖрдк рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреАрдврд╝реА рд╕реЗ рд▓рд╛рдн рдХреЛ рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рд╕реЗ рддреБрд░рдВрдд рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб "рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП": рдЧрд┐рдЯрд╣рдм ред


рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдпрд╛ рд╕рд┐рд░реНрдл рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрди рд╣реВрдВ)


рдмрд╕ рдЗрддрдирд╛ рд╣реАред

Source: https://habr.com/ru/post/hi431148/


All Articles