{"id":166047,"date":"2013-01-22T17:03:03","date_gmt":"2013-01-22T13:03:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=166047"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=166047","title":{"rendered":"<span class=\"post_title\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Ruby<\/span>"},"content":{"rendered":"<div class=\"content html_format\">       \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, RubyMotion \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 iOS. \u041f\u043e\u0441\u043b\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0441 \u043d\u0438\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 Ruby \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u044f\u0437\u044b\u043a, \u0447\u0435\u043c Objective-C.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/361\/25b\/a05\/36125ba05da5414db1c08f1da2ab11ba.png\"\/><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h4>\n<p>  <\/p>\n<h5>\u042d\u0442\u043e \u0420\u0443\u0431\u0438 \u0438\u043b\u0438 \u043d\u0435\u0442?<\/h5>\n<p>  RubyMotion \u2014 \u044d\u0442\u043e <i>\u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/i> \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 iOS \u043d\u0430 <a href=\"http:\/\/www.rubymotion.com\/developer-center\/guides\/getting-started\/\">\u044f\u0437\u044b\u043a\u0435 Ruby<\/a>. \u041e\u043d \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 <a href=\"http:\/\/www.rubymotion.com\/developer-center\/guides\/runtime\/\">\u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b Ruby \u0432\u043d\u0443\u0442\u0440\u0438 iOS. \u0425\u043e\u0442\u044f \u0441\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0443\u0431\u0438 \u043a\u043e\u0434\u0430 \u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 <a href=\"http:\/\/www.ruby-lang.org\/en\/\">CRuby<\/a>, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 Ruby 1.9.<\/p>\n<p>  \u0417\u043d\u0430\u043d\u0438\u0435 \u0420\u0443\u0431\u0438 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0412\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u043c. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 RubyMotion \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0432\u0430\u0436\u043d\u0435\u0435 \u0431\u044b\u0442\u044c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c \u0441 Objective-C \u0438 Foundation Framework API. \u041f\u043e \u0441\u0443\u0442\u0438, RubyMotion \u00ab\u0440\u0443\u0431\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u00bb Objective-C.<\/p>\n<h5>\u0420\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c<\/h5>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 RubyMotion, \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c XCode, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043b\u044e\u0431\u0438\u043c\u044b\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 RubyMotion \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"http:\/\/www.rubymotion.com\/developer-center\/guides\/project-management\/\">\u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/a> (<code>motion<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0412\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c.<\/p>\n<p>  \u0412 \u043d\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0430\u0431\u043e\u0440 rake \u0442\u0430\u0441\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0412\u0430\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 iOS. \u041e\u043d \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u043b\u0438 pfile, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b .xib, .storyboard \u0438 .xcdatamodeld.<\/p>\n<h5>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c?<\/h5>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435 \u0442\u0435\u0440\u043f\u0438\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f <a href=\"http:\/\/sites.fastspring.com\/hipbyte\/product\/rubymotion\">\u043a\u0443\u043f\u0438\u0442\u044c \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e<\/a> (<i>\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d\u0430 \u0441\u0442\u043e\u0438\u0442 $199, \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0441\u0443\u043c\u043c\u0430 \u0432 \u0440\u0443\u0431\u043b\u044f\u0445 \u043f\u043e \u043a\u0440\u0438\u0432\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443<\/i>), \u0442.\u043a. \u044d\u0442\u043e \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0439 \u0441\u043e\u0444\u0442. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u043c \u043f\u0440\u043e\u0439\u0442\u0438 <a href=\"http:\/\/www.rubymotion.com\/developer-center\/guides\/getting-started\">Getting Started Guide<\/a> \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 RubyMotion.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 <a href=\"http:\/\/motioncasts.tv\/get-moving-with-rubymotion\/\">\u0432\u0432\u043e\u0434\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442<\/a> \u0441 \u0441\u0430\u0439\u0442\u0430 Motion Casts. \u0418 \u0435\u0449\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <a href=\"http:\/\/pragmaticstudio.com\/screencasts\/rubymotion\">50-\u043c\u0438\u043d\u0443\u0442\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442<\/a> \u043e\u0442 Pragmatic Studio, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u0412\u0430\u043c \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u042d\u0442\u043e\u0442 <a href=\"http:\/\/www.rubymotion-tutorial.com\/\">\u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b<\/a> \u0442\u043e\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445.<\/p>\n<h4>\u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 RubyMotion \u0438 \u0447\u0435\u043c \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u0435\u043d, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u043d\u0430\u0448\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043d\u0435 \u0441\u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0412\u0430\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0435\u043b\u043a\u0443. \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 <a href=\"https:\/\/www.github.com\/mariochavez\/conference\">\u043f\u0440\u0438\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f<\/a>.<\/p>\n<h5>\u041d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/h5>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u0442\u0432\u043e\u0440\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0430\u043f\u043f\u043b\u0438\u043a\u0443\u0445\u0443 \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <a href=\"http:\/\/magmarails.com\/\">MagmaRails 2012<\/a>. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c \u0434\u043e \u0441\u043f\u0438\u043a\u0435\u0440\u043e\u0432 \u0438 \u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439, \u0440\u0430\u0437\u0431\u0438\u0442\u044b\u0445 \u043f\u043e \u0434\u043d\u044f\u043c.<\/p>\n<h5>\u041d\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h5>\n<p>  \u0412\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 RubyMotion \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0434\u0430, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0430\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 DSL \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043f\u043e\u0434 iOS. \u041d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c XCode Storyboard, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e.<\/p>\n<p>  \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u043a XCode, \u0438 \u044f \u0440\u0430\u043d\u0435\u0435 \u043e\u0431\u0435\u0449\u0430\u043b, \u0447\u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043d\u0435\u043c, \u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<h5>\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442<\/h5>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c, \u0441\u0442\u0430\u043d\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u0435\u043d\u044c\u043a\u043e\u0433\u043e XCode \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0412\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c XCode 4.5.x \u2014 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Master-Detail Application, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0439\u0442\u0435 \u0435\u043c\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432 \u043f\u043e\u043b\u0435 Devices \u0432\u044b\u0431\u0440\u0430\u043d iPhone \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0433\u0430\u043b\u043e\u0447\u043a\u0438 \u00abUse StoryBoard\u00bb \u0438 \u00abUse Core Data\u00bb. <\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/59f\/6fd\/e09\/59f6fde09054c1853c522c09edb797ac.png\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 RubyMotion \u0438 \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u00abconference\u00bb:<\/p>\n<pre><code class=\"bash\">$ motion create conference <\/code><\/pre>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0430\u0448\u0435\u0433\u043e RubyMotion \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0435\u0441\u0442\u044c \u043f\u0430\u043f\u043a\u0430 resources, \u0432 \u043d\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b <code>MainStoryboard.storyboard<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d XCode. \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u0444\u0430\u0439\u043b \u0438 \u0437\u0430\u0442\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043d\u0435\u0433\u043e \u0438\u0437 XCode.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/131\/658\/d98\/131658d98b3617826f1735994312c8f2.png\"\/><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0432\u0441\u0435 \u0435\u0449\u0435 \u0445\u043e\u0442\u0438\u043c \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 XCode, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u043f\u0430\u043f\u043e\u0447\u043a\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 XCode. \u041d\u0430\u0441 \u0441\u043f\u0440\u043e\u0441\u044f\u0442, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0423\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0433\u0430\u043b\u043e\u0447\u043a\u0430 <code>Copy items into destination group's folder (if needed)<\/code> \u0441\u043d\u044f\u0442\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 Finish. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u0438\u043c\u043b\u0438\u043d\u043a \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0444\u0430\u0439\u043b\u0443, \u0438 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 XCode \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/b49\/bbc\/cdc\/b49bbccdc119050cf3d75104b383d7ad.png\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c Bundler:<\/p>\n<pre><code class=\"bash\">$ bundle init <\/code><\/pre>\n<p>  \u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 Gemfile \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"ruby\">source :rubygems gem 'xcodeproj', '~&gt; 0.3.0' gem 'ib' gem 'rake' <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Bundler:<\/p>\n<pre><code class=\"bash\">$ bundle <\/code><\/pre>\n<p>  \u0413\u0435\u043c\u044b <a href=\"https:\/\/github.com\/CocoaPods\/Xcodeproj\">xcodeproj<\/a> \u0438 <a href=\"https:\/\/github.com\/yury\/ib\">ib<\/a> \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u043b\u0435\u0442\u044b \u0438\u0437 Ruby \u0441\u043e \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u0430\u043c\u0438 \u0438\u0437 XCode, \u0447\u0435\u043c \u043c\u044b \u043f\u043e\u0437\u0436\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u043c Rakefile \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 <code>require &quot;motion\/project&quot;<\/code> \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442 Bundler \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443:<\/p>\n<pre><code class=\"ruby\">require 'rubygems' require 'ib' require 'bundler'  Bundler.require <\/code><\/pre>\n<p>  \u041d\u0430\u0439\u0434\u0438\u0442\u0435 <code>app_delegate.rb<\/code> \u0438 \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0432 \u0441\u0432\u043e\u0435\u043c \u043b\u044e\u0431\u0438\u043c\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043c\u0435\u0442\u043e\u0434 <code>application<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0441\u043a\u0430\u0436\u0435\u043c RubyMotion \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c <code>MainStoryboard.storyboard<\/code>:<\/p>\n<pre><code class=\"ruby\">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 <\/code><\/pre>\n<p>  \u041c\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0444\u0440\u0435\u0439\u043c \u044d\u043a\u0440\u0430\u043d\u0430, \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0448\u0435\u0433\u043e <code>rootViewController<\/code> \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0430\u0448 \u044d\u043a\u0440\u0430\u043d \u0432\u0438\u0434\u0438\u043c\u044b\u043c.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435:<\/p>\n<pre><code class=\"bash\">$ rake <\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0435\u0433\u043e \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442. \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u0442\u043e \u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0435\u0442\u043a\u0443. \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0430\u0431\u0435\u0440\u0438\u0442\u0435 <code>quit<\/code> \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/579\/dc6\/946\/579dc69461a82d7b6782291708890dcd.png\"\/><\/p>\n<h5>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434<\/h5>\n<p>  \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a XCode, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0444\u0430\u0439\u043b <code>MainStoryboard.storyboard<\/code>.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/983\/9d8\/827\/9839d882728563d3bbe3a4d0d8bc2276.png\"\/><\/p>\n<p>  \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <code>Master View Controller<\/code> \u0438 \u0434\u0430\u0431\u043b\u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043f\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 <code>MagmaRails<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <code>Table View<\/code> \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>Content<\/code> \u0441 <code>Dynamic<\/code> \u043d\u0430 <code>Static<\/code>. \u0412 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u044b\u0442\u044c \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u044f\u0447\u0435\u0435\u043a. \u041d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0432\u0435 \u0435\u0435 \u043a\u043e\u043f\u0438\u0438. \u041f\u043e\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u2014 \u0434\u0432\u043e\u0439\u043d\u044b\u043c \u043a\u043b\u0438\u043a\u043e\u043c \u2014 \u043d\u0430 \u00abDay One\u00bb, \u00abDay Two\u00bb, \u00abDay Three\u00bb, \u00abSpeakers\u00bb \u0438 \u00abVenue\u00bb. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0439 Master View Controller \u0438 Detail View Controller, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/f7c\/0d1\/a3c\/f7c0d1a3cfdc3151e3e7be4b22e8496e.png\"\/><\/p>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0435\u0449\u0435 \u043e\u0434\u0438\u043d View Controller, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043f\u043e \u0434\u043d\u044f\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0442\u044f\u043d\u0435\u043c \u0435\u0433\u043e \u0438\u0437 Objects Library \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0445\u043e\u043b\u0441\u0442. \u041f\u0435\u0440\u0435\u0442\u044f\u043d\u0438\u0442\u0435 table view \u0432 \u044d\u0442\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0430 table-view cell \u0432 table view. <\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f identity inspector, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0439\u0442\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432 <code>TalksViewController<\/code>. \u0412 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043f\u043e\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0448\u0435\u0439 \u043d\u043e\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 Talk, \u0430 \u0438\u0437 identity inspector \u043f\u043e\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 TalkViewCell. \u0422\u0430\u043a\u0436\u0435, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0441\u0442\u0438\u043b\u044c \u043d\u0430\u0448\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u0435\u0435 \u0432\u044b\u0441\u043e\u0442\u0443 \u043d\u0430 115.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 3 \u043b\u0435\u0439\u0431\u043b\u0430 \u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043d\u0430\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0435, \u043f\u0435\u0440\u0435\u0442\u044f\u043d\u0438\u0442\u0435 \u043a\u0443\u0440\u0441\u043e\u0440 \u0441 \u0437\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 <code>ctrl<\/code> \u0441 \u044f\u0447\u0435\u0439\u043a\u0438 Day One \u043d\u0430 Master View Controller \u043a \u043d\u043e\u0432\u043e\u043c\u0443 TalksViewController, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0438\u043f\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c <code>push<\/code>, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d\u0438 \u2014 <code>DayOne<\/code>. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u044f\u0447\u0435\u0435\u043a \u0441\u043e \u0432\u0442\u043e\u0440\u044b\u043c \u0438 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u0434\u043d\u0435\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/f6d\/601\/d3c\/f6d601d3c63881383f787a6b24ada628.png\"\/><\/p>\n<h5>Core Data models and application seed<\/h5>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u0438 <a href=\"http:\/\/developer.apple.com\/library\/mac\/#documentation\/cocoa\/Conceptual\/CoreData\/cdProgrammingGuide.html\">Core Data<\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0438\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 XCode, \u0443 \u043e\u043f\u0446\u0438\u0438 Use Core Data \u0441\u0442\u043e\u044f\u043b\u0430 \u0433\u0430\u043b\u043e\u0447\u043a\u0430. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0444\u0430\u0439\u043b <code>.xcdatamodeld<\/code>. \u041d\u0430\u0439\u0434\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 XCode \u0438 \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043f\u043e \u043d\u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u043d\u0435\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Show File in Finder, \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u043f\u0430\u043f\u043a\u0443 resources \u043d\u0430\u0448\u0435\u0439 \u0430\u043f\u043f\u043b\u0438\u043a\u0443\u0445\u0438 \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0444\u0430\u0439\u043b \u0432 XCode, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0442\u044f\u043d\u0438\u0442\u0435 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043d\u043e \u0443\u0436\u0435 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u043f\u0430\u043f\u043a\u0438.<\/p>\n<p>  \u0412 Xcode \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 Core Data Models \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0434\u0432\u0435 \u043d\u043e\u0432\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, Talk \u0438 Presenter. \u0414\u043b\u044f Talk \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0442\u0430\u043a, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Data Model Inspector, \u0447\u0442\u043e Class \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Talk. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u0434\u043b\u044f Presenter.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/813\/3e8\/0ef\/8133e80ef5c6626053640b234b9f368c.png\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/bf0\/57e\/529\/bf057e529e3ce0d60be1efaed877a33c.png\"\/><\/p>\n<p>  \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0444\u0430\u0439\u043b. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u041c\u043e\u0434\u0435\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 RubyMotion.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0434\u0432\u0430 \u0433\u0435\u043c\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u2014 <a href=\"https:\/\/github.com\/HipByte\/motion-cocoapods\">motion-cocoapods<\/a> \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 <a href=\"http:\/\/cocoapods.org\/\">CocoaPods<\/a>, \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f Objective-C. \u0414\u0430, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u043d\u0430 \u0420\u0443\u0431\u0438, \u043c\u044b \u0432\u0441\u0435 \u0435\u0449\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 Objective-C.<\/p>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/magicalpanda\/MagicalRecord\">MagicalRecord<\/a>. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Core Data.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0433\u0435\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/hookercookerman\/motion_support\">motion_support<\/a>. \u041e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0441\u0445\u043e\u0436\u0438\u0439 \u0441 ActionSupport \u0432 Ruby on Rails (\u0441\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044f \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u044f\u0434\u0440\u0430), \u043d\u043e \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0441\u0432\u043e\u044e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u0438 \u0433\u0435\u043c\u044b \u0432 Gemfile \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Bundler.<\/p>\n<pre><code class=\"ruby\">gem 'motion-cocoapods' gem 'motion_support' <\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u0430 \u0433\u0435\u043c\u0430 \u0431\u044b\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0441\u0432\u043e\u0439 Rackfile \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043d\u0435\u0433\u043e \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435\u043c rubygems.<\/p>\n<pre><code class=\"ruby\">require 'motion-cocoapods' require 'motion_support\/all' <\/code><\/pre>\n<p>  \u0415\u0449\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c RubyMotion, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Core Data framework \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c MagicalRecord \u0438\u0437 cocoapods. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043c\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043c RubyMotion \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432 <code>app\/lib<\/code> \u0440\u0430\u043d\u044c\u0448\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u043c app.files.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0431\u043b\u043e\u043a\u0430 Motion::Project::App.setup:<\/p>\n<pre><code class=\"ruby\">app.frameworks += %w(CoreData)  app.files.unshift Dir.glob(File.join(app.project_dir, 'app\/lib\/**\/*.rb'))  app.pods do   pod 'MagicalRecord' end <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c motion-cocoapods:<\/p>\n<pre><code class=\"bash\">$ pod setup $ rake UPDATE=1 <\/code><\/pre>\n<p>  \u042d\u0442\u0438 \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u044f\u0442 cocoapods \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Objective-C, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0432 Rakefile.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f Core Data.<\/p>\n<p>  \u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u0434\u0438\u0433\u0440\u0430\u043c\u043c\u0435 Core Data. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e model \u0432\u043d\u0443\u0442\u0440\u0438 app, \u0430 \u0432 \u043d\u0435\u0439 \u0444\u0430\u0439\u043b\u044b <code>Talk.rb<\/code> \u0438 <code>Presenter.rb<\/code>:<\/p>\n<pre><code class=\"ruby\">class Talk &lt; NSManagedObject end  class Presenter &lt; NSManagedObject end <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0435\u043b\u0438 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 Core Data, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0412\u0430\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0432\u044f\u0437\u0435\u0439 \u0432 \u043c\u043e\u0434\u0435\u043b\u0438. \u042d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u044b\u043b\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0437\u0430 \u043d\u0430\u0441 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b Core Data.<\/p>\n<p>  \u041d\u0430\u0448\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044f\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0435\u0431\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0445\u0435\u0448\u0435\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0430\u0440\u043e\u0447\u043a\u0430 \u0444\u0430\u0439\u043d\u0434\u0435\u0440\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f <code>MagicalRecord<\/code>.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435, \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 <code>app_delegate.rb<\/code> \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. Seed-\u0434\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 plist \u0444\u0430\u0439\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0445\u0435\u0448, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u0445 \u0432 \u0411\u0414.<\/p>\n<pre><code class=\"ruby\">def seedDatabase  MagicalRecord.setupCoreDataStackWithStoreNamed('database.sqlite')    if Talk.allTalks.size == 0     #https:\/\/github.com\/Bodacious\/PListReadWrite     PListRW.copyPlistFileFromBundle(:seed)     seed = PListRW.plistObject(:seed, Hash)      presenters = []     seed['presenters'].each do |presenter_attrs|       presenters &lt;&lt; Presenter.createWithHash(presenter_attrs)     end      seed['talks'].each do |talk_attrs|       talk = Talk.createWithHash(talk_attrs)       presenter = presenters.select{|p| p.presenterId == talk.presenterId }.first        talk.presenter = presenter       talk.save        presenter.addTalk(talk)       presenter.save     end   end end <\/code><\/pre>\n<p>  <\/p>\n<h5>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438<\/h5>\n<p>  \u0420\u0430\u043d\u0435\u0435 \u043c\u044b \u0441\u0432\u044f\u0437\u0430\u043b\u0438 \u0442\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 MasterViewController \u0438 TalksViewController, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 3 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b, \u0447\u0442\u043e\u0431\u044b TalksViewController \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043e \u043a\u0430\u043a\u043e\u043c \u0434\u043d\u0435 \u0438\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b <code>masterviewcontroller.rb<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 <code>app\/controllers<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043d\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <code>prepareForSegue<\/code>: <\/p>\n<pre><code class=\"ruby\">class MasterViewController &lt; UITableViewController    def prepareForSegue(segue, sender: sender)     case segue.identifier     when 'DayOne', 'DayTwo', 'DayThree'       segue.destinationViewController.setFilter segue.identifier     end   end  end <\/code><\/pre>\n<p>  \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>destinationViewController<\/code> \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 <code>TalksViewController<\/code>, \u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430\u0448 <code>TalksViewController<\/code>. \u042d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0440\u043e\u043c TableUIView, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<pre><code class=\"ruby\">class TalksViewController &lt; 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]      # We will come back to this a bit later    end     def viewDidLoad      day = case filter        when 'DayOne' then 1        when 'DayTwo' then 2        when 'DayThree' then 3        end       self.dataSource = Talk.talksByDay(day)   end end <\/code><\/pre>\n<p>  \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 <code>viewDidLoad<\/code> \u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 <code>prepareSegue<\/code>, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u0431\u0430\u0437\u044b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u043e\u043a\u043b\u0430\u0434\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0445 \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435 <code>dataSource<\/code>.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>tableView(tv, numberOfRowsInSection:section)<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0438 \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0437\u043d\u0430\u0435\u043c \u0443 <code>datasource<\/code>.<\/p>\n<p>  <code>tableView(tv, cellForRowAtIndexPath:indexPath)<\/code> \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u0435\u0435, \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u0438 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u044e\u0434\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0438\u043b\u0438 \u0441\u043e\u0442\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432\u0430\u043d\u0438\u044e \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0445\u0440\u0430\u043d\u0438\u0442 \u043f\u0443\u043b \u0440\u0430\u043d\u0435\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u043e\u0432\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443, \u043e\u043d \u0431\u0435\u0440\u0435\u0442 \u0441\u0442\u0430\u0440\u0443\u044e \u0438\u0437 \u043f\u0443\u043b\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0435\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u0432\u0435\u043b\u0438\u043a\u043e. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c, \u0438 \u0435\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0442, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e.<\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043d\u0430\u0448\u0438\u043c \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u043e\u043c, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0434\u043b\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0434\u043e\u043a\u043b\u0430\u0434\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 TalkCell \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0439\u0431\u043b\u043e\u0432 \u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <code>TalkViewCell<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 <code>\/app\/cells\/talkviewcell.rb<\/code>:<\/p>\n<pre><code class=\"ruby\">class TalkViewCell &lt; UITableViewCell end <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c IB \u0410\u0443\u0442\u043b\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043d\u0430\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434 \u0441 \u043b\u0435\u0439\u0431\u043b\u0430\u043c\u0438 \u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438 \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u0430, \u0432 \u0447\u0435\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0433\u0435\u043c ib:<\/p>\n<pre><code class=\"ruby\">class TalkViewCell &lt; UITableViewCell   extend IB    outlet :talk, UILabel   outlet :speaker, UILabel   outlet :day, UILabel   outlet :picture, UIImageView end <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0448\u0438 \u0430\u0443\u0442\u043b\u0435\u0442\u044b \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043d\u0430 \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u0435. \u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 XCode, \u0442\u043e \u0437\u0430\u043a\u0440\u043e\u0439\u0442\u0435 \u0435\u0433\u043e \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 (\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e ib):<\/p>\n<pre><code class=\"ruby\">$ rake ib:open <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u043b\u044c\u043d\u044b\u0439 ib XCode \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442 \u0436\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044c. \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434 \u0432 XCode \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 TalkViewCell, \u0437\u0430\u0442\u0435\u043c \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 connections inspector. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u0430\u0443\u0442\u043b\u0435\u0442\u044b, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0430\u0443\u0442\u043b\u0435\u0442 \u043d\u0430 \u0445\u043e\u043b\u0441\u0442, \u043f\u043e\u0442\u044f\u043d\u0443\u0432 \u0437\u0430 \u043a\u0440\u0443\u0436\u043e\u0447\u0435\u043a, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0421\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/367\/a8e\/8b8\/367a8e8b86fbde17e8a103d46367677f.png\"\/><\/p>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 TalkViewCell \u0441\u043d\u043e\u0432\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u044f\u0447\u0435\u0439\u043a\u0438:<\/p>\n<pre><code class=\"ruby\">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 = &quot;Day #{talk.day}, #{talk.time}&quot; end <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u043d\u0430\u0437\u0430\u0434 \u0432 TalksViewController, \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 <code>&quot;# We will come back to this a bit later&quot;<\/code> \u0432\u043d\u0438\u0437\u0443 \u043c\u0435\u0442\u043e\u0434\u0430 <code>tableView(tv, cellForRowAtIndexPath:indexPath)<\/code> \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"ruby\">cell.setupTalk(talk)  cell <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440:<\/p>\n<pre><code class=\"bash\">rake <\/code><\/pre>\n<p>  \u0414\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/dea\/603\/619\/dea603619401330fd4e1cf8adf5b6d58.png\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 Day Two, \u0412\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u0437\u0430 \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/a9a\/726\/573\/a9a7265731f144b5e8ce3607d78686c7.png\"\/><\/p>\n<h4>\u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0412\u044b \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0443 \u0412\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 iPhone. \u041e\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442:<\/p>\n<ul>\n<li>Bundler \u0438 \u0433\u0435\u043c\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f RubyMotion<\/li>\n<li>\u0421\u043c\u0435\u0441\u044c \u0438\u0437 Cocoapods \u0438 Objective-C \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/li>\n<li>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b XCode Core Data \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 sqlite<\/li>\n<li>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 XCode \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043a\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0431\u0438<\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u0412\u0430\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0441 \u043a\u043e\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430, \u0442\u043e \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/mariochavez\/conference\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a>.<\/p>\n<p>  RubyMotion \u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u043e\u0434 iOS \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c.<\/p>\n<h4>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/h4>\n<p>  <\/p>\n<ul>\n<li><a href=\"http:\/\/www.rubymotion.com\/developer-center\/api\/index.html\">RubyMotion API Reference<\/a> <\/li>\n<li><a href=\"http:\/\/merbist.com\/2012\/05\/04\/macruby-on-ios-rubymotion-review\/\">MacRuby \u043d\u0430 iOS \u2014 \u043e\u0431\u0437\u043e\u0440 RubyMotion<\/a><\/li>\n<li><a href=\"http:\/\/www.confreaks.com\/videos\/1303-rubyconf2012-rubymotion-for-faster-client-server-development\">RubyMotion \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u041a\u043b\u0438\u0435\u043d\u0442\/\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/a><\/li>\n<\/ul>\n<h4>\u041e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u0412\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0438 \u043d\u0430\u0448\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u0431\u0443\u0434\u0443 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d, \u0435\u0441\u043b\u0438 \u0412\u044b \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043c\u043d\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u043b\u0438\u0447\u043a\u0443.<\/p>\n<p>  RubyMotion \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0431\u043e\u0440\u043e\u0442\u044b, \u0445\u043e\u0442\u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u043b\u044e\u0434\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0440\u0430\u0437\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u043b, \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u0441\u043a\u0435\u043f\u0442\u0438\u0447\u043d\u043e. \u0414\u0430, \u044d\u0442\u043e \u0434\u043e\u0440\u043e\u0433\u043e, \u0434\u0430 \u0441\u044b\u0440\u043e. \u041d\u043e \u0435\u0441\u043b\u0438 \u0412\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c Ruby \u0432 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0441 \u043a\u0430\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u043c\u043c\u044c\u044e\u043d\u0438\u0442\u0438.<\/p>\n<p>  \u042f \u043a\u0443\u043f\u0438\u043b \u0441\u0435\u0431\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e, \u0438 \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u0443\u0431\u0436\u0435. \u041e\u0442 \u0441\u0435\u0431\u044f \u043c\u043e\u0433\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a:<\/p>\n<ul>\n<li><a href=\"http:\/\/learn.thoughtbot.com\/podcast\/29\">\u0412\u044b\u043f\u0443\u0441\u043a \u043f\u043e\u0434\u043a\u0430\u0441\u0442\u0430 Giant Robots Smashing into the Other Giant Robots \u0441 iOS \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 thoughtbot<\/a> <\/li>\n<li><a href=\"http:\/\/www.rubymotion.com\/conference\/\">#inspect 2013 \u2014 \u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u043f\u043e RubyMotion. \u0411\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0411\u0440\u044e\u0441\u0441\u0435\u043b\u0435 25-29 \u0430\u043f\u0440\u0435\u043b\u044f.<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/143332\/\">\u0425\u0430\u0431\u0440\u0430\u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u00abRubyMotion: \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Ruby\u00bb. \u0420\u0443\u0431\u043a\u0430 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0445 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430 \u043a \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044e.<\/a><\/li>\n<li><a href=\"http:\/\/blog.rubymotion.com\/\">\u0411\u043b\u043e\u0433 RubyMotion.<\/a><\/li>\n<li><a href=\"https:\/\/twitter.com\/rubymotion\">\u0422\u0432\u0438\u0442\u0442\u0435\u0440 RubyMotion \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043e\u043a\u0440\u043e\u0432\u0438\u0449\u043d\u0438\u0446\u0430.<\/a><\/li>\n<li><a href=\"http:\/\/tryios.codeschool.com\/\">\u041a\u0443\u0440\u0441 Codeschool \u00abTry iOS\u00bb. \u041e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e, \u0435\u0441\u043b\u0438 \u0412\u044b \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u043e\u0431\u0449\u0430\u043b\u0438\u0441\u044c \u0441 Objective-C.<\/a><\/li>\n<li><a href=\"http:\/\/blog.rubymotion.com\/post\/34235901509\/rubymine-gets-rubymotion-support\">\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 RubyMotion \u0432 IDE RubyMine.<\/a><\/li>\n<li><a href=\"http:\/\/pragprog.com\/book\/carubym\/rubymotion\">\u041f\u043e\u0434\u043e\u0441\u043f\u0435\u0432\u0448\u0430\u044f \u043a\u043d\u0438\u0436\u043a\u0430, \u0441 \u043f\u044b\u043b\u0443, \u0441 \u0436\u0430\u0440\u0443.<\/a><\/li>\n<li><a href=\"https:\/\/www.google.ru\/#hl=ru&amp;gs_rn=1&amp;gs_ri=hp&amp;tok=ZjFtqdK57Qr8x6GfyUAn3A&amp;cp=6&amp;gs_id=l&amp;xhr=t&amp;q=rubymotion&amp;es_nrs=true&amp;pf=p&amp;newwindow=1&amp;tbo=d&amp;output=search&amp;sclient=psy-ab&amp;oq=rubymo&amp;gs_l=&amp;pbx=1&amp;bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&amp;bvm=bv.41248874,d.bGE&amp;fp=a3d8d692ed37c82d&amp;biw=1285&amp;bih=843\">\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u0443<\/a><\/li>\n<\/ul>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0439\u0442\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435 \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u043e \u043d\u043e\u0432\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!        \t\t \t\t\t \t<\/p>\n<div class=\"polling\">\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u041f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c \u043b\u0438 \u0412\u044b RubyMotion?<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"166047\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"6965\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36563\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36563\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36563\">\u0414\u0430, \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36565\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36565\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36565\">\u0414\u0430, \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36567\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36567\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36567\">\u041d\u0435\u0442, \u0434\u043e\u0440\u043e\u0433\u043e<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36569\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36569\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36569\">\u041d\u0435\u0442, \u044d\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36571\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36571\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36571\">\u041d\u0435\u0442, \u043d\u043e \u0445\u043e\u0442\u0435\u043b \u0431\u044b<\/label> \t\t\t\t<\/td>\n<\/tr>\n<\/table>\n<p class=\"for_users_only_msg\">\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a href=\"\/login\/\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<p class=\"total\">\u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b 1 \u0447\u0435\u043b\u043e\u0432\u0435\u043a. \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.<\/p>\n<\/p><\/form>\n<\/p><\/div>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/166047\/\"> http:\/\/habrahabr.ru\/post\/166047\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">       \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, RubyMotion \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 iOS. \u041f\u043e\u0441\u043b\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0441 \u043d\u0438\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 Ruby \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u044f\u0437\u044b\u043a, \u0447\u0435\u043c Objective-C.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/361\/25b\/a05\/36125ba05da5414db1c08f1da2ab11ba.png\"\/>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-166047","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/166047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=166047"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/166047\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=166047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=166047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=166047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}