{"id":334659,"date":"2022-06-17T15:01:15","date_gmt":"2022-06-17T15:01:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=334659"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=334659","title":{"rendered":"<span>\u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u0430\u0434\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439: \u0432\u0437\u0433\u043b\u044f\u0434 iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u041d\u043e \u0432\u0430\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041a\u0430\u043a \u043d\u0435 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0430\u0434 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439? \u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432?<\/p>\n<p>\u042f \u2014 <a href=\"https:\/\/github.com\/NullIsOne\">\u041d\u0438\u043a\u0438\u0442\u0430 \u041a\u043e\u0440\u043e\u0431\u0435\u0439\u043d\u0438\u043a\u043e\u0432<\/a>, iOS Team Lead \u0432 Surf. \u041f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0435 \u043e\u0434\u0438\u043d \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0441 \u0432\u0430\u043c\u0438 \u043e\u043f\u044b\u0442\u043e\u043c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<h3>\u041a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0430 \u2014 \u043e\u0442\u0441\u0442\u043e\u0439<\/h3>\n<p>\u0414\u0443\u043c\u0430\u044e, \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u00ab\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c-\u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c\u00bb, \u0438\u043b\u0438 \u00abcopy-paste\u00bb. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u043e\u0439, \u043d\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\u00a0<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0447\u0442\u043e-\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043e\u0442\u043a\u0443\u0434\u0430. \u041a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0434\u0438\u0441\u043b\u043e\u043a\u0430\u0446\u0438\u0438. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u0434, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0432 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0431\u043e\u0440\u043e\u0434\u0430\u0442\u044b\u0435 \u0433\u043e\u0434\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u0430\u0436\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435.\u00a0<\/p>\n<p>\u0421\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u0435 \u043d\u0443\u0436\u0434\u044b: \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041b\u044e\u0431\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0442 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0435\u0449\u0451 \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0433\u0434\u0435 \u0436\u0435 \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443.<\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>\u043d\u0435 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438,<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u044f\u0432\u043d\u043e\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u043a\u043e\u0434.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/10a\/14f\/206\/10a14f2066b33d74e08178b24f458027.jpeg\" width=\"1280\" height=\"721\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/10a\/14f\/206\/10a14f2066b33d74e08178b24f458027.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c <strong>\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438, \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f (\u043e\u0431\u044b\u0447\u043d\u043e \u2014 \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439) \u0441 \u044f\u0432\u043d\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<\/p>\n<h3>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u0435\u0437 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u2014 \u0442\u043e\u0436\u0435 \u043e\u0442\u0441\u0442\u043e\u0439<\/h3>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0435\u0440\u0435\u0448\u043b\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u041f\u0435\u0442\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u0443\u043f\u0435\u0440\u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.0 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0443\u043f\u0435\u0440\u0444\u0438\u0447\u0438, \u043d\u043e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0443\u043f\u0435\u0440\u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043d\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b.\u00a0<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0412\u0430\u0441\u044f \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u041f\u0435\u0442\u0438, \u043d\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0441\u0443\u043f\u0435\u0440\u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0443\u0441\u043f\u0435\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 1.0.1. \u0418\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 opensource-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0443\u0442\u0438\u043b\u0438\u0442\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/fc0\/05d\/224\/fc005d2244fb997349b6d732e213e21e.jpeg\" width=\"1280\" height=\"721\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fc0\/05d\/224\/fc005d2244fb997349b6d732e213e21e.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0435\u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 <strong>\u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c<\/strong>. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u0448\u044c, \u0441\u043e\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u043d\u0430 CI (continuous integration) \u0438 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0443 \u043d\u043e\u0432\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>\u0441\u043b\u0430\u0431\u0430\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0436\u0451\u0441\u0442\u043a\u0430\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u043b\u0430\u0431\u0430\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b. \u0416\u0451\u0441\u0442\u043a\u0430\u044f \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043b\u044e\u0431\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0434\u043a\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043c\u0438\u043d\u043e\u0440\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u043e\u043c\u0430\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0443, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u043c\u0438. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0432 \u043d\u0430\u0448\u0435 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u043b\u0443\u0447\u0430\u0438 <a href=\"https:\/\/habr.com\/ru\/news\/t\/656205\/\">\u0434\u0438\u0432\u0435\u0440\u0441\u0438\u0439 \u0432 opensource-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445<\/a>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0436\u0451\u0441\u0442\u043a\u0443\u044e \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044e.<\/p>\n<h3>\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e: \u0441\u043b\u0430\u0431\u043e \u0438\u043b\u0438 \u0436\u0451\u0441\u0442\u043a\u043e?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443?<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0451\u0434, \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0443 \u0432\u0441\u0435\u0445 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0439. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043f\u043e\u0445\u043e\u0436\u0438. \u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043e\u0431\u0449\u0438\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.<\/p>\n<h3>RubyGems<\/h3>\n<p>\u0425\u0430\u0431 \u0434\u043b\u044f \u0443\u0442\u0438\u043b\u0438\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Ruby. \u0423\u0442\u0438\u043b\u0438\u0442\u044b \u0437\u0434\u0435\u0441\u044c \u0437\u043e\u0432\u0443\u0442\u0441\u044f \u0433\u0435\u043c\u0430\u043c\u0438 (gems).<\/p>\n<p>\u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0433\u0435\u043c\u043e\u043c <strong>bundler<\/strong>. \u042d\u0442\u043e\u0442 \u0433\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 Gemfile \u0438 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0444\u0430\u0439\u043b Gemfile.lock, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0438 \u0435\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.\u00a0<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e lock-\u0444\u0430\u0439\u043b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0433\u0435\u043c\u043e\u043c, \u0438 \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e: \u0438\u043d\u0430\u0447\u0435 \u0445\u044d\u0448-\u0441\u0443\u043c\u043c\u044b \u0444\u0430\u0439\u043b\u0430 \u0438\u0441\u043f\u043e\u0440\u0442\u044f\u0442\u0441\u044f \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u0430. \u0412\u044b\u0445\u043e\u0434\u043e\u043c \u0438\u0437 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 lock-\u0444\u0430\u0439\u043b\u0430 \u0438 \u043d\u043e\u0432\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043b\u0438\u0431\u043e \u043e\u0442\u043a\u0430\u0442 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0439 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"197\" width=\"197\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/strong>\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"197\" width=\"197\">\n<p align=\"left\">bundle init<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 Gemfile<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"197\" width=\"197\">\n<p align=\"left\">bundle install<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Gemfile \u0438 Gemfile.lock<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"197\" width=\"197\">\n<p align=\"left\">bundle update<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Gemfile, \u043d\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 Gemfile.lock<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 Gemfile.<\/p>\n<pre><code class=\"ruby\">source \"https:\/\/rubygems.org\"  # Ensure github repositories are fetched using HTTPS git_source(:github) do |repo_name|   repo_name = \"#{repo_name}\/#{repo_name}\" unless repo_name.include?(\"\/\") #  puts(repo_name)   \"https:\/\/github.com\/#{repo_name}.git\" end if Gem::Version.new(Bundler::VERSION) &lt; Gem::Version.new('2')  gem \"fastlane\", \"~> 2.199.0\" gem 'cocoapods', \"~> 1.11.2\" gem 'synx', \"~> 0.2.1\" gem 'xcpretty', \"~> 0.3.0\"  gem 'generamba', github: 'surfstudio\/Generamba', branch: 'danger-compatible'  \u2026  plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') eval_gemfile(plugins_path) if File.exist?(plugins_path)<\/code><\/pre>\n<p>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>~><\/code> \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438: \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0441\u043b\u0430\u0431\u0430\u044f. Gem generamba \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0444\u043e\u0440\u043a\u0435 \u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435, \u043d\u043e \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0430\u0431\u043e\u0439 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0435\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0438\u0442 \u043d\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d. \u0425\u043e\u0442\u044f \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0438\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e: \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c <code>commit: '12345'<\/code>, \u0433\u0434\u0435 \u0432\u043c\u0435\u0441\u0442\u043e 12345 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0445\u044d\u0448 \u043a\u043e\u043c\u043c\u0438\u0442\u0430.<\/p>\n<pre><code class=\"ruby\">GIT   remote: https:\/\/github.com\/surfstudio\/Generamba.git   revision: 5de6003e3fa74bb39df50a2e592682439889d818   branch: danger-compatible   specs: generamba (1.4.1)   cocoapods-core (>= 1.4.0, &lt; 2.0.0)   git (~> 1.7)   liquid (= 4.0.0)   terminal-table (= 1.4.5)   thor (= 0.19.1)   xcodeproj (>= 1.5.0, &lt; 2.0.0)  GEM   remote: https:\/\/rubygems.org\/   specs: CFPropertyList (3.0.5)   rexml activesupport (6.1.5)   concurrent-ruby (~> 1.0, >= 1.0.2)   i18n (>= 1.6, &lt; 2)   minitest (>= 5.1)   \u2026  PLATFORMS   x86_64-darwin-19  DEPENDENCIES   cocoapods (~> 1.11.2)   danger (~> 8.5.0)   danger-duplicate_localizable_strings (~> 0.3.0)   danger-swiftlint (~> 0.29.4)   danger-the_coding_love (~> 0.0.9)   danger-xcode_summary (~> 1.0.1)   danger-xcodebuild (~> 0.0.6)   fastlane (~> 2.199.0)   fastlane-plugin-firebase_app_distribution   fastlane-plugin-git_tags   fastlane-plugin-versioning   generamba!   synx (~> 0.2.1)   xcpretty (~> 0.3.0)   xcpretty-json-formatter (~> 0.1.1)  BUNDLED WITH    2.2.5<\/code><\/pre>\n<p>Lock-\u0444\u0430\u0439\u043b \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e bundle install. \u0412 \u043d\u0435\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0443\u0436\u043d\u044b\u0445 \u0433\u0435\u043c\u043e\u0432 \u0438 \u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c bundle install \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d lock-\u0444\u0430\u0439\u043b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u0436\u0435\u0441\u0442\u043a\u043e. \u041b\u0438\u0448\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 bundle update \u0438\u0437\u043c\u0435\u043d\u0438\u0442 lock-\u0444\u0430\u0439\u043b.\u00a0<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f ruby-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u2014 \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0433\u043e <code>my-script.rb<\/code> \u2014 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>.gemspec<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 tag.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430 <a href=\"http:\/\/RubyGems.org\">RubyGems.org<\/a> \u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>gem push<\/code>,<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u0430 \u043e\u043f\u0446\u0438\u044f \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0443\u0434\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043a\u0440\u0443\u0433\u043b\u043e\u0441\u0443\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<h3>Homebrew\u00a0<\/h3>\n<p>\u0425\u0430\u0431 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f macOS \u0438 Linux. \u042f\u0437\u044b\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043d\u0435 \u0432\u0430\u0436\u0435\u043d.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0438 \u00ab\u0440\u0430\u0441\u0444\u0430\u0441\u043e\u0432\u0430\u043d\u0430 \u043f\u043e \u0431\u0443\u0442\u044b\u043b\u043a\u0430\u043c\u00bb. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0448\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c \u0441 \u043a\u0440\u0430\u0444\u0442\u043e\u0432\u043e\u0439 \u043f\u0438\u0432\u043e\u0432\u0430\u0440\u043d\u0435\u0439 \u2014\u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043b\u043e\u0433\u043e\u0442\u0438\u043f\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b.<\/p>\n<p>\u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb. \u0412 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u2014 <code>Brewfile<\/code> \u0438 <code>Brewfile.lock.json<\/code>. \u0423\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u043a\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u043e\u0439 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438, \u0430 \u043a\u0430\u043a\u043e\u0439 \u2014 \u0434\u043b\u044f \u0436\u0451\u0441\u0442\u043a\u043e\u0439? \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e: <code>Brewfile.lock.json<\/code>, \u043a\u0430\u043a \u0438 \u0432 RubyGems, \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"262\" width=\"262\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"262\" width=\"262\">\n<p align=\"left\">touch Cartfile<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 Brewfile<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"262\" width=\"262\">\n<p align=\"left\">brew bundle \u2014no-upgrade<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432 Brewfile \u0438 Brewfile.lock.json<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"262\" width=\"262\">\n<p align=\"left\">brew bundle \u2014force<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432 Brewfile, \u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u0442 Brewfile.lock.json<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<pre><code class=\"json\"># 'brew tap' tap \"homebrew\/cask\" # 'brew tap' with custom Git URL tap \"yonaskolb\/XcodeGen\", \"https:\/\/github.com\/yonaskolb\/XcodeGen.git\" tap \"krzysztofzablocki\/Sourcery\", \"https:\/\/github.com\/krzysztofzablocki\/Sourcery.git\"  # 'brew install' brew \"xcodegen\" brew \"sourcery\"<\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Gemfile \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0442\u0438\u043b\u0438\u0442 \u0432 Brewfile \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u043e\u0439 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438.<br \/>\u041c\u043e\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430.<\/p>\n<pre><code class=\"json\">{   \"entries\": { \"tap\": {   \"homebrew\/cask\": {     \"revision\": \"647192becc3e9389d7f217ea45779b317d106172\"   },   \"yonaskolb\/xcodegen\": {     \"revision\": \"29bcb9259136f04781ef5d736471f01357e43b04\",     \"options\": {       \"clone_target\": \"https:\/\/github.com\/yonaskolb\/XcodeGen.git\"     }   },   \"krzysztofzablocki\/sourcery\": {     \"revision\": \"d64c263e0b112d1a3a21fbd3cf8128507e1382d4\",     \"options\": {       \"clone_target\": \"https:\/\/github.com\/krzysztofzablocki\/Sourcery.git\"     }   } }, \"brew\": {   \"xcodegen\": {     \"version\": \"2.29.0\",     \"bottle\": {       \"rebuild\": 0,       \"root_url\": \"https:\/\/ghcr.io\/v2\/homebrew\/core\",       \"files\": {         \"arm64_monterey\": {           \"cellar\": \":any_skip_relocation\",           \"url\": \"https:\/\/ghcr.io\/v2\/homebrew\/core\/xcodegen\/blobs\/sha256:f76deffe6ad019b5004774c27175af44d1e2a17f2bb932e3053c43338f4dc9e2\",           \"sha256\": \"f76deffe6ad019b5004774c27175af44d1e2a17f2bb932e3053c43338f4dc9e2\"         },             \u2026         \"monterey\": {           \"cellar\": \":any_skip_relocation\",           \"url\": \"https:\/\/ghcr.io\/v2\/homebrew\/core\/xcodegen\/blobs\/sha256:b1aeb953a94bd3bf0e32365c9f7eb52e75d4340f2ff2e2298ae6a822f87b12b7\",           \"sha256\": \"b1aeb953a94bd3bf0e32365c9f7eb52e75d4340f2ff2e2298ae6a822f87b12b7\"         },             \u2026   },   \"system\": { \"macos\": {   \"monterey\": {     \"HOMEBREW_VERSION\": \"3.4.11-102-gef0d5fc\",     \"HOMEBREW_PREFIX\": \"\/usr\/local\",     \"Homebrew\/homebrew-core\": \"703ab164573ff9da5637fbf810b5a1b873832c4c\",     \"CLT\": \"\",     \"Xcode\": \"13.3.1\",     \"macOS\": \"12.3.1\"   } }   } }<\/code><\/pre>\n<p>Lock-\u0444\u0430\u0439\u043b \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043b\u0430\u0431\u043e. \u0424\u043b\u0430\u0433 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>\u2014no-upgrade<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044e \u043a \u0441\u0438\u043b\u044c\u043d\u043e\u0439, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0430\u043d\u0430\u0446\u0435\u044f: \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f Xcode \u0438\u043b\u0438 MacOS lock-\u0444\u0430\u0439\u043b \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0441\u044f.<\/p>\n<h3>Cocoapods<\/h3>\n<p>\u042d\u0442\u043e gem, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Swift \u0438\u043b\u0438 Objective C. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u043b\u0438 \u0436\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u043e\u0442\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.\u00a0<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0431\u0443\u0434\u0443 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0446\u0435\u043b\u043e\u043c, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0433\u0434\u0435 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043e\u0435\u0434\u0438\u043d\u043e, cocoapods \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 xcworkspace-\u0444\u0430\u0439\u043b. \u041e\u0431 \u044d\u0442\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430: \u0432\u0435\u0434\u044c xcworkspace \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"185\" width=\"185\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 pod<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"185\" width=\"185\">\n<p align=\"left\">init<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 Podfile<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"185\" width=\"185\">\n<p align=\"left\">install<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Podfile \u0438 Podfile.lock<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"185\" width=\"185\">\n<p align=\"left\">update<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043ePodfile, \u043d\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 Podfile.lock<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 Podfile.<\/p>\n<pre><code class=\"objectivec\">use_frameworks!  target 'ReactiveDataDisplayManagerExample_iOS' do   pod 'ReactiveDataDisplayManager', :path => '..\/'   pod 'SurfUtils\/ItemsScrollManager', :git => \"https:\/\/github.com\/surfstudio\/iOS-Utils.git\", :tag => '11.0.0'   pod 'Nuke', :git => \"https:\/\/github.com\/kean\/Nuke.git\", :tag => '9.5.1'   pod 'DifferenceKit', '1.1.5'   target 'ReactiveDataDisplayManagerExampleUITests' do   end end<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e Cocoapods \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 pod, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e: \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c pod. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u0441\u043b\u0430\u0431\u0430\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f.\u00a0<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c DifferenceKit. \u0412 \u043d\u0430\u0448\u0435\u043c Podfile \u0432\u0435\u0440\u0441\u0438\u044f \u0436\u0451\u0441\u0442\u043a\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0435 \u0430\u043f\u0434\u0435\u0439\u0442\u044b. \u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u043d\u0430 tag \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e\u0439.<\/p>\n<pre><code class=\"objectivec\">PODS:   - DifferenceKit (1.1.5): - DifferenceKit\/Core (= 1.1.5) - DifferenceKit\/UIKitExtension (= 1.1.5)   - DifferenceKit\/Core (1.1.5)   - DifferenceKit\/UIKitExtension (1.1.5): - DifferenceKit\/Core   - Nuke (9.5.1)   - ReactiveDataDisplayManager (7.2.1)   - SurfUtils\/ItemsScrollManager (11.0.0)  DEPENDENCIES:   - DifferenceKit (= 1.1.5)   - Nuke (from `https:\/\/github.com\/kean\/Nuke.git`, tag `9.5.1`)   - ReactiveDataDisplayManager (from `..\/`)   - SurfUtils\/ItemsScrollManager (from `https:\/\/github.com\/surfstudio\/iOS-Utils.git`, tag `11.0.0`)  SPEC REPOS:   trunk: - DifferenceKit  EXTERNAL SOURCES:   Nuke: :git: https:\/\/github.com\/kean\/Nuke.git :tag: 9.5.1   ReactiveDataDisplayManager: :path: \"..\/\"   SurfUtils: :git: https:\/\/github.com\/surfstudio\/iOS-Utils.git :tag: 11.0.0  CHECKOUT OPTIONS:   Nuke: :git: https:\/\/github.com\/kean\/Nuke.git :tag: 9.5.1   SurfUtils: :git: https:\/\/github.com\/surfstudio\/iOS-Utils.git :tag: 11.0.0  SPEC CHECKSUMS:   DifferenceKit: 516f12e336ed65a3a0665847b5c3cb5cad4bd4ea   Nuke: 2c1e5d49c9f92433c7f74a78b21292853aeda727   ReactiveDataDisplayManager: 0803ea2950bb959e47f1d7bf5d5a7bc1bb290abb   SurfUtils: ede1c5862f090d35be768a0b01d3ef447e24f54e  PODFILE CHECKSUM: dde7fa4fcb10df907a521cca9d054d4e969abba1  COCOAPODS: 1.10.2<\/code><\/pre>\n<p>Lock-\u0444\u0430\u0439\u043b \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>pod install<\/code>. \u041e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>pod update<\/code>. \u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f cocoapods, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0412\u044b\u0437\u043e\u0432 <code>pod install<\/code> \u0441 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u043e\u0439 cocoapods \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 cocoapods \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <code>.podspec<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>pod lib lint<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 tag.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 cocoapods \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>pod trunk<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439: \u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430, \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0432 Podfile. \u0417\u0430\u043b\u0438\u0432\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043b\u0438\u0448\u044c \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u0432\u0435\u0440\u0441\u0438\u0438, \u0447\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437 <a href=\"http:\/\/Readme.md\">Readme.md<\/a> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 cocoadocs.<\/p>\n<h4>Carthage<\/h4>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e cocoapods, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Swift \u0438\u043b\u0438 Objective C. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437\u043e\u0432\u043e \u2014 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.\u00a0<\/p>\n<p>\u0412 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0443\u0436\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u044f Xcode, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c. \u0422\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 carthage \u2014 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0440\u0443\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0442\u0438 \u043a \u043d\u0438\u043c \u0432 \u0448\u0430\u0433\u0430\u0445 Build Phases \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 carthage \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 <a href=\"https:\/\/habr.com\/ru\/company\/surfstudio\/blog\/590263\/\"><u>Xcodegen \u0438\u043b\u0438 Tuist<\/u><\/a>.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\">touch Cartfile<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 Cartfile<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\">carthage bootstrap<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Carfile \u0438 Cartfile.resolved<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"204\" width=\"204\">\n<p align=\"left\">carthage update<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Cartfile, \u043d\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 Cartfile.resolved<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 Carthage, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 carthage build.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 tag:<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 carthage archive.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0432\u044b \u043a \u0440\u0435\u043b\u0438\u0437\u0443.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 Xcode, \u043e\u0442\u043c\u0435\u0442\u0438\u0432 \u0432\u0435\u0440\u0441\u0438\u044e \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0430\u0440\u0445\u0438\u0432\u0430. \u0422\u043e\u0433\u0434\u0430 carthage \u043f\u043e\u0439\u043c\u0451\u0442, \u043a\u043e\u043c\u0443 \u043a\u0430\u043a\u043e\u0439 \u0430\u0440\u0445\u0438\u0432 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c.<\/p>\n<h4>Swift Package Manager<\/h4>\n<p>\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439: \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0438 \u043d\u0435 \u0437\u0430\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0438\u0439 \u0445\u0430\u0431, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441 cocoapods trunk.\u00a0<\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u2014 \u043e\u043d \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 xcworkspace \u0438 xcproject-\u0444\u0430\u0439\u043b\u0430\u0445. \u041f\u0440\u043e\u0435\u043a\u0442 \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0430\u043f\u043e\u043a, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 Package.swift.\u00a0<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/strong>\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\">swift package init<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 Package.swift \u2014 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0442\u0435\u0441\u0442\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\">swift package resolve<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Package.swift \u0438 Package.resolved<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\">swift package update<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Package.swift, \u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u0442 Package.resolved<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 Package.swift.<\/p>\n<pre><code class=\"json\">\/\/ swift-tools-version:5.2 \/\/ The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription  let package = Package( name: \"3\", platforms: [    .macOS(.v10_12), ], dependencies: [     .package(url: \"https:\/\/github.com\/Alamofire\/Alamofire.git\", .upToNextMajor(from: \"5.2.0\")) ], targets: [     \/\/ Targets are the basic building blocks of a package. A target can define a module or a test suite.     \/\/ Targets can depend on other targets in this package, and on products in packages which this package depends on.     .target(         name: \"3\",         dependencies: [\"Alamofire\"]),     .testTarget(         name: \"3Tests\",         dependencies: [\"3\"]), ] )<\/code><\/pre>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043f\u0440\u044f\u043c\u043e \u043d\u0430 Swift, \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 Xcode, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0432 \u0443\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435. <code>UpToNextMajor<\/code> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0441\u0430\u043c\u043e \u0437\u0430 \u0441\u0435\u0431\u044f: \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u043c \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0435 \u0430\u043f\u0434\u0435\u0439\u0442\u044b, \u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0436\u043e\u0440\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 (\u042d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 <code>~><\/code> \u0438\u0437 cocoapods). \u041a\u0430\u043a \u0438 \u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u2014 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<pre><code class=\"json\">{   \"object\": { \"pins\": [   {     \"package\": \"Alamofire\",     \"repositoryURL\": \"https:\/\/github.com\/Alamofire\/Alamofire.git\",     \"state\": {       \"branch\": null,       \"revision\": \"becd9a729a37bdbef5bc39dc3c702b99f9e3d046\",       \"version\": \"5.2.2\"     }   } ]   },   \"version\": 1 }<\/code><\/pre>\n<p>Lock-\u0444\u0430\u0439\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043d\u0451\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0445\u044d\u0448 \u043a\u043e\u043c\u043c\u0438\u0442\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0432 Package.swift \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0447\u0435\u0440\u0435\u0437 SwiftPM \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c Package.swift \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0438 \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 tag.<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<p>\u0423\u0441\u043b\u043e\u0432\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0439 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2cd\/00d\/b01\/2cd00db01821e6138d08e60bca0a6a6b.png\" width=\"998\" height=\"748\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2cd\/00d\/b01\/2cd00db01821e6138d08e60bca0a6a6b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 lock-\u0444\u0430\u0439\u043b\u0430.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1d1\/858\/1fa\/1d18581fa5b48113f5fe3ec9bc721cf0.png\" width=\"260\" height=\"535\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1d1\/858\/1fa\/1d18581fa5b48113f5fe3ec9bc721cf0.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0430\u044f \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0437\u0432\u0435\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439. \u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432\u0435\u0440\u0441\u0438\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043e\u0442 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u0434\u0443\u0448\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>\u041d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u0432 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438, \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c opensource-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0443\u0442\u0438\u043b\u0438\u0442 \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0439\u0442\u0435 \u0438\u0445. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0431\u0443\u0434\u044c\u0442\u0435 \u043d\u0430 \u0432\u043e\u043b\u043d\u0435 ?\u200d\u2642\ufe0f.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \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\/surfstudio\/blog\/671862\/\"> https:\/\/habr.com\/ru\/company\/surfstudio\/blog\/671862\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u041d\u043e \u0432\u0430\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041a\u0430\u043a \u043d\u0435 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0430\u0434 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439? \u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432?<\/p>\n<p>\u042f \u2014 <a href=\"https:\/\/github.com\/NullIsOne\">\u041d\u0438\u043a\u0438\u0442\u0430 \u041a\u043e\u0440\u043e\u0431\u0435\u0439\u043d\u0438\u043a\u043e\u0432<\/a>, iOS Team Lead \u0432 Surf. \u041f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0435 \u043e\u0434\u0438\u043d \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0441 \u0432\u0430\u043c\u0438 \u043e\u043f\u044b\u0442\u043e\u043c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<h3>\u041a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0430 \u2014 \u043e\u0442\u0441\u0442\u043e\u0439<\/h3>\n<p>\u0414\u0443\u043c\u0430\u044e, \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u00ab\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c-\u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c\u00bb, \u0438\u043b\u0438 \u00abcopy-paste\u00bb. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u043e\u0439, \u043d\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\u00a0<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0447\u0442\u043e-\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043e\u0442\u043a\u0443\u0434\u0430. \u041a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0434\u0438\u0441\u043b\u043e\u043a\u0430\u0446\u0438\u0438. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u0434, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0432 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0431\u043e\u0440\u043e\u0434\u0430\u0442\u044b\u0435 \u0433\u043e\u0434\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u0430\u0436\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435.\u00a0<\/p>\n<p>\u0421\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u0435 \u043d\u0443\u0436\u0434\u044b: \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041b\u044e\u0431\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0442 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0435\u0449\u0451 \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0433\u0434\u0435 \u0436\u0435 \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443.<\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>\u043d\u0435 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438,<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u044f\u0432\u043d\u043e\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u043a\u043e\u0434.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c <strong>\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438, \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f (\u043e\u0431\u044b\u0447\u043d\u043e \u2014 \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439) \u0441 \u044f\u0432\u043d\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<\/p>\n<h3>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u0435\u0437 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u2014 \u0442\u043e\u0436\u0435 \u043e\u0442\u0441\u0442\u043e\u0439<\/h3>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0435\u0440\u0435\u0448\u043b\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u041f\u0435\u0442\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u0443\u043f\u0435\u0440\u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.0 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0443\u043f\u0435\u0440\u0444\u0438\u0447\u0438, \u043d\u043e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0443\u043f\u0435\u0440\u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043d\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b.\u00a0<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0412\u0430\u0441\u044f \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u041f\u0435\u0442\u0438, \u043d\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0441\u0443\u043f\u0435\u0440\u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0443\u0441\u043f\u0435\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 1.0.1. \u0418\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 opensource-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0443\u0442\u0438\u043b\u0438\u0442\u044b.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0435\u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 <strong>\u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c<\/strong>. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u0448\u044c, \u0441\u043e\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u043d\u0430 CI (continuous integration) \u0438 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0443 \u043d\u043e\u0432\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>\u0441\u043b\u0430\u0431\u0430\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0436\u0451\u0441\u0442\u043a\u0430\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u043b\u0430\u0431\u0430\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b. \u0416\u0451\u0441\u0442\u043a\u0430\u044f \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043b\u044e\u0431\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0434\u043a\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043c\u0438\u043d\u043e\u0440\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u043e\u043c\u0430\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0443, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u043c\u0438. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0432 \u043d\u0430\u0448\u0435 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u043b\u0443\u0447\u0430\u0438 <a href=\"https:\/\/habr.com\/ru\/news\/t\/656205\/\">\u0434\u0438\u0432\u0435\u0440\u0441\u0438\u0439 \u0432 opensource-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445<\/a>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0436\u0451\u0441\u0442\u043a\u0443\u044e \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044e.<\/p>\n<h3>\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e: \u0441\u043b\u0430\u0431\u043e \u0438\u043b\u0438 \u0436\u0451\u0441\u0442\u043a\u043e?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443?<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0451\u0434, \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0443 \u0432\u0441\u0435\u0445 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0439. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043f\u043e\u0445\u043e\u0436\u0438. \u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043e\u0431\u0449\u0438\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.<\/p>\n<h3>RubyGems<\/h3>\n<p>\u0425\u0430\u0431 \u0434\u043b\u044f \u0443\u0442\u0438\u043b\u0438\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Ruby. \u0423\u0442\u0438\u043b\u0438\u0442\u044b \u0437\u0434\u0435\u0441\u044c \u0437\u043e\u0432\u0443\u0442\u0441\u044f \u0433\u0435\u043c\u0430\u043c\u0438 (gems).<\/p>\n<p>\u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0433\u0435\u043c\u043e\u043c <strong>bundler<\/strong>. \u042d\u0442\u043e\u0442 \u0433\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 Gemfile \u0438 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0444\u0430\u0439\u043b Gemfile.lock, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0438 \u0435\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.\u00a0<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e lock-\u0444\u0430\u0439\u043b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0433\u0435\u043c\u043e\u043c, \u0438 \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e: \u0438\u043d\u0430\u0447\u0435 \u0445\u044d\u0448-\u0441\u0443\u043c\u043c\u044b \u0444\u0430\u0439\u043b\u0430 \u0438\u0441\u043f\u043e\u0440\u0442\u044f\u0442\u0441\u044f \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u0430. \u0412\u044b\u0445\u043e\u0434\u043e\u043c \u0438\u0437 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 lock-\u0444\u0430\u0439\u043b\u0430 \u0438 \u043d\u043e\u0432\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043b\u0438\u0431\u043e \u043e\u0442\u043a\u0430\u0442 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0439 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"197\" width=\"197\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/strong>\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"197\" width=\"197\">\n<p align=\"left\">bundle init<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 Gemfile<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"197\" width=\"197\">\n<p align=\"left\">bundle install<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Gemfile \u0438 Gemfile.lock<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"197\" width=\"197\">\n<p align=\"left\">bundle update<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Gemfile, \u043d\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 Gemfile.lock<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 Gemfile.<\/p>\n<pre><code class=\"ruby\">source \"https:\/\/rubygems.org\"  # Ensure github repositories are fetched using HTTPS git_source(:github) do |repo_name|   repo_name = \"#{repo_name}\/#{repo_name}\" unless repo_name.include?(\"\/\") #  puts(repo_name)   \"https:\/\/github.com\/#{repo_name}.git\" end if Gem::Version.new(Bundler::VERSION) &lt; Gem::Version.new('2')  gem \"fastlane\", \"~> 2.199.0\" gem 'cocoapods', \"~> 1.11.2\" gem 'synx', \"~> 0.2.1\" gem 'xcpretty', \"~> 0.3.0\"  gem 'generamba', github: 'surfstudio\/Generamba', branch: 'danger-compatible'  \u2026  plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') eval_gemfile(plugins_path) if File.exist?(plugins_path)<\/code><\/pre>\n<p>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>~><\/code> \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438: \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0441\u043b\u0430\u0431\u0430\u044f. Gem generamba \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0444\u043e\u0440\u043a\u0435 \u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435, \u043d\u043e \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0430\u0431\u043e\u0439 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0435\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0438\u0442 \u043d\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d. \u0425\u043e\u0442\u044f \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0438\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e: \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c <code>commit: '12345'<\/code>, \u0433\u0434\u0435 \u0432\u043c\u0435\u0441\u0442\u043e 12345 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0445\u044d\u0448 \u043a\u043e\u043c\u043c\u0438\u0442\u0430.<\/p>\n<pre><code class=\"ruby\">GIT   remote: https:\/\/github.com\/surfstudio\/Generamba.git   revision: 5de6003e3fa74bb39df50a2e592682439889d818   branch: danger-compatible   specs: generamba (1.4.1)   cocoapods-core (>= 1.4.0, &lt; 2.0.0)   git (~> 1.7)   liquid (= 4.0.0)   terminal-table (= 1.4.5)   thor (= 0.19.1)   xcodeproj (>= 1.5.0, &lt; 2.0.0)  GEM   remote: https:\/\/rubygems.org\/   specs: CFPropertyList (3.0.5)   rexml activesupport (6.1.5)   concurrent-ruby (~> 1.0, >= 1.0.2)   i18n (>= 1.6, &lt; 2)   minitest (>= 5.1)   \u2026  PLATFORMS   x86_64-darwin-19  DEPENDENCIES   cocoapods (~> 1.11.2)   danger (~> 8.5.0)   danger-duplicate_localizable_strings (~> 0.3.0)   danger-swiftlint (~> 0.29.4)   danger-the_coding_love (~> 0.0.9)   danger-xcode_summary (~> 1.0.1)   danger-xcodebuild (~> 0.0.6)   fastlane (~> 2.199.0)   fastlane-plugin-firebase_app_distribution   fastlane-plugin-git_tags   fastlane-plugin-versioning   generamba!   synx (~> 0.2.1)   xcpretty (~> 0.3.0)   xcpretty-json-formatter (~> 0.1.1)  BUNDLED WITH    2.2.5<\/code><\/pre>\n<p>Lock-\u0444\u0430\u0439\u043b \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e bundle install. \u0412 \u043d\u0435\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0443\u0436\u043d\u044b\u0445 \u0433\u0435\u043c\u043e\u0432 \u0438 \u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c bundle install \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d lock-\u0444\u0430\u0439\u043b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u0436\u0435\u0441\u0442\u043a\u043e. \u041b\u0438\u0448\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 bundle update \u0438\u0437\u043c\u0435\u043d\u0438\u0442 lock-\u0444\u0430\u0439\u043b.\u00a0<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f ruby-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u2014 \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0433\u043e <code>my-script.rb<\/code> \u2014 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>.gemspec<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 tag.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430 <a href=\"http:\/\/RubyGems.org\">RubyGems.org<\/a> \u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>gem push<\/code>,<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u0430 \u043e\u043f\u0446\u0438\u044f \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0443\u0434\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043a\u0440\u0443\u0433\u043b\u043e\u0441\u0443\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<h3>Homebrew\u00a0<\/h3>\n<p>\u0425\u0430\u0431 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f macOS \u0438 Linux. \u042f\u0437\u044b\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043d\u0435 \u0432\u0430\u0436\u0435\u043d.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0438 \u00ab\u0440\u0430\u0441\u0444\u0430\u0441\u043e\u0432\u0430\u043d\u0430 \u043f\u043e \u0431\u0443\u0442\u044b\u043b\u043a\u0430\u043c\u00bb. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0448\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c \u0441 \u043a\u0440\u0430\u0444\u0442\u043e\u0432\u043e\u0439 \u043f\u0438\u0432\u043e\u0432\u0430\u0440\u043d\u0435\u0439 \u2014\u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043b\u043e\u0433\u043e\u0442\u0438\u043f\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b.<\/p>\n<p>\u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb. \u0412 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u2014 <code>Brewfile<\/code> \u0438 <code>Brewfile.lock.json<\/code>. \u0423\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u043a\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u043e\u0439 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438, \u0430 \u043a\u0430\u043a\u043e\u0439 \u2014 \u0434\u043b\u044f \u0436\u0451\u0441\u0442\u043a\u043e\u0439? \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e: <code>Brewfile.lock.json<\/code>, \u043a\u0430\u043a \u0438 \u0432 RubyGems, \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"262\" width=\"262\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"262\" width=\"262\">\n<p align=\"left\">touch Cartfile<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 Brewfile<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"262\" width=\"262\">\n<p align=\"left\">brew bundle \u2014no-upgrade<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432 Brewfile \u0438 Brewfile.lock.json<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"262\" width=\"262\">\n<p align=\"left\">brew bundle \u2014force<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432 Brewfile, \u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u0442 Brewfile.lock.json<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<pre><code class=\"json\"># 'brew tap' tap \"homebrew\/cask\" # 'brew tap' with custom Git URL tap \"yonaskolb\/XcodeGen\", \"https:\/\/github.com\/yonaskolb\/XcodeGen.git\" tap \"krzysztofzablocki\/Sourcery\", \"https:\/\/github.com\/krzysztofzablocki\/Sourcery.git\"  # 'brew install' brew \"xcodegen\" brew \"sourcery\"<\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Gemfile \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0442\u0438\u043b\u0438\u0442 \u0432 Brewfile \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u043e\u0439 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438.<br \/>\u041c\u043e\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430.<\/p>\n<pre><code class=\"json\">{   \"entries\": { \"tap\": {   \"homebrew\/cask\": {     \"revision\": \"647192becc3e9389d7f217ea45779b317d106172\"   },   \"yonaskolb\/xcodegen\": {     \"revision\": \"29bcb9259136f04781ef5d736471f01357e43b04\",     \"options\": {       \"clone_target\": \"https:\/\/github.com\/yonaskolb\/XcodeGen.git\"     }   },   \"krzysztofzablocki\/sourcery\": {     \"revision\": \"d64c263e0b112d1a3a21fbd3cf8128507e1382d4\",     \"options\": {       \"clone_target\": \"https:\/\/github.com\/krzysztofzablocki\/Sourcery.git\"     }   } }, \"brew\": {   \"xcodegen\": {     \"version\": \"2.29.0\",     \"bottle\": {       \"rebuild\": 0,       \"root_url\": \"https:\/\/ghcr.io\/v2\/homebrew\/core\",       \"files\": {         \"arm64_monterey\": {           \"cellar\": \":any_skip_relocation\",           \"url\": \"https:\/\/ghcr.io\/v2\/homebrew\/core\/xcodegen\/blobs\/sha256:f76deffe6ad019b5004774c27175af44d1e2a17f2bb932e3053c43338f4dc9e2\",           \"sha256\": \"f76deffe6ad019b5004774c27175af44d1e2a17f2bb932e3053c43338f4dc9e2\"         },             \u2026         \"monterey\": {           \"cellar\": \":any_skip_relocation\",           \"url\": \"https:\/\/ghcr.io\/v2\/homebrew\/core\/xcodegen\/blobs\/sha256:b1aeb953a94bd3bf0e32365c9f7eb52e75d4340f2ff2e2298ae6a822f87b12b7\",           \"sha256\": \"b1aeb953a94bd3bf0e32365c9f7eb52e75d4340f2ff2e2298ae6a822f87b12b7\"         },             \u2026   },   \"system\": { \"macos\": {   \"monterey\": {     \"HOMEBREW_VERSION\": \"3.4.11-102-gef0d5fc\",     \"HOMEBREW_PREFIX\": \"\/usr\/local\",     \"Homebrew\/homebrew-core\": \"703ab164573ff9da5637fbf810b5a1b873832c4c\",     \"CLT\": \"\",     \"Xcode\": \"13.3.1\",     \"macOS\": \"12.3.1\"   } }   } }<\/code><\/pre>\n<p>Lock-\u0444\u0430\u0439\u043b \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043b\u0430\u0431\u043e. \u0424\u043b\u0430\u0433 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>\u2014no-upgrade<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044e \u043a \u0441\u0438\u043b\u044c\u043d\u043e\u0439, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0430\u043d\u0430\u0446\u0435\u044f: \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f Xcode \u0438\u043b\u0438 MacOS lock-\u0444\u0430\u0439\u043b \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0441\u044f.<\/p>\n<h3>Cocoapods<\/h3>\n<p>\u042d\u0442\u043e gem, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Swift \u0438\u043b\u0438 Objective C.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-334659","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334659","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=334659"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334659\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=334659"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=334659"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=334659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}