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

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдпрд╣ рд░реВрдмреА рд╣реИ рдпрд╛ рдирд╣реАрдВ?
RubyMotion iOS рдХреЗ рд▓рд┐рдП
рд░реВрдмреА рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ
рдЯреВрд▓рдХрд┐рдЯ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ
рд░рдирдЯрд╛рдЗрдо рд╣реЛрддрд╛ рд╣реИ рдЬреЛ iOS рдХреЗ рдЕрдВрджрд░ рд░реВрдмреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реВрдмреА рдХреЛрдб рдХрд╛ рджрд╛рдпрд░рд╛
CRuby рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд░реВрдмреА 1.9 рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рд░реВрдмреА рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдирджрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред RubyMotion рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдФрд░ рдлрд╛рдЙрдВрдбреЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдкреАрдЖрдИ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рд░реВрдмреАрдореЛрд╢рди "рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА" рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдХрд╛рдо
RubyMotion рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Xcode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реВрдмреАрдореЛрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ
рдХрдВрд╕реЛрд▓ рдЯреВрд▓ (
motion
) рдЖрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдореЗрдВ рд░реЗрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдЖрдИрдУрдПрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЪрд┐рддреНрд░ рдпрд╛ pfile, рдФрд░ .xib, .storyboard рдФрд░ .xcdatamodeld рдлрд╝рд╛рдЗрд▓реЗрдВ рднреА рдХрдиреЗрдХреНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдХрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?
рдпрджрд┐ рдЖрдк рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ
рдПрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдЦрд░реАрджрдирд╛ рд╣реЛрдЧрд╛ (
рдлрд┐рд▓рд╣рд╛рд▓ рдЗрд╕рдХреА рдХреАрдордд $ 199 рд╣реИ, рд╕рд╛рдЗрдЯ рдЧрд▓рдд рджрд░ рдкрд░ рд░реВрдмрд▓ рдореЗрдВ рд░рд╛рд╢рд┐ рднреА рджрд┐рдЦрд╛рддреА рд╣реИ ), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд░реВрдмреАрдореЛрд╢рди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░
рдЧреЗрдЯрд┐рдВрдЧ рд╕реНрдЯрд╛рд░реНрдЯреЗрдб рдЧрд╛рдЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдореЛрд╢рди рдХрд╛рд╕реНрдЯреНрд╕ рд╕реЗ рдПрдХ
рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд╕реНрдХреНрд░реЗрдВрдХрд╛рд╕реНрдЯ рднреА рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред рдФрд░ рдкреНрд░реИрдЧреНрдореЗрдЯрд┐рдХ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗ
50 рдорд┐рдирдЯ рдХрд╛ рдПрдХ
рдкреЗрдВрдЪрдХрд╕ рднреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдпрд╣
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИред
рд╕рд░рд▓ рдЖрд╡реЗрджрди
рд╣рдордиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рд░реВрдмреАрдореЛрд╢рди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдЖрд╡реЗрджрди рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдХреЛрдИ рддреИрдпрд╛рд░-рддреИрдпрд╛рд░ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╢рд┐рд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВред рд╕реВрддреНрд░
рдЬреБрдбрд╝реЗ рд╣реИрдВ ред
рд╣рдорд╛рд░рд╛ рдРрдк
рдЖрдЗрдП рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдПрдХ рд╕рдореНрдореЗрд▓рди рдмреБрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВ
MagmaRails 2012 рд╢реЗрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░реВрдВрдЧрд╛ ред рдкреНрд░рджрд░реНрд╢рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреА рдорд╛рддреНрд░рд╛ рд╡рдХреНрддрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рднрд╛рд╖рдгреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рджрд┐рди-рдм-рджрд┐рди рдЯреВрдЯ рдЬрд╛рддреА рд╣реИред
рд╣рдорд╛рд░рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рд░реВрдмреАрдореЛрд╢рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдкрд░ рд╕рднреА рд╕рдВрд╕рд╛рдзрди рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рдХреБрдЫ рдбреАрдПрд╕рдПрд▓ рднреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо Xcode рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдбреНрд╕ Xcode рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдмрд╕ рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓ рд╣реИред
рд╣рдо рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдкрд╣рд▓рд╛ рдХрджрдо рдЬреЛ рд╣рдо рдЙрдард╛рдПрдВрдЧреЗ, рдПрдХ рдирдпрд╛ Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ - рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдорд╛рд╕реНрдЯрд░-рдбрд┐рдЯреЗрд▓ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Xcode 4.5.x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрдВ рдФрд░ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ iPhone рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ рдЪреЗрдХрдмреЙрдХреНрд╕ "рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдФрд░ "рдХреЛрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рд╕реЗрдЯ рд╣реИрдВред

