{"id":313287,"date":"2020-11-17T15:00:26","date_gmt":"2020-11-17T15:00:26","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=313287"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=313287","title":{"rendered":"\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u00ab10x \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0443\u00bb: \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u044b, \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u044b, \u0448\u0430\u0431\u043b\u043e\u043d\u044b"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430. \u041d\u043e \u0432 \u043d\u0435\u0439 \u043c\u043d\u043e\u0433\u043e \u0440\u0443\u0442\u0438\u043d\u044b: \u043f\u043e\u0438\u0441\u043a, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 (\u0447\u0438\u0442\u0430\u0439 \u043a\u043e\u0434\u0430), \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u0420\u0443\u0442\u0438\u043d\u0430 \u2014 \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0434\u043d\u044f, \u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0438 \u0432\u044b\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u2014 \u0442\u0430\u043a\u043e\u0435 \u0442\u043e\u0447\u043d\u043e \u0441\u0447\u0430\u0441\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u043e\u0432, \u0445\u043e\u0442\u043a\u0435\u0435\u0432, \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432 \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 iOS-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u00ab\u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b\u00bb. \u041c\u044b\u00a0\u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u043b\u0438\u0441\u0442\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 (\u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0443\u0436\u0435 \u0437\u043d\u0430\u043b\u0438) \u0438 \u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u0438\u0445 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0438\u0442\u044c. \u042d\u0442\u043e \u0432\u043e\u0448\u043b\u043e \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a \u043d\u0430\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u0431\u044f\u0442\u0430, \u043c\u044b \u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 (\u0438 \u043f\u043e\u0440\u043e\u0439 \u0441\u0430\u043c\u0438 \u0443\u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435). \u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0438 \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438\u0437\u0443\u0447\u0430\u043b\u0438, \u043e\u043f\u0438\u0441\u0430\u043b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435: \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 Xcode, \u0447\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u044b \u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u043a\u0430\u0447\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u00ab\u043c\u0435\u0442\u043e\u0434\u0438\u0447\u043a\u0430\u00bb \u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c \u0432 Xcode, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0432 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0438 \u0441\u043b\u0443\u0447\u0430\u0435 (\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/z5\/wm\/n4\/z5wmn4zrtw0fyncf507j2hc2dla.png\"><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u2014 <a href=\"#shortcuts\">\u0428\u043e\u0440\u0442\u043a\u0430\u0442\u044b \u0438 \u0445\u043e\u0442\u043a\u0435\u0438<\/a><br \/>  \u2014 <a href=\"#navigation\">\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f<\/a><br \/>  \u2014 <a href=\"#editing\">\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><br \/>  \u2014 <a href=\"#debugging\">\u041e\u0442\u043b\u0430\u0434\u043a\u0430<\/a><br \/>  \u2014 <a href=\"#customize\">\u041a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/a><br \/>  \u2014 <a href=\"#snippets\">\u0421\u043d\u0438\u043f\u043f\u0435\u0442\u044b<\/a><br \/>  \u2014 <a href=\"#templates\">\u0428\u0430\u0431\u043b\u043e\u043d\u044b<\/a><br \/>  \u2014 <a href=\"#bonus\">\u0411\u043e\u043d\u0443\u0441 \u0444\u0438\u0447\u0430<\/a><\/p>\n<p>  <a name=\"shortcuts\"><\/a><\/p>\n<h2>\u0428\u043e\u0440\u0442\u043a\u0430\u0442 \u0438\u043b\u0438 \u0445\u043e\u0442\u043a\u0435\u0439?<\/h2>\n<p>  <b>\u0428\u043e\u0440\u0442\u043a\u0430\u0442<\/b> \u2014 \u0442\u043e, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0443\u043d\u043a\u0442\u0443 \u043c\u0435\u043d\u044e (\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c\/\u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0443\u0434\u0430\u043b\u0438\u0442\u044c).<\/p>\n<p>  <b>\u0425\u043e\u0442\u043a\u0435\u0439 <\/b>\u2014 \u0442\u043e, \u0443 \u0447\u0435\u0433\u043e \u043d\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0430 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 \u043c\u0435\u043d\u044e\/\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0431\u0438\u043d\u0434\u0438\u043d\u0433).<\/p>\n<p>  \u0421\u0442\u0440\u043e\u0433\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043c\u0438 \u043d\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043a\u0430\u043a \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435. \u041d\u043e \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u043e\u0432 \u0442\u0440\u0443\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u0446\u0435\u043d\u0438\u0442\u044c: \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e (\u041f\u041a\u041c -&gt; \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c). \u042d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u0435\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0434\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u043c\u0430 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 Xcode.<\/p>\n<blockquote><p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u044b \u0434\u043b\u044f UIKit-flow.\u00a0<\/p><\/blockquote>\n<p>  \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0434\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\u2318 \u2014 command;  <\/li>\n<li>\u2325 \u2014 option;  <\/li>\n<li>\u2303 \u2014 control;  <\/li>\n<li>\u21e7 \u2014 shift.  <\/li>\n<\/ul>\n<p>  \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u044b:<\/p>\n<ul>\n<li>\u2318 + B \u2014 build;  <\/li>\n<li>\u2318 + R \u2014 run;  <\/li>\n<li>\u2318 + U \u2014 run unit tests;  <\/li>\n<li>\u2318 +. \u2014 stop build\/run\/run unit tests;  <\/li>\n<li>\u2318 + \u21e7 + \u2325 + K \u2014 clean build folder.  <\/li>\n<\/ul>\n<p>  \u0423\u0432\u0435\u0440\u0435\u043d, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u0432\u0430\u0441 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043d\u0438\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443. \u0428\u043e\u0440\u0442\u043a\u0430\u0442\u044b \u0440\u0430\u0437\u0431\u0438\u0442\u044b \u043d\u0430 \u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430: \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430.<\/p>\n<p>  <a name=\"navigation\"><\/a><\/p>\n<h4>\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f<\/h4>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u0443\u0442\u0438\u043d\u044b \u0441 \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438: <\/p>\n<p>  \u2318 + 0 (\u043d\u043e\u043b\u044c) \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\/\u0441\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c <code>Navigator<\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b10\/11d\/c8f\/b1011dc8fe2bf407e1eba69173b3fd37.gif\"><\/p>\n<p>  \u2318 + \u0446\u0438\u0444\u0440\u044b \u2014 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c \u043f\u0430\u043d\u0435\u043b\u0438 <code>Navigator<\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2cc\/bca\/380\/2ccbca380f9bfefc10c96cd90970a880.gif\"><\/p>\n<p>  \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u0442\u0440\u044e\u043a \u0441 \u043f\u0430\u043d\u0435\u043b\u0438 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0430\u043d\u0435\u043b\u0438 <code>Inspectors<\/code> \u0438 \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c\/\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0451. \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c option: \u2325 + \u2318 + 0 (\u043d\u043e\u043b\u044c):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b3a\/160\/500\/b3a16050048158062ccbe93c5468764e.gif\"><\/p>\n<p>  \u0421 \u0437\u0430\u0436\u0430\u0442\u044b\u043c option \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0432\u0441\u0435\u043c \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c \u043f\u0430\u043d\u0435\u043b\u0438 \u2014 \u2325 + \u2318 +\u0446\u0438\u0444\u0440\u044b:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/21a\/d8e\/570\/21ad8e570cf8aa10c6d84029094bb4d6.gif\"><\/p>\n<p>  <code>Assistant Editor<\/code> \u0441\u043a\u0440\u044b\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u0437\u0430\u0442\u043e \u0432 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0443\u0442\u044b\u0445 \u0448\u0442\u0443\u043a. <\/p>\n<p>  \u2318 + \u21e7 + O \u2014 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0434\u0435\u043c \u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0444\u0430\u0439\u043b. \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u043e \u0438 \u0444\u0430\u0439\u043b\u044b \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 iOS:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/249\/ff9\/7f9\/249ff97f972b2b592e0a5d42c1401834.gif\"><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0440\u044f\u0434\u043e\u043c, \u0437\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u2325, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043d\u0430\u0436\u0430\u0442\u044c <code>Enter<\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e08\/e2c\/c56\/e08e2cc5670410318e0994b7511b935b.gif\"><\/p>\n<p>  \u041b\u0438\u0431\u043e, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0436\u0430\u0442\u044c \u2325 + \u21e7 \u2014 \u0432 \u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u0430\u043c\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c, \u0433\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0440\u0430\u0434\u0430\u043a\u0442\u043e\u0440:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2b9\/f63\/d07\/2b9f63d074ff6973f77660f2327b6982.gif\"><\/p>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u2318 + J + \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/39f\/997\/99a\/39f99799a7c1ad3ffbe7c4f308d1776c.gif\"><\/p>\n<ul>\n<li>\u2318 + \u2303 + T \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432 (\u0437\u0430\u0436\u043c\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e);  <\/li>\n<li>\u2318 + \u2303 + \u2325 + T \u2014 \u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 (\u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0441\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e, \u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442);  <\/li>\n<li>\u2318 + \u21e7 + J \u2014 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u0444\u0430\u0439\u043b \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.  <\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/341\/6e8\/c2e\/3416e8c2ede9288f226aad80f7eecae7.gif\"><\/p>\n<ul>\n<li>\u2318 + T \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432\u043a\u043b\u0430\u0434\u043a\u0443;  <\/li>\n<li>\u2318 + W \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0432\u043a\u043b\u0430\u0434\u043a\u0443;  <\/li>\n<li>\u2318 + \u21e7 + \\ \u2014 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0432\u043a\u043b\u0430\u0434\u043a\u0438.  <\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/688\/53b\/21c\/68853b21c69924bfc1ff9d367a004483.png\"><\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043d\u0435\u043b\u0438, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0443\u044e \u043f\u0443\u0442\u044c \u0434\u043e \u0444\u0430\u0439\u043b\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/65d\/980\/5be\/65d9805be79574195e5b5e8377bcc685.png\"><\/p>\n<p>  \u0412\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0435\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043f\u0443\u0442\u0451\u043c \u0437\u0430\u0436\u0430\u0442\u0438\u044f \u2303 \u0438 \u0446\u0438\u0444\u0440\u044b.<\/p>\n<blockquote><p>\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 (\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u2303 + 1) \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a: \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0445\u043e\u0442\u043a\u0435\u0439, \u043d\u0430\u0447\u043d\u0438\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430\/\u043a\u043b\u0430\u0441\u0441\u0430. \u0422\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u044c\u044e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435.<\/p><\/blockquote>\n<p>  \u2303 + 1 \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0441\u0443\u043f\u0435\u0440\u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442, \u043a\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u0430\u043a\u0438\u0435 \u044d\u043a\u0441\u0442\u0435\u043d\u0448\u0435\u043d\u044b \u0435\u0441\u0442\u044c \u0443 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3c7\/be3\/2f8\/3c7be32f84fc4f772baaec2ea1025858.png\">  <\/p>\n<ul>\n<li>\u2303 + 2 \u0438 \u2303 + 3 \u2014 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u043b\u0438\u0441\u044c. \u042d\u0442\u0438 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445: \u2303 + \u2318 + \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438 \u0432\u043b\u0435\u0432\u043e\/\u0432\u043f\u0440\u0430\u0432\u043e \u0434\u043b\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430\u0437\u0430\u0434 \u0438 \u0432\u043f\u0435\u0440\u0451\u0434;  <\/li>\n<li>\u2303 + 4 \u2014 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u043c\u0430\u043b\u043e \u0447\u0435\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c);  <\/li>\n<li>\u2303 + 5 \u2014 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u0444\u0430\u0439\u043b\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0442\u043a\u0440\u044b\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043b;  <\/li>\n<li>\u2303 + 6 \u2014 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0444\u0430\u0439\u043b\u0435.  <\/li>\n<\/ul>\n<p>  \u0418\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<ul>\n<li>\u2318 + L \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0441\u0442\u0440\u043e\u043a\u0435 \u043a\u043e\u0434\u0430;  <\/li>\n<li>\u2318 + \u043a\u0443\u0440\u0441\u043e\u0440 \u043d\u0430 \u043c\u0438\u043d\u0438\u043a\u0430\u0440\u0442\u0435 \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0444\u0430\u0439\u043b\u0430.  <\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a2d\/e9e\/4d9\/a2de9e4d98bc6d49d4fa6e3de1b1faa7.gif\"><\/p>\n<p>  \u2303 + \u2325 + \u2318 + Enter \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/98e\/df2\/fd5\/98edf2fd5d4394cc0a92abf76b285285.gif\"><\/p>\n<p>  \u21e7 + \u2303+ \u2325 + \u2318 \u0438\u043b\u0438 \u21e7 + \u2325 + \u2318 + \u041f\u041a\u041c \u2014 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0432\u044c\u044e\u0445 \u0432 \u0441\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f89\/358\/bc7\/f89358bc7f5b56927fec04d0730f8628.gif\"><\/p>\n<p>  <a name=\"editing\"><\/a><\/p>\n<h4>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u2318 + \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0432\u043b\u0435\u0432\u043e\/\u0432\u043f\u0440\u0430\u0432\u043e \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e\/\u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438;  <\/li>\n<li>\u2325 + \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0432\u043b\u0435\u0432\u043e\/\u0432\u043f\u0440\u0430\u0432\u043e \u2014 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432;  <\/li>\n<li>Control + \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0432\u043b\u0435\u0432\u043e\/\u0432\u043f\u0440\u0430\u0432\u043e \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u0432 <code>camelCase<\/code>.\u00a0  <\/li>\n<\/ul>\n<p>  <\/p>\n<blockquote><p>\u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c: \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0432 macOS \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0441\u0442\u043e\u043b\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0445\u043e\u0442\u043a\u0435\u044f \u0432 Xcode, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432 System Preferences.<\/p><\/blockquote>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/cf7\/992\/cb8\/cf7992cb8f20446a92d191512e95ea61.png\"><br \/>  \u0412\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0438\u0442\u043e\u0433\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/184\/af1\/053\/184af105326ce13b434a7aa735404526.gif\"><\/p>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u0437\u0430\u0436\u0430\u0442\u044b\u043c Shift \u0434\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u044d\u0442\u0438\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0431\u043b\u043e\u043a\u043e\u043c: <\/p>\n<p>  \u2325 + \u2318+ [ \u0438\u043b\u0438 ] \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a\/\u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432\u0432\u0435\u0440\u0445\/\u0432\u043d\u0438\u0437. \u0421\u0430\u043c\u0430\u044f \u043a\u0440\u0443\u0442\u0430\u044f \u0444\u0438\u0447\u0430 \u0437\u0434\u0435\u0441\u044c \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u0445\u043e\u0434 \u0432 \u0441\u043a\u043e\u0443\u043f\u044b.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ff3\/2b9\/ccb\/ff32b9ccb1c8e92167691ceeaa4081f7.gif\"><\/p>\n<ul>\n<li>\u2318 + [ \u0438\u043b\u0438 ] \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a (\u0441\u0442\u0440\u043e\u043a\u0443) \u0432\u043b\u0435\u0432\u043e\/\u0432\u043f\u0440\u0430\u0432\u043e;  <\/li>\n<li>\u2303 + I \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 (\u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0432 Xcode -&gt; Preferences -&gt; Text Editing -&gt; Indentations);  <\/li>\n<li>\u2325 + \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c \u2014 \u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u043e\u0440\u044b. \u0423\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0435 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\/\u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0447\u0430\u0441\u0442\u0438.  <\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5b5\/f3c\/f50\/5b5f3cf505f4732524c68c08bfec5259.gif\"><\/p>\n<ul>\n<li>\u2318 + \/ \u2014 \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\/\u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443;  <\/li>\n<li>\u2303 + \u2318 + E \u2014 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c (\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u0435\u0433\u043e \u0448\u043e\u0440\u0442\u043a\u0430\u0442 \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442).  <\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/313\/f15\/7bc\/313f157bc4741c930aa3a3cfa0675723.gif\"><\/p>\n<ul>\n<li>\u2318 + F \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0444\u0430\u0439\u043b\u0443;  <\/li>\n<li>\u2318 + \u21e7 + F \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443;  <\/li>\n<li>\u2325 + \u2318 + F \u2014 \u043f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430;  <\/li>\n<li>\u2303 + \u2325 + \u2318 + F \u2014 \u0444\u0438\u043a\u0441 \u0432\u0441\u0435\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0441\u043a\u043e\u0443\u043f\u0435 (\u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u043e, \u043e \u0447\u0435\u043c \u0432\u044b \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438, \u043d\u043e\u00a0 \u0442\u043e\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u0430\u044f \u0432\u0435\u0449\u044c). \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 <code>public<\/code>.  <\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3bd\/aa8\/5c4\/3bdaa85c47125dcdb40447d61df5b63c.gif\"><\/p>\n<p>  \u21e7 + \u2318 + A \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u043a\u043e\u0433\u043e \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u043c\u0435\u043d\u044e, Xcode \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a:\u00a0<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/60d\/b9a\/6a0\/60db9a6a075984f07f3f19882b9cc355.gif\"><\/p>\n<p>  <a name=\"debugging\"><\/a><\/p>\n<h4>\u041e\u0442\u043b\u0430\u0434\u043a\u0430<\/h4>\n<p>  \u042f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0430 \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0440\u0435\u0434\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0440\u0430\u0431\u043e\u0442\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u0443\u0447\u0430\u0442\u044c.<\/p>\n<p>  \u0411\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\u2318 + \\ \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c\/\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442;  <\/li>\n<li>\u2318 + Y \u2014 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c (disable) \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442.  <\/li>\n<\/ul>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:<\/p>\n<ul>\n<li>\u2318 + \u21e7 + c \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c;  <\/li>\n<li>\u21e7 + \u2325 + Y \u2014 \u0441\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c.  <\/li>\n<\/ul>\n<p>  \u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:<\/p>\n<ul>\n<li>\u2318 + K \u2014 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u0438;  <\/li>\n<li>s \u2014 step into (step);  <\/li>\n<li>n \u2014 step over (next);  <\/li>\n<li>finish \u2014 step out;  <\/li>\n<li>c \u2014 continue;  <\/li>\n<li>breakpoint disable \u2014 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442\u044b.  <\/li>\n<\/ul>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0435\u0431\u0430\u0433\u0435\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a78\/837\/3c4\/a788373c4382208b34d7e34e800e2b11.png\"><\/p>\n<p>  <a name=\"customize\"><\/a><\/p>\n<h4>\u041a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/h4>\n<p>  \u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 Xcode \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0445\u043e\u0442\u043a\u0435\u0439 \u0434\u043b\u044f \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 <code>NSLocalizedString<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <code>Key Bindings<\/code> \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a Xcode \u0438 \u043d\u0430\u0439\u0434\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7c0\/427\/fe8\/7c0427fe88a9123a8c99349202c76972.png\"><\/p>\n<p>  \u0423 \u0441\u0435\u0431\u044f \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 ^ + \u2318 + L. \u041c\u043e\u0436\u0435\u043c \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/aca\/03d\/c97\/aca03dc97dcb3e612634745194911d15.gif\"><\/p>\n<p>  \u0418\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0445\u043e\u0442\u043a\u0435\u0439 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u2014 \u2318 + D (\u2318 + backspace \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f2a\/18e\/450\/f2a18e450c0bacc3d4099994e08d310e.png\"><\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f19\/d7a\/ff0\/f19d7aff0ac1340bc8f54c886c1c29ee.gif\"><\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c, \u043d\u043e \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u0447\u0435\u043c \u043c\u043d\u0435 \u0448\u043e\u0440\u0442\u043a\u0430\u0442 \u0434\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438 \u0432 Xcode? \u0423\u0434\u0430\u043b\u0438\u043b \u0435\u0433\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435.<\/p>\n<blockquote><p>Xcode \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u043d\u0434\u0438\u043d\u0433 \u0441\u0435\u0442\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0442 \u0438 \u043f\u043e\u0448\u0430\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043f\u0430\u0440\u0435. \u0424\u0430\u0439\u043b\u044b \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0437\u0434\u0435\u0441\u044c: <code>~\/Library\/Developer\/Xcode\/UserData\/KeyBindings<\/code><\/p><\/blockquote>\n<p>  \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c \u2014 \u0430 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\/\u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 <a href=\"https:\/\/cocoapods.org\/\">\u043f\u043e\u0434\u043e\u0432<\/a>? \u0412 Xcode, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 AppCode, \u043d\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\/\u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u044b \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443. \u0423\u0436\u0430\u0441\u043d\u043e \u0434\u043e\u043b\u0433\u043e. \u041d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0435\u0441\u0442\u044c!<\/p>\n<p>  \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e Xcode \u2014 <code>Behaviors<\/code>:<\/p>\n<ol>\n<li> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 + \u0432\u043d\u0438\u0437\u0443 \u0441\u043b\u0435\u0432\u0430;<\/li>\n<li>\u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0445\u043e\u0442\u043a\u0435\u0439 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 (\u043a\u0430\u043a \u0440\u0430\u0437 \u043e\u0434\u0438\u043d \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u0441\u044f);<\/li>\n<li>\u0443\u043a\u0430\u0436\u0435\u043c \u043f\u0443\u0442\u044c \u0434\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430.  <\/li>\n<\/ol>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8b3\/20c\/3bc\/8b320c3bc3bac3e3fea93cbaf954be53.png\"><\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b (\u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d), \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0438 \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<pre><code class=\"bash\">#!\/bin\/sh osascript &lt;&lt;END tell application &quot;Terminal&quot; if not (exists window 1) then reopen activate  do script &quot;cd `pwd`;bundle install&quot; in window 1 do script &quot;cd `pwd`;bundle exec pod install&quot; in window 1 end tell END <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u043c \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u044f \u0438\u0437 Xcode: \u2318 + P \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443. \u0417\u0430\u0436\u0430\u0442\u044c \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u0442 \u043d\u0430\u0441 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>  \u041a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0434\u043b\u044f \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043a\u0430\u0447\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u2014 extract to function\/method\/variable, add missing switch case;  <\/li>\n<li>\u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442\u044b \u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Swift Error\/Exception\/Symbolic\/Test Failure;  <\/li>\n<li>Version Control Source \u2014 push\/pull\/fetch\/new branch\/checkout;  <\/li>\n<li>\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 Swift Package Manager \u2014 add\/reset\/resolve\/update.  <\/li>\n<\/ul>\n<p>  <\/p>\n<blockquote><p>\u041a\u0430\u043a \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u044b \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445? \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f macOS \u0438\u043c\u0435\u044e\u0442 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 Help \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430. \u041f\u043e\u0438\u0441\u043a \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u0442 \u0432\u0430\u0441 \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u0442\u0430\u0451\u043d\u043d\u044b\u043c \u043c\u0435\u0441\u0442\u0430\u043c, \u043d\u043e \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u0448\u043e\u0440\u0442\u043a\u0430\u0442.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f06\/904\/d49\/f06904d496c5d3472c2f5d0ce1a2e637.gif\">  <\/p><\/blockquote>\n<p>  <a name=\"snippets\"><\/a><\/p>\n<h2>\u0421\u043d\u0438\u043f\u043f\u0435\u0442\u044b<\/h2>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u043d\u0430\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u0440\u0430\u0437 \u0437\u0430 \u0440\u0430\u0437\u043e\u043c \u043f\u0438\u0448\u0443 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u2014 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Boilerplate_code\">\u0431\u043e\u0439\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442<\/a>. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0441\u0435\u0439\u0447\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438 \u043e\u043d\u0438 \u0441\u043a\u043e\u0440\u0435\u0439 \u0432\u0441\u0435\u0433\u043e \u0432\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b: \u044d\u0442\u043e \u0438 <a href=\"https:\/\/github.com\/krzysztofzablocki\/Sourcery\">Sourcery<\/a> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e \u0442\u0438\u043f\u0443 <a href=\"https:\/\/github.com\/mac-cain13\/R.swift\">R.Swift<\/a> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c, \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438. \u041d\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0442\u0430\u0449\u0438\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044e\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0435\u0441\u0442\u044c \u0431\u043e\u0439\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442-\u043a\u043e\u0434, \u0433\u0434\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442. \u0417\u0430\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 Xcode \u2014 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u044b.<\/p>\n<p>  \u0421\u043d\u0438\u043f\u043f\u0435\u0442\u044b \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432 \u044f\u0437\u044b\u043a\u0430 Swift (\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445) \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439: \u0446\u0438\u043a\u043b\u043e\u0432, \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439, \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041d\u043e \u0447\u0430\u0441\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e <code>var<\/code>, \u0430 <code>private\/public var<\/code>. \u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e <code>@testable<\/code>, \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d <code>@testable import<\/code>. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438, \u0430 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0445 \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c.<\/p>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u044b \u043d\u0435\u043b\u044c\u0437\u044f, \u0437\u0430\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e: \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u00abCreate Code Snippet\u00bb. \u0414\u0430\u043b\u044c\u0448\u0435 Xcode \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c: \u0437\u0430\u0434\u0430\u0442\u044c \u0438\u043c\u044f, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u0441\u043a\u043e\u0443\u043f \u0432\u044b\u0437\u043e\u0432\u0430, \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043b\u0438\u0448\u043d, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448 \u0441\u043d\u0438\u043f\u043f\u0435\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7c2\/588\/11b\/7c258811b83ed6dff3f1939cdb7bbd04.gif\"><\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u043c\u043e\u0436\u043d\u043e \u00ab\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00bb \u043a\u043e\u0434 \u0434\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u0435\u0449\u0451 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0432 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443).<\/p>\n<p>  \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043d\u0438\u043f\u043f\u0435\u0442 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Xcode (\u2318 + \u21e7 + L):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/58c\/df9\/a60\/58cdf9a600049be3dead79005adbefd6.png\">  <\/p>\n<blockquote><p>\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440: \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0432\u0430\u0448 \u0442\u0435\u043a\u0441\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>&lt;# MyDescription #&gt;<\/code> (\u043b\u0443\u0447\u0448\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0451\u00a0 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u0441\u0440\u0430\u0437\u0443 \u00ab\u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00bb).<\/p><\/blockquote>\n<p>  \u0410 \u0432\u043e\u0442 \u043a\u0430\u043a \u0432 \u0434\u0432\u0430 \u0442\u0430\u043f\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442 \u0446\u0435\u043b\u043e\u0439 \u043f\u0430\u0447\u043a\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0434\u043b\u044f \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0c0\/4c0\/e00\/0c04c0e009673d990c5e096e9eff0c90.gif\"><\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u00ab\u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b\u00bb \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/Quick\/Quick\">Quick<\/a>\/<a href=\"https:\/\/github.com\/Quick\/Nimble\">Nimble<\/a>. \u041a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0435\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 4\u20136 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 (\u043c\u0438\u043d\u0438\u043c\u0443\u043c), \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043b\u043e\u043c \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u043c\u044b \u0443\u0436\u0435 \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0438 \u0434\u043b\u044f \u0442\u0435\u043b\u0430 \u0441\u043f\u0435\u043a\u0438. \u0412\u0441\u0435\u0433\u043e \u043f\u0430\u0440\u0430 \u0442\u0430\u043f\u043e\u0432 \u043f\u043e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435 \u0438 \u0441\u0435\u0442\u0430\u043f \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u0433\u043e\u0442\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/893\/b03\/95c\/893b0395cc63c9cfd8b4d291bc716c86.gif\"><\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u0435\u0439\u0441: \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0451 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043d\u0443\u043c\u043a\u0443, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 <code>Error<\/code>, \u0437\u0430\u0434\u0430\u0435\u043c \u043a\u0435\u0439\u0441\u044b, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/fdb\/763\/4c2\/fdb7634c226df70f311b1684655acabf.png\"><\/p>\n<p>  \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u043f\u0443\u0441\u0442\u044c \u0441\u043d\u0438\u043f\u043f\u0435\u0442 \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430 \u043c\u0435\u043d\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5e6\/265\/c06\/5e6265c0682f2c91b017788e42d875b8.gif\"><\/p>\n<p>  \u0410 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0435\u0449\u0435 \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c (\u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e). \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u0430:<\/p>\n<ul>\n<li>\u0414\u0435\u043b\u0435\u0433\u0430\u0442 \u0438 data source \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b\/\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b).  <\/li>\n<li>\u041f\u0440\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u043d\u0438\u043f\u043f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u043c\u0438 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438). \u041d\u043e \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0441\u043a\u043e\u0431\u043a\u0438 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u0432\u043e\u0439 \u0441\u043d\u0438\u043f\u043f\u0435\u0442, \u0431\u0435\u0437 \u0441\u043a\u043e\u0431\u043e\u043a. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u043d\u0430\u0440\u0430\u0434\u0443\u044e\u0441\u044c.  <\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a7a\/b1b\/51e\/a7ab1b51eb2b959e0596f598259da473.gif\"><\/p>\n<p>  \u0427\u0430\u0441\u0442\u043e \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u0441 \u044f\u0432\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u0441\u043d\u0438\u043f\u043f\u0435\u0442.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ace\/812\/a7b\/ace812a7b6848a6ddb360d1116391ce7.gif\"><\/p>\n<ul>\n<li>weak self \u0434\u043b\u044f \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439 \u2014 guard let weakSelf = self else { return };  <\/li>\n<li>\u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u2014 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0432 NSLocalizedString (\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0445\u043e\u0442\u043a\u0435\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u0431\u0430\u043d\u0434\u043b\u0430).  <\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/71b\/849\/078\/71b849078c6a4a3c7a6ed5442719e8d8.gif\"><\/p>\n<p>  <a name=\"templates\"><\/a><\/p>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d\u044b<\/h2>\n<p>  \u041f\u043b\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0442\u0435\u043c\u0443 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u044b\u0448\u0435\u200a-\u200a\u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  \u0428\u0430\u0431\u043b\u043e\u043d\u044b \u0443\u0434\u043e\u0431\u043d\u044b, \u043d\u043e Apple \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0443\u0447\u043a\u0430\u043c\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c \u0444\u0430\u0439\u043b\u043e\u0432 (\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432) Xcode. \u0427\u0442\u043e\u0431\u044b \u0438\u0445 \u043d\u0430\u0439\u0442\u0438, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0443\u0442\u0438:<\/p>\n<pre><code class=\"xml\">\/\/ \u2318 + \u21e7 + G \u0432 Finder  \/Applications\/Xcode.app\/Contents\/Developer\/Platforms\/iPhoneOS.platform\/Developer\/Library\/Xcode\/Templates\/File Templates\/Source\/Cocoa Touch Class<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0441\u0432\u043e\u0438 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442\u044b: \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0430\u043f\u043a\u0443 \u043f\u043e \u043f\u0443\u0442\u0438 \u043d\u0438\u0436\u0435, \u0435\u0451 \u0438\u043c\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u043a\u043d\u0435 Xcode. \u042f \u043d\u0430\u0437\u0432\u0430\u043b \u043f\u0430\u043f\u043a\u0443 Helpers:<\/p>\n<pre><code class=\"plaintext\">~\/Library\/Developer\/Xcode\/Templates\/Files Templates\/Helpers<\/code><\/pre>\n<p>  \u0428\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f Xcode \u2014 \u044d\u0442\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u043a\u0443\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0442:<\/p>\n<ul>\n<li>\u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>.swift<\/code> \u0438\u043b\u0438 <code>.storyboard<\/code>);  <\/li>\n<li><code>.plist<\/code> \u0444\u0430\u0439\u043b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438;  <\/li>\n<li>\u0438\u043a\u043e\u043d\u043a\u0438 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043e\u043a\u043d\u0435 Xcode \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430.  <\/li>\n<\/ul>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d, \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043f\u043a\u0443 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c Xcode\u00a0 \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u043f\u043e\u0434 \u0441\u0435\u0431\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 API \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430 \u0443 \u0441\u0435\u0431\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0433\u0434\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u0435\u0449\u0438: \u0443\u0440\u043b, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438.<\/p>\n<p>  \u0427\u0430\u0441\u0442\u043e \u043d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u043e \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u044b \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c (\u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430). \u041a\u0430\u043a \u0440\u0430\u0437 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u0448\u0430\u0431\u043b\u043e\u043d \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043c\u043d\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e \u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u0434\u0435 \u0438 \u0447\u0442\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c.<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c <code>.plist<\/code> \u0444\u0430\u0439\u043b \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;!DOCTYPE plist PUBLIC &quot;-\/\/Apple\/\/DTD PLIST 1.0\/\/EN&quot; &quot;&lt;a href=&quot;http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd&quot;&gt;http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd&lt;\/a&gt;&quot;&gt; &lt;plist version=&quot;1.0&quot;&gt;     &lt;dict&gt;         &lt;key&gt;Platforms&lt;\/key&gt;         &lt;array&gt;             &lt;string&gt;com.apple.platform.iphoneos&lt;\/string&gt;         &lt;\/array&gt;         &lt;key&gt;Kind&lt;\/key&gt;         &lt;string&gt;Xcode.IDEFoundation.TextSubstitutionFileTemplateKind&lt;\/string&gt;         &lt;key&gt;Description&lt;\/key&gt;         &lt;string&gt;Internet request&lt;\/string&gt;         &lt;key&gt;Summary&lt;\/key&gt;         &lt;string&gt;Internet request&lt;\/string&gt;         &lt;key&gt;SortOrder&lt;\/key&gt;         &lt;string&gt;1&lt;\/string&gt;         &lt;key&gt;AllowedTypes&lt;\/key&gt;         &lt;array&gt;             &lt;string&gt;public.swift-source&lt;\/string&gt;         &lt;\/array&gt;         &lt;key&gt;DefaultCompletionName&lt;\/key&gt;         &lt;string&gt;File&lt;\/string&gt;         &lt;key&gt;MainTemplateFile&lt;\/key&gt;         &lt;string&gt;___FILEBASENAME___&lt;\/string&gt;         &lt;key&gt;Options&lt;\/key&gt;         &lt;array&gt;             &lt;dict&gt;                 &lt;key&gt;Default&lt;\/key&gt;                 &lt;string&gt;Some&lt;\/string&gt;                 &lt;key&gt;Description&lt;\/key&gt;                 &lt;string&gt;Name of the request&lt;\/string&gt;                 &lt;key&gt;Identifier&lt;\/key&gt;                 &lt;string&gt;productName&lt;\/string&gt;                 &lt;key&gt;Name&lt;\/key&gt;                 &lt;string&gt;Request name:&lt;\/string&gt;                 &lt;key&gt;NotPersisted&lt;\/key&gt;                 &lt;string&gt;Yes&lt;\/string&gt;                 &lt;key&gt;Required&lt;\/key&gt;                 &lt;string&gt;Yes&lt;\/string&gt;                 &lt;key&gt;Type&lt;\/key&gt;                 &lt;string&gt;text&lt;\/string&gt;             &lt;\/dict&gt;         &lt;\/array&gt;     &lt;\/dict&gt; &lt;\/plist&gt; <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043b \u043a\u043e\u0434 \u0432 <code>.swift<\/code> \u0444\u0430\u0439\u043b (<a href=\"https:\/\/github.com\/alspirichev\/Xcode-templates\/tree\/master\/Templates\/Helpers\/Request.xctemplate\">\u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 GitHub<\/a>) \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u043b \u0438\u043a\u043e\u043d\u043a\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432 Xcode (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a). \u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f Helpers \u0441 \u043c\u043e\u0438\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/09c\/7f7\/100\/09c7f71005a49daa502f18da6240bc69.png\"><\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0435 \u043e\u043a\u043d\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8a7\/b22\/cbb\/8a7b22cbbe9da65cb35a9b21a81b8411.png\"><\/p>\n<p>  \u0412\u0432\u043e\u0434\u0438\u043c \u0438\u043c\u044f \u0434\u043b\u044f \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c14\/c1d\/970\/c14c1d970e2de64ec001a0d54ea6e112.png\"><\/p>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430 \u043c\u0435\u043d\u044f \u0434\u0435\u043b\u0430\u044e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u044b!<\/p>\n<p>  \u041f\u0430\u0440\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432 \u2014 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441 Request \u0432 \u0438\u043c\u0435\u043d\u0438. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f, \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0432\u043e\u0436\u0443 \u0438\u043c\u044f \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430, \u0438 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043a\u043b\u0430\u0441\u0441 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0438\u043c\u0435\u043d\u0435\u043c \u0444\u0430\u0439\u043b\u0430. <code>GetMenuRequest<\/code> \u0438 <code>GetMenuRequest.swift<\/code> \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.  <\/li>\n<li>\u041a\u043b\u0430\u0441\u0441 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u2014 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430, \u0448\u0430\u0431\u043b\u043e\u043d \u043c\u043d\u0435 \u00ab\u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u00bb \u043c\u0435\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044f \u0445\u043e\u0447\u0443 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c.  <\/li>\n<\/ul>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u2014 \u043c\u043d\u043e\u0433\u043e\u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 (code variants).<\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u00ab\u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b\u00bb \u043c\u044b <a href=\"https:\/\/habr.com\/ru\/company\/dodopizzadev\/blog\/432718\/\">\u043e\u0442\u0434\u0435\u043b\u044f\u0435\u043c \u0432\u044c\u044e \u043e\u0442 \u043a\u043e\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/a>. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u0441\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\/\u043a\u0441\u0438\u0431. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u044d\u043a\u0440\u0430\u043d, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c 3 \u0444\u0430\u0439\u043b\u0430: \u0432\u044c\u044e, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u0441\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434. \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0432\u044c\u044e, \u0430 \u0441\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434 \u0438\u043c\u0435\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0432\u044c\u044e \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043c\u043d\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u0430 (\u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0436\u0435 \u0435\u0441\u0442\u044c), \u0438\u043b\u0438 \u0444\u0430\u0439\u043b \u0441 \u0432\u044c\u044e (\u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430). \u0412 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043c\u043d\u043e\u0433\u043e\u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0441 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c 4 \u043f\u0430\u043f\u043a\u0438 \u0434\u043b\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430:<\/p>\n<ol>\n<li>\u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440;  <\/li>\n<li>\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u0441\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434;  <\/li>\n<li>\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u0432\u044c\u044e;  <\/li>\n<li>\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0432\u044c\u044e \u0438 \u0441\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434;  <\/li>\n<\/ol>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f:<\/p>\n<pre><code class=\"xml\">- ViewController.xctemplate - \u2014 UIViewController - \u2014 UIViewControllerStoryboard - \u2014 UIViewControllerView - \u2014 UIViewControllerViewStoryboard - \u2014 TemplateIcon.png - \u2014 TemplateIcon@2x.png - \u2014 TemplateInfo.plist <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441 \u0438\u043a\u043e\u043d\u043a\u043e\u0439 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439, \u043d\u043e \u0441\u0430\u043c\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0430\u0445. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u044b \u0443\u043a\u0430\u0436\u0435\u043c \u0432 Xcode \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u0430 \u043f\u0430\u043f\u043a\u0430.<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c plist:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;!DOCTYPE plist PUBLIC &quot;-\/\/Apple\/\/DTD PLIST 1.0\/\/EN&quot; &quot;&lt;a href=&quot;http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd&quot;&gt;http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd&lt;\/a&gt;&quot;&gt; &lt;plist version=&quot;1.0&quot;&gt;     &lt;dict&gt;         &lt;key&gt;Kind&lt;\/key&gt;         &lt;string&gt;Xcode.IDEFoundation.TextSubstitutionFileTemplateKind&lt;\/string&gt;         &lt;key&gt;Description&lt;\/key&gt;         &lt;string&gt;ViewController class&lt;\/string&gt;         &lt;key&gt;Summary&lt;\/key&gt;         &lt;string&gt;ViewController class&lt;\/string&gt;         &lt;key&gt;SortOrder&lt;\/key&gt;         &lt;string&gt;1&lt;\/string&gt;         &lt;key&gt;DefaultCompletionName&lt;\/key&gt;         &lt;string&gt;ViewController&lt;\/string&gt;         &lt;key&gt;Platforms&lt;\/key&gt;         &lt;array&gt;             \u00a0&lt;string&gt;com.apple.platform.iphoneos&lt;\/string&gt;         &lt;\/array&gt;         &lt;key&gt;Options&lt;\/key&gt;         &lt;array&gt;             \u00a0&lt;dict&gt;                 \u00a0\u00a0&lt;key&gt;Identifier&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;viewControllerName&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Required&lt;\/key&gt;                 \u00a0\u00a0&lt;true\/&gt;                 \u00a0\u00a0&lt;key&gt;Name&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;ViewController:&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Description&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;The name of the view controller class to create&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Type&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;text&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;NotPersisted&lt;\/key&gt;                 \u00a0\u00a0&lt;true\/&gt;                 \u00a0&lt;\/dict&gt;             \u00a0&lt;dict&gt;                 \u00a0\u00a0&lt;key&gt;Identifier&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;cocoaTouchSubclass&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Required&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;YES&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Name&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;Subclass of:&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Description&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;What class to subclass in the new file&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Type&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;class&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Default&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;UIViewController&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;NotPersisted&lt;\/key&gt;                 \u00a0\u00a0&lt;true\/&gt;                 \u00a0&lt;\/dict&gt;             \u00a0&lt;dict&gt;                 \u00a0\u00a0&lt;key&gt;Identifier&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;View&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Name&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;Also create View file&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Description&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;Whether to create a View file with the same name&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Type&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;checkbox&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Default&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;true&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;NotPersisted&lt;\/key&gt;                 \u00a0\u00a0&lt;true\/&gt;                 \u00a0&lt;\/dict&gt;             \u00a0&lt;dict&gt;                 \u00a0\u00a0&lt;key&gt;Identifier&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;Storyboard&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Name&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;Also create Storyboard file&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Description&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;Whether to create a Storyboard file with the same name&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Type&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;checkbox&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Default&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;true&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;NotPersisted&lt;\/key&gt;                 \u00a0\u00a0&lt;true\/&gt;                 \u00a0&lt;\/dict&gt;             \u00a0&lt;dict&gt;                 \u00a0\u00a0&lt;key&gt;Default&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;___VARIABLE_viewControllerName___&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Identifier&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;productName&lt;\/string&gt;                 \u00a0\u00a0&lt;key&gt;Type&lt;\/key&gt;                 \u00a0\u00a0&lt;string&gt;static&lt;\/string&gt;                 \u00a0&lt;\/dict&gt;         &lt;\/array&gt;     &lt;\/dict&gt; &lt;\/plist&gt; <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0438\u0442\u043e\u0433\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7fc\/d13\/03c\/7fcd1303ced5357e0f4449ae0365fa0b.png\"><\/p>\n<p>  \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c\u0441\u044f \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0412 \u043d\u0438\u0445 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u0432\u0435\u0441\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434: \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0432\u044c\u044e, \u0432 \u0441\u0442\u043e\u0440\u0438\u0431\u043e\u0440\u0434\u0435 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u0432\u044c\u044e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/84c\/49d\/aeb\/84c49daebb249c02d50572a42595b5f6.png\"><\/p>\n<p>  \u0421\u0438\u043b\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f VIPER-\u043c\u043e\u0434\u0443\u043b\u044f \u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e (\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0435\u0440 \u0441 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u043e\u0440\u043e\u043c \u0438\u043b\u0438 \u0432\u0435\u0441\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c).<\/p>\n<p>  <a name=\"bonus\"><\/a><\/p>\n<h4>\u0411\u043e\u043d\u0443\u0441 \u0441\u0435\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432<\/h4>\n<p>  \u041a\u0430\u043a \u0440\u0430\u043d\u044c\u0448\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0434\u043b\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0435\u0442 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u00ab\u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f\u00bb \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0441\u0442\u0430\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 Xcode. \u041d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0444\u0438\u0447\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043d\u0435 \u0432\u0438\u0434\u0435\u043b \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0439).<\/p>\n<p>  \u0424\u0438\u0447\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432 \u0440\u043e\u043b\u0438 \u043f\u0440\u0435\u0432\u044c\u044e \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 \u043f\u043e\u043b\u0435 <code>Bundle Identifier<\/code> \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u043b\u044f <code>Product Name<\/code>. \u0412 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/48d\/77a\/ef9\/48d77aef916526972240f6835df0e089.gif\"><\/p>\n<p>  \u041f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0435, \u0432\u0435\u0434\u044c \u0442\u0435\u043f\u0435\u0440\u044c \u044f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u0439\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442 \u0447\u0430\u0441\u0442\u0438 <code>ViewController<\/code> \u0438 <code>View<\/code>.<\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u0432 <code>.plist<\/code> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435, \u0433\u0434\u0435 \u0432 default-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u0443\u043a\u0430\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430.<\/p>\n<pre><code class=\"xml\">\/\/ \u041f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0438\u043c\u0435\u043d\u0438 ViewController &lt;dict&gt;     \u00a0\u00a0&lt;key&gt;Default&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;Massive&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;Identifier&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;productName&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;Required&lt;\/key&gt;     \u00a0\u00a0&lt;true\/&gt;     \u00a0\u00a0&lt;key&gt;Name&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;ViewController:&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;Description&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;The name of the view controller class to create&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;Type&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;text&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;NotPersisted&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;YES&lt;\/string&gt; &lt;\/dict&gt;  \/\/ \u041f\u0440\u0435\u0432\u044c\u044e \u0438\u043c\u0435\u043d\u0438 ViewController &lt;dict&gt;     \u00a0\u00a0&lt;key&gt;NotPersisted&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;Yes&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;Default&lt;\/key&gt;&lt;string&gt;___VARIABLE_productName:identifier___ViewController&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;Description&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;ViewController&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;Identifier&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;previewViewController&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;Name&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;ViewController:&lt;\/string&gt;     \u00a0\u00a0&lt;key&gt;Type&lt;\/key&gt;     \u00a0\u00a0&lt;string&gt;static&lt;\/string&gt; &lt;\/dict&gt; <\/code><\/pre>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u043d\u043e. \u0421\u043f\u0430\u0441\u0438\u0431\u043e @<a href=\"https:\/\/habr.com\/ru\/users\/ihppie\/\">ihppie<\/a> \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e \u044d\u0442\u0443 \u0444\u0438\u0447\u0443.<\/p>\n<h2>\u0418\u0442\u043e\u0433<\/h2>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0440\u0443\u0442\u0438\u043d\u044b \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e \u0438 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0412\u0441\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0435\u043c\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043e\u0434\u0435, \u0430 \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 IDE \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0435\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f.<\/p>\n<ul>\n<li>\u0422\u0440\u0435\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u044b \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430 \u0442\u0430\u0447\u043f\u0430\u0434\u0435\/\u043c\u044b\u0448\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0442\u044c \u0432\u0430\u0441. \u041c\u043d\u043e\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b\u0448\u043a\u043e\u0439 \u0438 \u0442\u0430\u043a \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0437\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443?  <\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u044b \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u044b\u0445, \u043d\u0435\u0434\u0435\u043b\u0438\u043c\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, project-specific \u043a\u0435\u0439\u0441\u043e\u0432.  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c, \u043d\u043e \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 (code variants).  <\/li>\n<\/ul>\n<p>  \u041a\u043e\u0434 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0432 <a href=\"https:\/\/github.com\/alspirichev\/Xcode-templates\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 GitHub<\/a>.  <\/p>\n<blockquote><p>\u0414\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0441\u0432\u043e\u0438\u043c\u0438 \u0434\u0436\u0435\u0434\u0430\u0439\u0441\u043a\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u0438\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u0434\u043e\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0438 \u0432 \u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430\u0445, \u043a\u0430\u043a \u0443\u0447\u0438\u043b\u0438 \u0438\u043b\u0438 \u0443\u0447\u0438\u0442\u0435 \u2014 \u0432\u043c\u0435\u0441\u0442\u0435 \u043c\u044b \u0441\u0442\u0430\u043d\u0435\u043c \u043d\u0430 \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0431\u043b\u0438\u0436\u0435 \u043a 10x \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0443. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c <a href=\"https:\/\/telegram.im\/dodomobile\">\u043d\u0430 \u043a\u0430\u043d\u0430\u043b Dodo Pizza Mobile<\/a> \u0438 <a href=\"https:\/\/t.me\/dododev\">Dodo Engineering<\/a>.<\/p><\/blockquote>\n<\/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=\"https:\/\/habr.com\/ru\/company\/dododev\/blog\/527740\/\"> https:\/\/habr.com\/ru\/company\/dododev\/blog\/527740\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430. \u041d\u043e \u0432 \u043d\u0435\u0439 \u043c\u043d\u043e\u0433\u043e \u0440\u0443\u0442\u0438\u043d\u044b: \u043f\u043e\u0438\u0441\u043a, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 (\u0447\u0438\u0442\u0430\u0439 \u043a\u043e\u0434\u0430), \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u0420\u0443\u0442\u0438\u043d\u0430 \u2014 \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0434\u043d\u044f, \u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0438 \u0432\u044b\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u2014 \u0442\u0430\u043a\u043e\u0435 \u0442\u043e\u0447\u043d\u043e \u0441\u0447\u0430\u0441\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u043e\u0432, \u0445\u043e\u0442\u043a\u0435\u0435\u0432, \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432 \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 iOS-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u00ab\u0414\u043e\u0434\u043e \u041f\u0438\u0446\u0446\u044b\u00bb. \u041c\u044b\u00a0\u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u043b\u0438\u0441\u0442\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 (\u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0443\u0436\u0435 \u0437\u043d\u0430\u043b\u0438) \u0438 \u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u0438\u0445 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0438\u0442\u044c. \u042d\u0442\u043e \u0432\u043e\u0448\u043b\u043e \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a \u043d\u0430\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u0431\u044f\u0442\u0430, \u043c\u044b \u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 (\u0438 \u043f\u043e\u0440\u043e\u0439 \u0441\u0430\u043c\u0438 \u0443\u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435). \u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0438 \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438\u0437\u0443\u0447\u0430\u043b\u0438, \u043e\u043f\u0438\u0441\u0430\u043b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435: \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0448\u043e\u0440\u0442\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 Xcode, \u0447\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u044b \u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u043a\u0430\u0447\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u00ab\u043c\u0435\u0442\u043e\u0434\u0438\u0447\u043a\u0430\u00bb \u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c \u0432 Xcode, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0432 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0438 \u0441\u043b\u0443\u0447\u0430\u0435 (\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/z5\/wm\/n4\/z5wmn4zrtw0fyncf507j2hc2dla.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-313287","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313287","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=313287"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313287\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=313287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=313287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=313287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}