{"id":299551,"date":"2020-03-02T15:00:21","date_gmt":"2020-03-02T15:00:21","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=299551"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=299551","title":{"rendered":"\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/plarium\/blog\/490698\/\">\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f iOS, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u0441\u044f \u0443 \u0441\u0442\u0443\u0434\u0438\u0438 Plarium Krasnodar \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 CI\/CD.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ls\/eq\/j8\/lseqj8pl9g9h1yrdm-h-ekpzuno.jpeg\"><a name=\"habracut\"><\/a><\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Apple, \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0441\u043f\u043e\u0440\u043d\u043e\u0435 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u044e\u0434\u0443: \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043c\u0435\u043d\u044e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>  \u0421\u0442\u0430\u0442\u0435\u0439 \u043e\u0431 \u00ab\u0430\u0437\u0430\u0445\u00bb \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432 \u0441\u0435\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u043e\u0435. \u0412\u043e\u0442 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.apple.com\/account\">\u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/a>;<\/li>\n<li>\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u0431\u0430\u0437\u0435 macOS, \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0435\u0435 \u0432 \u0440\u043e\u043b\u0438 \u0431\u0438\u043b\u0434-\u0441\u0435\u0440\u0432\u0435\u0440\u0430;<\/li>\n<li>\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <a href=\"https:\/\/developer.apple.com\/account\/resources\/certificates\/list\">\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043b\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f;<\/li>\n<li>\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c <a href=\"https:\/\/developer.apple.com\/account\/resources\/identifiers\/list\">ID<\/a> (\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c Bundle Identifier, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 wildcard ID \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: Associated Domains, Push Notifications, Apple Sign In \u0438 \u043f\u0440\u043e\u0447\u0438\u0445);<\/li>\n<li><a href=\"https:\/\/developer.apple.com\/account\/resources\/profiles\/list\">\u043f\u0440\u043e\u0444\u0438\u043b\u044c<\/a> \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/li>\n<\/ul>\n<p>  \u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 Keychain \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 macOS. \u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0440\u0435\u0434\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (Dev, QA, Staging, Production) \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f (Development \u0438\u043b\u0438 Distribution), \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 \u0442\u0438\u043f \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439:<\/p>\n<ul>\n<li>Development \u2014 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Development-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 (\u0438\u043c\u044f \u0432\u0438\u0434\u0430 iPhone Developer: XXXXX);<\/li>\n<li>Ad Hoc \u2014 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 QA-\u043e\u0442\u0434\u0435\u043b\u043e\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Distribution-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 (\u0438\u043c\u044f \u0432\u0438\u0434\u0430 iPhone Distribution: XXXXX);<\/li>\n<li>App Store \u2014 \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0439 \u0431\u0438\u043b\u0434 \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 TestFlight \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 App Store, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Distribution-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 Development \u0438 Ad Hoc \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/developer.apple.com\/account\/resources\/devices\/list\">\u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432<\/a>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0438\u043b\u0434, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0412 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 App Store \u043d\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u043c \u0431\u0435\u0442\u0430-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f TestFlight, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0438 \u043d\u0438\u0436\u0435. \u0422\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0438 \u043e\u0442\u043a\u0443\u0434\u0430 \u0438\u0445 \u0431\u0440\u0430\u0442\u044c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qd\/dt\/u9\/qddtu9hfklorm9kmotcctpr-hoc.jpeg\"><\/p>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0438 \u0441\u0440\u0435\u0434\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0432\u0438\u0434\u0430 <code>${ProjectName}_${Instance}<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 + \u0438\u043d\u0441\u0442\u0430\u043d\u0441 (\u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u0440\u0435\u0434\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f: Dev, QA, GD, Staging, Live \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435).<\/p>\n<p>  \u041f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u043d\u0430 \u0431\u0438\u043b\u0434-\u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 <code>\/Users\/$Username\/Library\/MobileDevice\/Provisioning Profiles<\/code> (\u0433\u0434\u0435 <code>$Username<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043c\u0435\u043d\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u0438\u043b\u0434-\u0441\u0435\u0440\u0432\u0435\u0440\u0430).<\/p>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 *.ipa \u2014 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 (PackageApplication) \u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 (\u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 XcAchive \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442). \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 8.3 \u043c\u043e\u0434\u0443\u043b\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 app-\u0444\u0430\u0439\u043b\u0430 \u0443\u0431\u0440\u0430\u043d \u0438\u0437 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Xcode. \u0414\u043b\u044f \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0434\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e Xcode (\u0432\u0435\u0440\u0441\u0438\u0438 8.2 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445) \u0432 \u043f\u0430\u043f\u043a\u0443:<br \/>  <code>\/Applications\/Xcode.app\/Contents\/Developer\/Platforms\/iPhoneOS.platform\/Developer\/usr\/bin\/ <\/code><\/p>\n<p>  \u0418 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">chmod +x \/Applications\/Xcode.app\/Contents\/Developer\/Platforms\/iPhoneOS.platform\/Developer\/usr\/bin\/*<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c *.app-\u0444\u0430\u0439\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">xcodebuild \\ -workspace $ProjectDir\/$ProjectName.xcworkspace \\ -scheme $SchemeName \\ -sdk iphoneos \\ build \\ -configuration Release \\ -derivedDataPath build \\ CODE_SIGN_IDENTITY=\u201d$DevAccName\u201d\\ PROVISIONING_PROFILE=\u201d$ProfileId\u201d DEPLOYMENT_POSTPROCESSING=YES \\ SKIP_INSTALL=YES \\ ENABLE_BITCODE=NO <\/code><\/pre>\n<p>  \u0413\u0434\u0435:<\/p>\n<p>  <code>-workspace<\/code> \u2014 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  <code>-scheme<\/code> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0441\u0445\u0435\u043c\u0430, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435.<\/p>\n<p>  <code>-derivedDataPath<\/code> \u2014 \u043f\u0443\u0442\u044c \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (*.app).<\/p>\n<p>  <code>CODE_SIGN_IDENTITY<\/code> \u2014 \u0438\u043c\u044f \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432 Keychain (iPhone Developer: XXXX XXXXXXX, \u0431\u0435\u0437 TeamID \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pm\/lk\/fe\/pmlkfeglfyjjkdndrmzvtzr8bsu.jpeg\"><\/p>\n<p>  <code>PROVISIONING_PROFILE<\/code> \u2014 ID \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">cd &quot;\/Users\/$Username\/Library\/MobileDevice\/Provisioning Profiles\/&quot; &amp;&amp; find *.mobileprovision -type f | xargs grep -li &quot;&gt;${ProjectName}_${Instance}&lt;&quot; | sed -e 's\/.mobileprovision\/\/'<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f Push Notifications), \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e <code>PROVISIONING_PROFILE<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c:<\/p>\n<pre><code class=\"bash\">APP_PROFILE=\u201d$AppProfile\u201d \\ EXTENSION_PROFILE=\u201d$ExtProfile\u201d \\<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b *.app \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432 *.ipa. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"bash\">\/usr\/bin\/xcrun --sdk iphoneos PackageApplication \\ -v $(find &quot;$ProjectDir\/build\/Build\/Products\/Release-iphoneos&quot; -name &quot;*.app&quot;) \\ -o &quot;$ProjectDir\/$ProjectName_$Instance.ipa&quot;<\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f Apple. \u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 *.ipa \u043f\u0443\u0442\u0435\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0430\u0440\u0445\u0438\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">xcodebuild \\ -workspace $ProjectDir\/$ProjectName.xcworkspace \\ -scheme $SchemeName \\ -sdk iphoneos \\ -configuration Release \\ archive \\ -archivePath $ProjectDir\/build\/$ProjectName.xcarchive \\ CODE_SIGN_IDENTITY=\u201d$DevAccName\u201d \\ PROVISIONING_PROFILE=\u201d$ProfileId\u201d ENABLE_BITCODE=NO \\ SYNCHRONOUS_SYMBOL_PROCESSING=FALSE<\/code><\/pre>\n<p>  \u041e\u0442\u043b\u0438\u0447\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043e\u043f\u0446\u0438\u0438 <code>SYNCHRONOUS_SYMBOL_PROCESSING<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430:<\/p>\n<pre><code class=\"bash\">ExportSettings=&quot;$ProjectDir\/exportOptions.plist&quot;  cat &lt;&lt; EOF &gt; $ExportSettings &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;!DOCTYPE plist PUBLIC &quot;-\/\/Apple\/\/DTD PLIST 1.0\/\/EN&quot; &quot;http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd&quot;&gt; &lt;plist version=&quot;1.0&quot;&gt; &lt;dict&gt; &lt;key&gt;compileBitcode&lt;\/key&gt; &lt;false\/&gt; &lt;key&gt;uploadBitcode&lt;\/key&gt; &lt;false\/&gt; &lt;key&gt;uploadSymbols&lt;\/key&gt; &lt;false\/&gt; &lt;key&gt;method&lt;\/key&gt; &lt;string&gt;$Method&lt;\/string&gt; &lt;key&gt;provisioningProfiles&lt;\/key&gt; &lt;dict&gt; &lt;key&gt;$BundleID&lt;\/key&gt; &lt;string&gt;$ProfileId&lt;\/string&gt; &lt;\/dict&gt; &lt;key&gt;signingCertificate&lt;\/key&gt; &lt;string&gt;$DevAccName&lt;\/string&gt; &lt;key&gt;signingStyle&lt;\/key&gt; &lt;string&gt;manual&lt;\/string&gt; &lt;key&gt;stripSwiftSymbols&lt;\/key&gt; &lt;true\/&gt; &lt;key&gt;teamID&lt;\/key&gt; &lt;string&gt;$TeamID&lt;\/string&gt; &lt;key&gt;thinning&lt;\/key&gt; &lt;string&gt;&lt;none&gt;&lt;\/string&gt; &lt;\/dict&gt; &lt;\/plist&gt; EOF <\/code><\/pre>\n<p>  \u0413\u0434\u0435:<\/p>\n<p>  <code>$Method<\/code> \u2014 \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0438\u043f\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f Development \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 development, \u0434\u043b\u044f Ad Hoc \u2014 ad-hoc, \u0430 \u0434\u043b\u044f App Store \u2014 app-store.<\/p>\n<p>  <code>$BundleID<\/code> \u2014 ID \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: <\/p>\n<pre><code class=\"bash\">defaults read $ProjectDir\/Info CFBundleIdentifier<\/code><\/pre>\n<p>  <code>$DevAccName \u0438 $ProfileId<\/code> \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043c\u0435\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 ID \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u043d\u0435\u0435 \u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.<\/p>\n<p>  <code>$TeamID<\/code> \u2014 \u0434\u0435\u0441\u044f\u0442\u0438\u0437\u043d\u0430\u0447\u043d\u044b\u0439 ID \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u0435\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043f\u0440\u0438\u043c\u0435\u0440: iPhone Developer: \u2026\u2026 (XXXXXXXXXX); \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432 Keychain.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u0430\u0439\u043b *.ipa:<\/p>\n<pre><code class=\"bash\">xcodebuild \\ -exportArchive \\ -archivePath $ProjectDir\/build\/$ProjectName.xcarchive \\ -exportPath $ProjectDir \\ -exportOptionsPlist $ExportSettings<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, \u0442\u043e \u0435\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u0438\u043b\u0434\u043e\u0432 Development \u0438 Ad Hoc \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 HockeyApp, AppBlade \u0438 \u043f\u0440\u043e\u0447\u0438\u0445, \u043e\u0434\u043d\u0430\u043a\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0430\u0447\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f iOS \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432 2 \u044d\u0442\u0430\u043f\u0430:<\/p>\n<ol>\n<li>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Items Service.<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 *.ipa \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0432 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0435, \u0447\u0435\u0440\u0435\u0437 HTTPS.<\/li>\n<\/ol>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u043c \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (\u0442\u0438\u043f \u0444\u0430\u0439\u043b\u0430 *.plist) \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt; EOF &gt; $manifest &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;!DOCTYPE plist PUBLIC &quot;-\/\/Apple\/\/DTD PLIST 1.0\/\/EN&quot; &quot;http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd&quot;&gt; &lt;plist version=&quot;1.0&quot;&gt; &lt;dict&gt; &lt;key&gt;items&lt;\/key&gt; &lt;array&gt; &lt;dict&gt; &lt;key&gt;assets&lt;\/key&gt; &lt;array&gt; &lt;dict&gt; &lt;key&gt;kind&lt;\/key&gt; &lt;string&gt;software-package&lt;\/string&gt; &lt;key&gt;url&lt;\/key&gt; &lt;string&gt;$ipaUrl&lt;\/string&gt; &lt;\/dict&gt; &lt;\/array&gt; &lt;key&gt;metadata&lt;\/key&gt; &lt;dict&gt; &lt;key&gt;bundle-identifier&lt;\/key&gt; &lt;string&gt;$BundleID&lt;\/string&gt; &lt;key&gt;bundle-version&lt;\/key&gt; &lt;string&gt;$AppVersion&lt;\/string&gt; &lt;key&gt;kind&lt;\/key&gt; &lt;string&gt;software&lt;\/string&gt; &lt;key&gt;title&lt;\/key&gt; &lt;string&gt;$ProjectName_$Instance&lt;\/string&gt; &lt;key&gt;subtitle&lt;\/key&gt; &lt;string&gt;$Instance&lt;\/string&gt; &lt;\/dict&gt; &lt;\/dict&gt; &lt;\/array&gt; &lt;\/dict&gt; &lt;\/plist&gt; EOF<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0412\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (<code>$AppVersion<\/code>) \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">defaults read $ProjectDir\/Info CFBundleVersion<\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>$ipaUrl<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u044f\u043c\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 *.ipa. \u0421 \u0441\u0435\u0434\u044c\u043c\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0447\u0435\u0440\u0435\u0437 HTTPS. \u0412 \u0432\u043e\u0441\u044c\u043c\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430: \u0431\u044b\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0431\u043b\u043e\u043a\u0438 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0438\u043a\u043e\u043d\u043e\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0430<\/p>\n<pre><code class=\"bash\">&lt;images&gt;    &lt;image&gt;...&lt;\/image&gt; &lt;\/images&gt;<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 html-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"bash\">itms-services:\/\/?action=download-manifest&amp;url=https:\/\/$ServerUrl\/$ProjectName\/$Instance\/iOS\/$AppVersion\/manifest.plist<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043d\u0443\u0436\u0434 \u043e\u0442\u0434\u0435\u043b\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Plarium \u0441\u043e\u0437\u0434\u0430\u043b\u0430 \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0438\u043b\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0430\u0435\u0442 \u043d\u0430\u043c:<\/p>\n<ul>\n<li>\u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c,<\/li>\n<li>\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 \u00ab\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u00bb, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438,<\/li>\n<li>\u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b (\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435).<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e \u043f\u0440\u0435\u0434\u0440\u0435\u043b\u0438\u0437\u043d\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/appstoreconnect.apple.com\/WebObjects\/iTunesConnect.woa\/ra\/ng\/app\">TestFlight<\/a>.<\/p>\n<p>  \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0438\u043f \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 App Store \u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 API-\u043a\u043b\u044e\u0447\u0435\u0439.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\u0447\u0435\u0440\u0435\u0437 Xcode (Organizer),<\/li>\n<li>\u0447\u0435\u0440\u0435\u0437 altool,<\/li>\n<li>\u0447\u0435\u0440\u0435\u0437 Application Loader \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Xcode (\u0442\u0435\u043f\u0435\u0440\u044c Transporter).<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f altool, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>App-Specific Password,<\/li>\n<li>API Key.<\/li>\n<\/ul>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e API Key.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f API Key \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043f\u043e <a href=\"https:\/\/appstoreconnect.apple.com\/access\/api\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a> \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u044e\u0447. \u041a\u0440\u043e\u043c\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 *.p8, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: IssuerID \u0438 KeyID.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/7j\/el\/tr\/7jeltrm88wb-m74uokirbdw59xs.jpeg\"><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430 \u0431\u0438\u043b\u0434-\u0441\u0435\u0440\u0432\u0435\u0440:<\/p>\n<pre><code class=\"bash\">mkdir -p ~\/.appstoreconnect\/private_keys mv ~\/Downloads\/AuthKey_${KeyID}.p8 ~\/.appstoreconnect\/private_keys\/<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 TestFlight \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">xcrun altool \\ --validate-app \\ -t ios \\ -f $(find &quot;$ProjectDir&quot; -name &quot;*.ipa&quot;) \\ --apiKey \u201c$KeyID\u201d \\ --apiIssuer \u201c$IssuerID\u201d <\/code><\/pre>\n<p>  \u0413\u0434\u0435 <code>apiKey<\/code> \u0438 <code>apiIssuer<\/code> \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 API-\u043a\u043b\u044e\u0447\u0430.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>--upload-app<\/code> c \u0442\u0435\u043c\u0438 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p>  \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e Apple \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e-\u0434\u0432\u0443\u0445 \u0434\u043d\u0435\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c: \u0438\u043c \u043f\u0440\u0438\u0448\u043b\u044e\u0442 \u043d\u0430 \u043f\u043e\u0447\u0442\u0443 \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 altool \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 App-Specific Password.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f App-Specific Password \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e <a href=\"https:\/\/appleid.apple.com\/account\/manage\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a> \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 Security.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/k6\/3k\/lk\/k63klknhpg0dtwoukakdzmn02om.jpeg\"><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 Keychain \u0437\u0430\u043f\u0438\u0441\u044c \u0431\u0438\u043b\u0434-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u044d\u0442\u0438\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c. \u0421 11 \u0432\u0435\u0440\u0441\u0438\u0438 Xcode \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">xcrun altool --store-password-in-keychain-item &quot;Altool&quot; -u &quot;$DeveloperName&quot; -p $AppPswd<\/code><\/pre>\n<p>  \u0413\u0434\u0435:<\/p>\n<p>  <code>$DeveloperName<\/code> \u2014 \u0438\u043c\u044f \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043d\u0430 \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u044b Apple.<\/p>\n<p>  <code>$AppPswd<\/code> \u2014 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 App-Specific Password.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 asc-provider \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0430\u0440\u043e\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">xcrun altool --list-providers -u &quot;$DeveloperName&quot; -p &quot;@keychain:Altool&quot;<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434:<\/p>\n<pre><code class=\"bash\">Provider listing: - Long Name - - Short Name - XXXXXXX        XXXXXXXXX<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0438\u0441\u043a\u043e\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Short Name (asc-provider) \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c $TeamID, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 TestFlight \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443: <\/p>\n<pre><code class=\"bash\">xcrun altool \\ --(validate|upload)-app \\   -f $(find &quot;$ProjectDir&quot; -name &quot;*.ipa&quot;) \\ -u &quot;$DeveloperName&quot; \\ -p &quot;@keychain:Altool&quot; \\<\/code><\/pre>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>-p<\/code> \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>$AppPswd<\/code> \u0432 \u043d\u0435\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c (\u044f\u0432\u043d\u043e\u043c) \u0432\u0438\u0434\u0435.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 altool \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c API Key, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Xcode \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b (\u00ab\u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u00bb Keychain, \u043e\u0448\u0438\u0431\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435).<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0441\u0435. \u0416\u0435\u043b\u0430\u044e \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u0447\u0430\u0441\u0442\u043d\u044b\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a \u0438 \u0431\u0435\u0441\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0432 App Store.<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/plarium\/blog\/490698\/\"> https:\/\/habr.com\/ru\/company\/plarium\/blog\/490698\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/plarium\/blog\/490698\/\">\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f iOS, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u0441\u044f \u0443 \u0441\u0442\u0443\u0434\u0438\u0438 Plarium Krasnodar \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 CI\/CD.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ls\/eq\/j8\/lseqj8pl9g9h1yrdm-h-ekpzuno.jpeg\"><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-299551","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/299551","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=299551"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/299551\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=299551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=299551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=299551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}