рдЕрдм рд░реВрдмреАрдореЛрд╢рди рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ "рдХреЙрдиреНрдлреНрд░реЗрдВрд╕" рдХрд╣рддреЗ рд╣реИрдВ:
$ motion create conference
рд╣рдорд╛рд░реЗ RubyMotion рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдлрд╝реЛрд▓реНрдбрд░ рд╣реИред рдЖрдкрдХреЛ
MainStoryboard.storyboard
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ Xcode рд╕реЗ рд▓рд┐рдВрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

рдЪреВрдБрдХрд┐ рд╣рдо рдЕрднреА рднреА рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ Xcode рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдбреИрдбреА рд╕реЗ Xcode рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╕реЗ рдкреВрдЫрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдо рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐
Copy items into destination group's folder (if needed)
рдЪреЗрдХ рдмреЙрдХреНрд╕
Copy items into destination group's folder (if needed)
, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рдорд╛рдкреНрдд рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдорд▓рд┐рдВрдХ рдмрдирд╛рдпрд╛ рд╣реИ, рдФрд░ Xcode рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред

рдЕрдм рдмрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░реЗрдВ:
$ bundle init
рдЬреЗрдорд╛рдЗрд▓ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
source :rubygems gem 'xcodeproj', '~> 0.3.0' gem 'ib' gem 'rake'
рдмреБрдВрдбрд▓рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:
$ bundle
Xcodeproj рдФрд░
ib рд░рддреНрди рд░реВрдмреА рдЖрдЙрдЯрд▓реЗрдЯреНрд╕ рдХреЛ XCode Storeboards рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдмрд╛рдж рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
рдЕрдм рд╣рдо Rakefile рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрд╕ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рд▓рд╛рдЗрди рдХреА
require "motion/project"
рдмрд╛рдж
require "motion/project"
рд▓рд┐рдП рдмреБрдВрдбрд▓рд░ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреЛрдбрд╝реЗрдЧрд╛:
require 'rubygems' require 'ib' require 'bundler' Bundler.require
app_delegate.rb
рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЦреЛрд▓реЗрдВред рдЗрд╕рдХреЗ рдЕрдВрджрд░,
application
рд╡рд┐рдзрд┐ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИред рдЕрдм рд╣рдо RubyMotion рдХреЛ
MainStoryboard.storyboard
рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗ:
def application(application, didFinishLaunchingWithOptions:launchOptions) @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds) @storyboard ||= UIStoryboard.storyboardWithName('MainStoryboard', bundle:NSBundle.mainBundle) @window.rootViewController = @storyboard.instantiateInitialViewController @window.rootViewController.wantsFullScreenLayout = true @window.makeKeyAndVisible true end
рд╣рдо рд╕реНрдХреНрд░реАрди рдлреНрд░реЗрдо рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рд╣рдорд╛рд░реЗ
rootViewController
рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░реАрди рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред
рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рджреМрдбрд╝реЗрдВ:
$ rake
рдпрд╣ рдХрдорд╛рдВрдб рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛, рдЗрд╕реЗ рдПрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЦрд╛рд▓реА рдЧреНрд░рд┐рдб рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ
quit
, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░реЗрдВред

рдПрдХ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдмрдирд╛рдПрдВ
Xcode рдкрд░ рд▓реМрдЯрдХрд░,
MainStoryboard.storyboard
рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред

