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

рдпрд╣ рд╣рдорд╛рд░реА рд╕рдмрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдереА рдЬрд┐рд╕рдХрд╛ рд╣рдордиреЗ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг.рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рднреА рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗ:
рдХрд╛рд░рдг тЖТ рдкреНрд░рднрд╛рд╡
рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ?
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рдЧрд▓рдд рд▓рд┐рдЦрд╛ рд╣реИ (рдлреЛрди рдХрд░рддреЗ рд╕рдордп рд╡рд╛рдХреНрдп рд░рдЪрдирд╛, рдпрд╛ рдЧрд▓рдд рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо), рддреЛ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╕ рдЕрд╕реЗрдВрдмрд▓ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп, рд╕реНрдкрд╖реНрдЯ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред
рд▓реЗрдХрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рдХреНрдпрд╛?
рд╡реЗ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдмрд╕ рдмрдВрдбрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓рд╛ - рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдореЗрдВ рддрд╛рд░ рдХреЗ рд╕рд╛рдеред
рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ
рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ 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 рдлрд╛рдЗрд▓реЗрдВ рди рдЬреЛрдбрд╝реЗрдВред рд╣рдордиреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдФрд░ рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк ... рдЕрднреА рднреА g.g рдореЗрдВ R.generated.swift рдЬреЛрдбрд╝реЗрдВ
рд╣рдо рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдмрд╕ рдЧрдП: "рдкреЛрдбрдлрд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рджреВ", рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕рдореЗрдВ рдХрдИ рдХрдорд┐рдпрд╛рдВ рдереАрдВ:
- рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдлреЛрд▓реНрдбрд░ рд╕реЗ рдХреЛрдХреЛрдкреЛрдбреНрд╕ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)
- рд╕рднреА рдкреЙрдбреНрд╕ рдореЗрдВ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╕реНрд░реЛрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдкреЙрдб рдХреНрд░рдо рдореЗрдВ рд╣реИрдВ)
- рд╡рд╣ рдЕрдЬреАрдм рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЙрд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмреИрд╕рд╛рдЦреА рд╣реИ)
- рдпрджрд┐ рдХреБрдЫ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкрдиреЗ рдорд╛рд░реНрдЧ рдореЗрдВ "LocalPods" рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╣рд╛рдБ R.generated.swift рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ рдпрд╛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛрдЧрд╛
prepare_command
рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рджреБрдЦ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд░рд╣рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдХрд╛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдкрд╛рдпрд╛ред
рдкреЙрдбрд╕реЗрдХ рдореЗрдВ рддреИрдпрд╛рд░_рдХрдорд╛рдВрдб рд╣реИ , рдЬреЛ рд╕рд┐рд░реНрдл рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
* рд╕рдорд╛рдЪрд╛рд░ - рдлрд▓реА рдХрд╛ рдирд╛рдо, рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ рд╕реНрдерд╛рдиреАрдп рдкреЙрдб рдХреЗ рдирд╛рдо рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
* рдЯрдЪ - рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдбред рддрд░реНрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рд╣реИ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╕рд╣рд┐рдд)
рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо News.podspec рдХреЗ рд╕рд╛рде рдзреЛрдЦрд╛рдзрдбрд╝реА рдХрд░реЗрдВрдЧреЗ
рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ pod install
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд░рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╛рдЗрд▓ рдХреЛ рд╣рдо рдЪреВрд▓реНрд╣рд╛ рдореЗрдВ рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
Pod::Spec.new do |s|
рдЕрдЧрд▓рд╛ рдПрдХ рдФрд░ "рдХрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЭрдЧрдбрд╝рд╛" рд╣реИ - рд╣рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ R.swift рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Pod::Spec.new do |s|
рд╕рдЪ рд╣реИ, рдПрдХ рд╣реИ "рд▓реЗрдХрд┐рдиред" prepare_command
рд╕реНрдерд╛рдиреАрдп рдкреЙрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЧрд┐рддреБрдм рдкрд░ рдЪрд░реНрдЪрд╛ рдЪрд▓ рд░рд╣реА рд╣реИ ред
рд╡рд┐рдкрддреНрддрд┐
* рдШрд╛рддрдХ - рд╡рд┐рдХреА , рдореМрдд рдХрд╛ рд╕рдВрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдВрддрд┐рдо рд╣рд┐рдЯред
рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рд╢реЛрдз рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ - рдП рдХрд╛ рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб c prepare_command
рдФрд░ pre_install
ред
рдкреЛрдбрдлрд╛рдЗрд▓ рд╕реЗ рдЬрд╛рджреВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╢реЛрдзрди:
pre_install do |installer|
рдФрд░ рд╡рд╣реА рд▓рд┐рдкрд┐ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдЪреВрд▓реНрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЪрд▓рддреА рдереА
Pod::Spec.new do |s|
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ!
рдкреБрдирд╢реНрдЪ:
рдореИрдВрдиреЗ 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
рдмреЛрдирд╕
рдЖрдк рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреАрдврд╝реА рд╕реЗ рд▓рд╛рдн рдХреЛ рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рд╕реЗ рддреБрд░рдВрдд рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб "рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП": рдЧрд┐рдЯрд╣рдм ред
рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдпрд╛ рд╕рд┐рд░реНрдл рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрди рд╣реВрдВ)
рдмрд╕ рдЗрддрдирд╛ рд╣реАред