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

SwiftGen рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ:
- рдлреЛрдВрдЯ;
- рд░рдВрдЧ;
- рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб;
- рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рддрд╛рд░;
- рдПрд╕реЗрдЯред
рд╣рд░ рдХреЛрдИ рдЫрд╡рд┐рдпреЛрдВ рдпрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рддрд╛рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
logoImageView.image = UIImage(named: "Swift") nameLabel.text = String( format: NSLocalizedString("languages.swift.name", comment: ""), locale: Locale.current )
рдЫрд╡рд┐ рдпрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреБрдВрдЬреА рдХрд╛ рдирд╛рдо рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рдмреАрдЪ рдЬреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рд╕рдВрдХрд▓рдХ рдпрд╛ рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг (Xcode) рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- рдЖрдк рдПрдХ рдЯрд╛рдЗрдкреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ;
- рдХреБрдВрдЬреА / рдЫрд╡рд┐ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рд╕реНрд╡рд┐рдлреНрдЯрдЧреИрди рдХреЗ рд╕рд╛рде рдЗрд╕ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реА рдЯреАрдо рдХреЗ рд▓рд┐рдП, рдкреАрдврд╝реА рдХреЗрд╡рд▓ рддрд╛рд░ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдереА, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реГрдЬрди рд╕рдорд╛рди рд╣реИ рдФрд░, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ SwiftGen рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдордиреЗ рдЗрд╕реЗ рдХреЛрдХреЛрдЖрдкреЙрдбреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪреБрдирд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╡рд╣ рд╣реИ pod 'SwiftGen'
рдореЗрдВ pod 'SwiftGen'
, рдФрд░ рдлрд┐рд░ рдПрдХ рдирдпрд╛ рдмрд┐рд▓реНрдб рдЪрд░рдг ( Build Phase
) рдЬреЛрдбрд╝рдирд╛ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд╡рд┐рдлреНрдЯрдЬреЗрди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред
"$PODS_ROOT"/SwiftGen/bin/swiftgen
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП Compile Sources
рдЪрд░рдг рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд╡рд┐рдлреНрдЯрдЧреИрди рдХреЛ рдЪрд▓рд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЕрдм рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯрдЧреЗрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
SwiftGen рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рд╡реЗ рд╕рднреА рдЧрд┐рддреБрдм рдкрд░ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЛ рд╕реНрдЯреИрдВрд╕рд┐рд▓ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдиреЗ рд╕рд░рд╕рд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдХрд┐рдЯреБрд░рд╛ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧрд╛рдЗрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рддрд╛рд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП enum
рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд▓реЗрдВред рдпрд╣ рд╣рдореЗрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдорд╛рдирдХ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдлрд╛рд▓рддреВ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рдХреЗ рддрд╣рдд рд╣реИред
рдЦрд╛рдХрд╛ рдЙрджрд╛рд╣рд░рдг {# #} {% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} {# #} {% macro parametersBlock types %}{% filter removeNewlines:"leading" %} {% for type in types %} _ p{{forloop.counter}}: {{type}}{% if not forloop.last %}, {% endif %} {% endfor %} {% endfilter %}{% endmacro %} {% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} {% for type in types %} p{{forloop.counter}}{% if not forloop.last %}, {% endif %} {% endfor %} {% endfilter %}{% endmacro %} {# enum #} {% macro recursiveBlock table item sp %} {{sp}}{% for string in item.strings %} {{sp}}{% if not param.noComments %} {{sp}}/// {{string.translation}} {{sp}}{% endif %} {{sp}}{% if string.types %} {{sp}}{{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { {{sp}} return localize("{{string.key}}", {% call argumentsBlock string.types %}) {{sp}}} {{sp}}{% else %} {{sp}}{{accessModifier}} static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = localize("{{string.key}}") {{sp}}{% endif %} {{sp}}{% endfor %} {{sp}}{% for child in item.children %} {{sp}}{{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { {{sp}}{% set sp2 %}{{sp}} {% endset %} {{sp}}{% call recursiveBlock table child sp2 %} {{sp}}} {{sp}}{% endfor %} {% endmacro %} import Foundation {# enum #} {% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} {{accessModifier}} enum {{enumName}} { {% if tables.count > 1 %} {% for table in tables %} {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { {% call recursiveBlock table.name table.levels " " %} } {% endfor %} {% else %} {% call recursiveBlock tables.first.name tables.first.levels " " %} {% endif %} } {# enum Localization #} extension Localization { fileprivate static func localize(_ key: String, _ args: CVarArg...) -> String { return String( format: NSLocalizedString(key, comment: ""), locale: Locale.current, arguments: args ) } }
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SwiftGen/Templates
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЙрдкрдпреЛрдЧрд┐рддрд╛ swiftgen.yml
рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ swiftgen.yml
, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ, рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ Swiftgen
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ рдмрдирд╛рдПрдБ, рдФрд░ рдмрд╛рдж рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд░реЗрдВред
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
xcassets: - paths: ../SwiftGenExample/Assets.xcassets templatePath: Templates/ImageAssets.stencil output: ../SwiftGenExample/Image.swift params: enumName: Image publicAccess: 1 noAllValues: 1 strings: - paths: ../SwiftGenExample/en.lproj/Localizable.strings templatePath: Templates/LocalizableStrings.stencil output: ../SwiftGenExample/Localization.swift params: enumName: Localization publicAccess: 1 noComments: 0
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯреЛрдВ рдХреЗ рдкрде рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрд╡рд┐рдлреНрдЯрдЬреЗрди рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрджрд▓реЗрдВ:
"$PODS_ROOT"/SwiftGen/bin/swiftgen config run --config SwiftGen/swiftgen.yml
рдЕрдм рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рдж, рджреЛ рдлрд╛рдЗрд▓реЗрдВ Localization.swift
рдФрд░ Image.swift
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ Image.swift
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд░рд╛рд╕реНрддреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ Image.swift
рдЪрд╛рд╣рд┐рдПред рдЙрдиреНрд╣реЗрдВ Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
рддрд╛рд░ рдХреЗ рд▓рд┐рдП: public enum Localization { public enum Languages { public enum ObjectiveC {
рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП: public enum Image { public enum Logos { public static var objectiveC: UIImage { return image(named: "ObjectiveC") } public static var swift: UIImage { return image(named: "Swift") } } private static func image(named name: String) -> UIImage { let bundle = Bundle(for: BundleToken.self) guard let image = UIImage(named: name, in: bundle, compatibleWith: nil) else { fatalError("Unable to load image named \(name).") } return image } } private final class BundleToken {}
рдЕрдм рдЖрдк рдкреНрд░рдкрддреНрд░ UIImage(named: "")
рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ UIImage(named: "")
рдЙрддреНрдкрдиреНрди рдХрд┐рдП рд╣реИрдВред рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдпрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╣реЛрдЧреАред рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗрд╡рд▓ рддрдм рддрдХ рдЗрдХрдЯреНрдард╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдЬрдм рддрдХ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдареАрдХ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАрдВред
рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
let logos = Image.Logos.self let localization = Localization.self private func setupWithLanguage(_ language: ProgrammingLanguage) { switch language { case .Swift: logoImageView.image = logos.swift nameLabel.text = localization.Languages.Swift.name descriptionLabel.text = localization.Languages.Swift.description wikiUrl = localization.Languages.Swift.link.toURL() case .ObjectiveC: logoImageView.image = logos.objectiveC nameLabel.text = localization.Languages.ObjectiveC.name descriptionLabel.text = localization.Languages.ObjectiveC.description wikiUrl = localization.Languages.ObjectiveC.link.toURL() } }
Xcode рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛
рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЧрд▓рддреА рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдХрд▓рди рдХреЗ рд╕рд╛рде рдЦрд░реЛрдВрдЪ рд╕реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк SwiftGen
рд╕реНрдХреНрд░рд┐рдкреНрдЯ SwiftGen
рдмрд╛рдж рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ chmod
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд╕реНрд╡рд┐рдлреНрдЯрдЧреИрди рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ Build Phase
рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
PODSROOT="$1" OUTPUT_FILES=() COUNTER=0 while [ $COUNTER -lt ${SCRIPT_OUTPUT_FILE_COUNT} ]; do tmp="SCRIPT_OUTPUT_FILE_$COUNTER" OUTPUT_FILES+=(${!tmp}) COUNTER=$[$COUNTER+1] done for file in "${OUTPUT_FILES[@]}" do if [ -f $file ] then chmod a=rw "$file" fi done $PODSROOT/SwiftGen/bin/swiftgen config run --config SwiftGen/swiftgen.yml for file in "${OUTPUT_FILES[@]}" do chmod a=r "$file" done
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдкреАрдврд╝реА рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрджрд┐ рдлрд╛рдЗрд▓реЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрдкрд╛рджрди рдореЗрдВ рдЖрд╕рд╛рдиреА рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ runswiftgen.sh
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ runswiftgen.sh
рд╣реИред рдорд╛рдореВрд▓реА рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЕрдм рд╣рдорд╛рд░рд╛ Build Phase
рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛: рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкреЙрдбреНрд╕ рдлреЛрд▓реНрдбрд░ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:
"$SRCROOT"/SwiftGen/runswiftgen.sh "$PODS_ROOT"
рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдм рдЬрдм рдЖрдк рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:

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

рдФрд░ рдЪреВрдВрдХрд┐ Localization.swift
рдФрд░ Image.swift
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк Image.swift
рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ Image.swift
рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ git merge
рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрдШрд░реНрд╖реЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рди рдХрд░рдирд╛ рдкрдбрд╝реЗред
рдореИрдВ рд╕реНрд╡рд┐рдлреНрдЯрдЬреЗрди рдЪрд░рдг рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рднреА рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХреНрд╕рдХреЛрдб рдиреНрдпреВ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ (рдпрд╣ рдПрдХреНрд╕рдХреЛрдб 10 рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рд╣реИ)ред рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ, рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдХреЙрдиреНрдлрд╝рд┐рдЧ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ, .strings рдФрд░ .xcassets рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реА рд╣реИ:
$(SRCROOT)/SwiftGen/runswiftgen.sh $(SRCROOT)/SwiftGen/swiftgen.yml $(SRCROOT)/SwiftGen/Templates/ImageAssets.stencil $(SRCROOT)/SwiftGen/Templates/LocalizableStrings.stencil $(SRCROOT)/SwiftGenExample/en.lproj/Localizable.strings $(SRCROOT)/SwiftGenExample/Assets.xcassets
рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣рдо рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ SwiftGen рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
$(SRCROOT)/SwiftGenExample/Image.swift $(SRCROOT)/SwiftGenExample/Localization.swift
рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рдпрд╣ рддрдп рдХрд░ рд╕рдХреЗ рдХрд┐ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдореМрдЬреВрджрдЧреА рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкрд░рд┐рдгрд╛рдо
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░реА рд▓рд╛рдкрд░рд╡рд╛рд╣реА рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯрдЧреИрди рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдХрд░рдг рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдХрд░рдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХрд╛ рдХрд╛рдо рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛред
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рдиред
- рдЯрд╛рдЗрдкреЛрд╕ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдСрдЯреЛ-рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
- рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред
рд╡рд┐рдкрдХреНрд╖:
- Localizable.stringsdict рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВред
- рдЬрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЬреАрдердм рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