Master View Controller
рдЪреБрдиреЗрдВ рдФрд░ рдЗрд╕реЗ
MagmaRails
рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖рдХ рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЕрдм
Table View
рдЪрдпрди рдХрд░реЗрдВ рдФрд░
Dynamic
рд╕реЗ
Static
рддрдХ
Content
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓реЗрдВред рдкреНрд▓реЗрдЯ рдореЗрдВ рдЕрдм рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рддреАрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЪрдпрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреА рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдмрджрд▓реЗрдВ - рдбрдмрд▓ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ - "рдбреЗ рд╡рди", "рдбреЗ рдЯреВ", "рдбреЗ рдереНрд░реА", "рд╕реНрдкреАрдХрд░реНрд╕" рдФрд░ "рд╡реЗрдиреНрдпреВ"ред рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдбрд┐рдЯреЗрд▓ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рд╣рдореЗрдВ рджрд┐рди рдореЗрдВ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдЗрдП рдЗрд╕реЗ рдХреИрдирд╡рд╛рд╕ рдкрд░ рд╕реАрдзреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЦреАрдВрдЪреЗрдВред рдЯреЗрдмрд▓ рд╡реНрдпреВ рдХреЛ рдЗрд╕ рдирдП рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдФрд░ рдЯреЗрдмрд▓-рд╡реНрдпреВ рд╕реЗрд▓ рдХреЛ рдЯреЗрдмрд▓ рд╡реНрдпреВ рдореЗрдВ рдбреНрд░реИрдЧ рдХрд░реЗрдВред
рдкрд╣рдЪрд╛рди рдирд┐рд░реАрдХреНрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ
TalksViewController
рдирд╛рдо
TalksViewController
ред рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реАрдХреНрд╖рдХ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдирдП рд╕реЗрд▓ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЯреЙрдХ рдореЗрдВ рдмрджрд▓реЗрдВ, рдФрд░ рдкрд╣рдЪрд╛рди рдирд┐рд░реАрдХреНрд╖рдХ рд╕реЗ рд╕реЗрд▓ рдХреНрд▓рд╛рд╕ рдХреЛ TalkViewCell рдореЗрдВ рдмрджрд▓реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕реЗрд▓ рдХреА рд╢реИрд▓реА рдХрд╕реНрдЯрдо рд╣реИ рдФрд░ рдЗрд╕рдХреА рдКрдВрдЪрд╛рдИ рдХреЛ 115 рдореЗрдВ рдмрджрд▓ рджреЗрдВред
рд╕реЗрд▓ рдореЗрдВ 3 рд▓реЗрдмрд▓ рдФрд░ рдПрдХ рддрд╕реНрд╡реАрд░ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЯреНрд░рд╛рдВрдЬрд╝реЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рдбреЗ рд╡рди рд╕реЗрд▓ рд╕реЗ
ctrl
рдХреЛ рдорд╛рд╕реНрдЯрд░ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рдЦреАрдВрдЪреЗрдВред рдЖрдкрдХреЛ рд╕рдВрдХреНрд░рдордг рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ
push
рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ
DayOne
ред рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рджрд┐рди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рдХрд░реЗрдВред

рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмреАрдЬ
рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо
рдХреЛрд░ рдбреЗрдЯрд╛ рдореЙрдбрд▓, рд╕рд╛рде рд╣реА рд╕рд╛рде рдмреБрдирд┐рдпрд╛рджреА рд╕реВрдЪрдирд╛ рдмреАрдЬ рдмрдирд╛рддреЗ рд╣реИрдВред
рдЬрдм рд╣рдордиреЗ Xcode рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛, рддреЛ Use Core Data рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ
.xcdatamodeld
рдлрд╝рд╛рдЗрд▓ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЧрдИ рдереАред рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ Xcode рдореЗрдВ рдвреВрдВрдвреЗрдВ рдФрд░ рдЙрд╕ рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдлрд╝рд╛рдЗрдВрдбрд░ рдореЗрдВ рд╢реЛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкрд░ рдЬрд╛рдПрдВ, рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрд╕рд╛рдзрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ рдФрд░ рдПрдХреНрд╕рдХреЛрдб рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдлрд┐рд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдЦреАрдВрдЪреЗрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗред
Xcode рдореЗрдВ, Core Data рдореЙрдбрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рджреЛ рдирдИ рдЗрдХрд╛рдЗрдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ, рдЯреЙрдХ рдФрд░ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ред рдЯреЙрдХ рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдирд┐рд░реАрдХреНрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рдХреНрд▓рд╛рд╕ рдХреЛ рдЯреЙрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рджреЛрд╣рд░рд╛рдПрдВред


рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВред рдЕрдм рд╣рдо RubyMotion рдХреЗ рдЕрдВрджрд░ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рджреЛ рд░рддреНрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ -
рдореЛрд╢рди-рдХреЛрдХреЛрдкреЛрдбреНрд╕ - рд╣рдореЗрдВ
рдХреЛрдХреЛрдкреАрдбреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХред рд╣рд╛рдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рд╣рдо рд░реВрдмреА рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рд╣рдо рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ
MagicalRecord рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рджреВрд╕рд░реЗ рд░рддреНрди рдХреЛ
рдореЛрд╢рди_рдмрд┐рд▓реНрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рд░реВрдмреА (рдПрдХреНрд╢рди рдФрд░ рдХреБрдЫ рдХрд░реНрдиреЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди) рдкрд░ рд░реВрдмреА рдореЗрдВ рдПрдХреНрд╢рдирд╕реБрдкреЛрд░реНрдЯ рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рд╣реИрдВред рдЗрди рд░рддреНрдиреЛрдВ рдХреЛ рд░рддреНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рдмрдВрдбрд▓рд░ рдЪрд▓рд╛рдПрдВред
gem 'motion-cocoapods' gem 'motion_support'
рджреЛрдиреЛрдВ рд░рддреНрдиреЛрдВ рдХреЛ рд╕реБрд▓рдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рд░реИрдлрд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рд░реВрдмреАрдореЗрдЧ рдХреЗ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рдареАрдХ рдиреАрдЪреЗ рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВред
require 'motion-cocoapods' require 'motion_support/all'
рд╣рдореЗрдВ рд░реВрдмреАрдореЛрд╢рди рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЛрд░ рдбреЗрдЯрд╛ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдХреЛрдЖрдкреЛрдбреНрд╕ рд╕реЗ рдореИрдЬрд┐рдХрд▓рд┐рдХрд▓рдХреЙрд░реНрдб рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо RubyMotion рдХреЛ рдмрд╛рдХреА рд╕реЗ рдкрд╣рд▓реЗ
app/lib
рдкрд░рд┐рд╡рд╛рдж рдореЗрдВ рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдЪрд▓рд┐рдП app.files рдХреЛ рдЯреНрд╡реАрдХ рдХрд░реЗрдВред
рдмреНрд▓реЙрдХ рдореЛрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ :: рдкреНрд░реЛрдЬреЗрдХреНрдЯ :: App.setup:
app.frameworks += %w(CoreData) app.files.unshift Dir.glob(File.join(app.project_dir, 'app/lib/**/*.rb')) app.pods do pod 'MagicalRecord' end
рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЧрддрд┐-рдХреЛрдХреЛрдкреЛрдбреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
$ pod setup $ rake UPDATE=1
рдпреЗ рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреЛрдХреЛрдкреЙрдбреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреА рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд░рд╛рдХрдлрд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред
рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рдж, рдЖрдк рдХреЛрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдХреЛрд░ рдбреЗрдЯрд╛ рдбрд┐рдЧреНрд░рд╛рдо рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╣рдо рдРрдк рдХреЗ рдЕрдВрджрд░ рдореЙрдбрд▓ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ
Talk.rb
рдФрд░
Presenter.rb
рдлрд╛рдЗрд▓
Talk.rb
:
class Talk < NSManagedObject end class Presenter < NSManagedObject end
рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЛ рдХреЛрд░ рдбреЗрдЯрд╛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдореЙрдбрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдФрд░ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЧреБрдг рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЛрд░ рдбреЗрдЯрд╛ рдЪрд╛рд░реНрдЯ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди рдпреЗ рддрд░реАрдХреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред
рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЛ рд╣реИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдлрд╛рдЗрдЯрд░реНрд╕ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ
MagicalRecord
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
app_delegate.rb
рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░
app_delegate.rb
рд╣рдореЗрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реАрдб рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкреНрд▓рд┐рд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣реИрд╢ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
def seedDatabase MagicalRecord.setupCoreDataStackWithStoreNamed('database.sqlite') if Talk.allTalks.size == 0
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ MasterViewController рдФрд░ TalksViewController рдХреЛ рддреАрди рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛, рдкреНрд░рддреНрдпреЗрдХ рд╕рдореНрдореЗрд▓рди рдХреЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдПрдХред
рдЪреВрдВрдХрд┐ рд╕рднреА 3 рд╕рдВрдХреНрд░рдордг рдПрдХ рд╣реА рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ TalksViewController рд╕рдордЭреЗ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рджрд┐рди рд╣реИред
app/controllers
рдЕрдВрджрд░
masterviewcontroller.rb
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕рдореЗрдВ
prepareForSegue
рдкрджреНрдзрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
class MasterViewController < UITableViewController def prepareForSegue(segue, sender: sender) case segue.identifier when 'DayOne', 'DayTwo', 'DayThree' segue.destinationViewController.setFilter segue.identifier end end end
destinationViewController
TalksViewController
рдирд┐рдпрдВрддреНрд░рдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдЯрд╛рд░рдЧреЗрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
TalksViewController
, рдФрд░ рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдорд╛рдкрджрдВрдб рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдкреНрд░рджрд░реНрд╢рдиреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ рдЪрд▓рд┐рдП рдЕрдкрдирд╛
TalksViewController
рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ TableUIView рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рджреЛ рдФрд░ рддрд░реАрдХреЗ рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗ:
class TalksViewController < UIViewController attr_accessor :filter attr_accessor :dataSource def tableView(tv, numberOfRowsInSection:section) self.dataSource.count end def tableView(tv, cellForRowAtIndexPath:indexPath) @reuseIdentifier ||= 'TalkCell' cell = tv.dequeueReusableCellWithIdentifier(@reuseIdentifier) || begin TalkCell.alloc.initWithStyle(UITableViewCellStyleDefault, reuseIdentifier:@reuseIdentifier) end talk = self.dataSource[indexPath.row]
prepareSegue
,
prepareSegue
рд▓рд┐рдП
prepareSegue
рдЧрдП рдлрд╝рд┐рд▓реНрдЯрд░ рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ
dataSource
рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ
dataSource
рд╣реИрдВред
tableView(tv, numberOfRowsInSection:section)
рд╡рд┐рдзрд┐ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣рдо рдХрд┐рддрдиреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА
datasource
рд╕реЗ рдорд┐рд▓рддреА рд╣реИред
tableView(tv, cellForRowAtIndexPath:indexPath)
рдХреБрдЫ рдЕрдзрд┐рдХ рднреНрд░рд╛рдордХ рд╣реИ, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╣рд░ рдмрд╛рд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рд╕реЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджрд░реНрдЬрдиреЛрдВ рдпрд╛ рд╕реИрдХрдбрд╝реЛрдВ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдмрд░реНрдмрд╛рдж рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдврд╛рдВрдЪрд╛ рдкрд╣рд▓реЗ рд╕реЗ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдПрдХ рдкреВрд▓ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рд╕реЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдкреБрд░рд╛рдиреЗ рдХреЛ рдкреВрд▓ рд╕реЗ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реНрдореГрддрд┐ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣рдореЗрд╢рд╛ рдЫреЛрдЯреА рд╣реЛрддреА рд╣реИред рдпрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдирдпрд╛ рдмрдирд╛рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рд╕реЗрд▓ рдмрдирд╛рдпрд╛, рдФрд░ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреЙрдХрд╕реЗрд▓ рдХреЛ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд▓реЗрдмрд▓ рдФрд░ рдЪрд┐рддреНрд░ рд╣реИрдВред рддреЛ рдЪрд▓рд┐рдП рдПрдХ рдирдпрд╛
TalkViewCell
class рдмрдирд╛рддреЗ рд╣реИрдВ рдЕрдВрджрд░
/app/cells/talkviewcell.rb
:
class TalkViewCell < UITableViewCell end
рдЕрдЧрд▓рд╛ рдХрджрдо рдЖрдИрдмреА рдЖрдЙрдЯрд▓реЗрдЯреНрд╕ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕реНрдЯреЛрд░рдмреЛрд░реНрдб рдХреЗ рд▓реЗрдмрд▓ рдФрд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдФрд░ ib рд░рддреНрди рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛:
class TalkViewCell < UITableViewCell extend IB outlet :talk, UILabel outlet :speaker, UILabel outlet :day, UILabel outlet :picture, UIImageView end
рдЬреИрд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдЖрдЙрдЯрд▓реЗрдЯ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдкрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Xcode рдЦреБрд▓рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ (ib рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ):
$ rake ib:open
рдпрд╣ рдПрдХ рдирдХрд▓реА ib Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рд╡рд╣реАрдВ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдЯреЛрд░рдХреЛрдб рдХреЛ Xcode рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ TalkViewCell рдЪреБрдиреЗрдВ, рдлрд┐рд░ рдХрдиреЗрдХреНрд╢рди рдирд┐рд░реАрдХреНрд╖рдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдЖрдЙрдЯрд▓реЗрдЯреНрд╕ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдереАред
рд╡реГрддреНрдд рдХреЛ рдЙрд╕рдХреЗ рдирд╛рдо рдХреЗ рджрд╛рдИрдВ рдУрд░ рдЦреАрдВрдЪрдХрд░ рдХреИрдирд╡рд╛рд╕ рдкрд░ рд░рдЦреЗрдВ рдФрд░ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХреЛ рд╕рд╣реЗрдЬреЗрдВред

TalkViewCell рдХреНрд▓рд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
def setupTalk(talk) self.talk.text = talk.title self.speaker.text = talk.presenter.name self.picture.image = UIImage.imageNamed(talk.presenter.picture) self.day.text = "Day #{talk.day}, #{talk.time}" end
рдЕрдм TalksViewController рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, рдФрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рд╡рд┐рдзрд┐ рдХреЗ рдиреАрдЪреЗ
tableView(tv, cellForRowAtIndexPath:indexPath)
"# We will come back to this a bit later"
tableView(tv, cellForRowAtIndexPath:indexPath)
:
cell.setupTalk(talk) cell
рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдЪрд▓рд╛рдПрдВ:
rake
рдпрд╣ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рддрд░рд╣ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрдм рдЖрдк Day Two рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рджрд┐рди рдХреЗ рд╕рднреА рдкреНрд░рджрд░реНрд╢рдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА:

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рдЖрдк рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк iPhone рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
- RublerMotion рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдмреБрдВрдбрд▓рд░ рдФрд░ рд░рддреНрди
- рдХреЛрдХреЛрдкреЛрдбреНрд╕ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдорд┐рд╢реНрд░рдг
- Xcode рдХреЛрд░ рдбреЗрдЯрд╛ рдЖрд░реЗрдЦ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рд╛рдЗрдХреНрд▓рд╛рдЗрдЯ
- рд░реВрдмреА рдХреЛрдб рдХреЗ рд╕рд╛рде Xcode рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рдЬрд╛рдЗрдирд░
рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд
рд╣реИ ред
RubyMotion iOS рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдордЬрд╝реЗрджрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ
рдпрджрд┐ рдЖрдк рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рдЕрд╢реБрджреНрдзрд┐ рдпрд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреАрдПрдо рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ рддреЛ рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред
рд░реВрдмреАрдореЛрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рд╕реЗ рдмрд╛рдд рдХреА рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реИрдВред рд╣рд╛рдБ, рдпрд╣ рдорд╣рдВрдЧрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирдо рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд╣рд░ рд░реЛрдЬ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд░реВрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рдЧрддрд┐ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЖрдорддреМрд░ рдкрд░ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреА рд╣реИрдВред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдЦрд░реАрджрд╛ рдФрд░ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдореИрдВ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд▓рд┐рдВрдХ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ:
рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ, рдЕрдЪреНрдЫреЗ рдЖрд╡реЗрджрди рдХрд░реЗрдВ рдФрд░ рдЬрд▓реНрдж рд╣реА рдЖрдкрдХреЛ рджреЗрдЦреЗрдВред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!