{"version":"https:\/\/jsonfeed.org\/version\/1","title":"Just Developer Blog","home_page_url":"http:\/\/bibobo.ru\/","feed_url":"http:\/\/bibobo.ru\/rss\/","icon":false,"author":{"name":"\u0415\u0432\u0433\u0435\u043d\u0438\u0439 \u0418\u0432\u043e\u043d (Evgeniy Ivon)","url":"http:\/\/bibobo.ru\/","avatar":false},"items":[{"id":"35","url":"http:\/\/bibobo.ru\/all\/trivia-quiz-app-got-noticed\/","title":"Trivia Quiz App Got Noticed","content_html":"<p>Finally, after almost 2 years in\u00a0AppStore my app Trivia Quiz Classic got noticed by\u00a0one of\u00a0the\u00a0bloggers. Here is the\u00a0article he wrote \u00abUnderrated Games To\u00a0Tryout in\u00a0December 2020\u00bb and\u00a0Trivia Quiz is one of\u00a0these apps.<br \/>\nPlease take a\u00a0look at\u00a0the\u00a0article:\u00a0<a href=\"https:\/\/gameskeys.net\/underrated-games-to-tryout-in-december-2020\">https:\/\/gameskeys.net\/underrated-games-to-tryout-in-december-2020<\/a><\/p>\n","date_published":"2020-12-07T22:18:38+03:00","date_modified":"2020-12-07T22:18:23+03:00","_date_published_rfc2822":"Mon, 07 Dec 2020 22:18:38 +0300","_rss_guid_is_permalink":"false","_rss_guid":"35","_e2_data":{"is_favourite":false,"links_required":[],"og_images":[]}},{"id":"34","url":"http:\/\/bibobo.ru\/all\/zapusk-konsolnyh-utilit-iz-skripta-na-swift\/","title":"\u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u0438\u0437\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430\u00a0Swift","content_html":"<p>\u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442 \u043d\u0430\u00a0<i>Swift<\/i> \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0441\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u00a0<i>Swift<\/i> \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <i>macOS<\/i> \u0438\u00a0<i>iOS<\/i> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u00a0\u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <i>API<\/i> \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 <i>Foundation<\/i>.<\/p>\n<p><input id=\"button_swift_from_terminal_run\" type=\"button\" onclick=\"toggle(cut_swift_from_terminal_run, button_swift_from_terminal_run)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/p>\n<div id=\"cut_swift_from_terminal_run\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br\/><\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043d\u0430\u00a0\u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <i>plutil<\/i>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u00a0\u0444\u0430\u0439\u043b\u0430\u043c\u0438 <i>plist<\/i> \u043d\u0430\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u00a0\u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430:<\/p>\n<pre class=\"e2-text-code\"><code>\/\/\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 NSTask\r\nlet task = NSTask()\r\n\r\n\/\/\u0432 \u043f\u043e\u043b\u0435 launchPath \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043f\u0443\u0442\u044c \u043a \u0443\u0442\u0438\u043b\u0438\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\r\ntask.launchPath = &quot;\/usr\/bin\/plutil&quot;\r\n\r\n\/\/\u0432 arguments \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0434\u043b\u044f plutil\r\ntask.arguments = [&quot;-lint&quot;, path]\r\n\r\n\/\/\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 NSPipe, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b plutil \u0438 \u043f\u043e\u0437\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0435\u0433\u043e\r\nlet pipe = NSPipe()\r\n\r\n\/\/\u043d\u0430\u0448 pipe \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 standardOutput \u0442\u0430\u0441\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0437\u043d\u0430\u043b \u0441 \u043a\u0430\u043a\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c\r\ntask.standardOutput = pipe\r\n\r\n\/\/\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0442\u0430\u0441\u043a \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\r\ntask.launch()\r\n\r\n\/\/\u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b plutil \u0434\u043e\u0441\u0442\u0430\u043d\u0435\u043c \u0445\u044d\u043d\u0434\u043b\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438 \u043f\u0440\u043e\u0447\u0442\u0435\u043c \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 data\r\nlet data = pipe.fileHandleForReading.readDataToEndOfFile()\r\n\r\n\/\/\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c - \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445\r\n\/\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043d\u0430 nil, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0443\u0441\u0442\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435 \u0443\u0440\u043e\u043d\u0438\u0442\u044c \u043d\u0430\u0448 \u0441\u043a\u0440\u0438\u043f\u0442\r\nif let plutilResult = NSString(data: data, encoding: NSUTF8StringEncoding)\r\n{\r\n\tprint(plutilResult)\r\n}<\/code><\/pre><\/div>","date_published":"2019-02-19T19:34:22+03:00","date_modified":"2019-02-19T19:34:20+03:00","_date_published_rfc2822":"Tue, 19 Feb 2019 19:34:22 +0300","_rss_guid_is_permalink":"false","_rss_guid":"34","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}},{"id":"33","url":"http:\/\/bibobo.ru\/all\/zapusk-swift-skriptov-iz-komandnoy-stroki\/","title":"\u0417\u0430\u043f\u0443\u0441\u043a Swift-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438\u0437\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438","content_html":"<p>\u0414\u043b\u044f\u00a0\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0442\u0443 \u0438\u043b\u0438\u00a0\u0438\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0414\u043b\u044f\u00a0\u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u044f \u0432\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <i>Python<\/i> \u0438\u00a0<i>Swift<\/i>. \u0415\u0441\u043b\u0438 \u0441\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c <i>Python<\/i>-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u0442\u043e \u0441\u043e\u00a0<i>Swift<\/i> \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b. \u041e\u00a0\u043d\u0438\u0445 \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u0438\u0437\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><input id=\"button_swift_from_terminal\" type=\"button\" onclick=\"toggle(cut_swift_from_terminal, button_swift_from_terminal)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/p>\n<div id=\"cut_swift_from_terminal\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br\/><\/p>\n<p>\u0418\u0437\u00a0\u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u0430\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043d\u0430\u00a0<i>Swift<\/i>, \u0442\u0430\u043a \u0438\u00a0\u0441\u0430\u043c \u0441\u043a\u0440\u0438\u043f\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u044f \u0432\u044b\u0431\u0438\u0440\u0430\u044e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u00a0\u043d\u0438\u043c \u043f\u0440\u043e\u0449\u0435, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u00a0\u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438\u00a0\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p><br\/><\/p>\n<p>\u0414\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u00a0\u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <i>*.swift<\/i> \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0432\u00a0\u0444\u0430\u0439\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434<\/p>\n<pre class=\"e2-text-code\"><code>#!\/usr\/bin\/env xcrun swift<\/code><\/pre><p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u0430\u0441\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0431\u0430\u0448\u0443 \u043d\u0430\u00a0\u0442\u043e, \u0447\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0432\u00a0\u0444\u0430\u0439\u043b\u0435, \u0432\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 <i>xcrun<\/i>. \u0414\u0430\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p><br\/><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c, \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u00a0\u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre class=\"e2-text-code\"><code>chmod +x \u0438\u043c\u044f_\u043d\u0430\u0448\u0435\u0433\u043e_\u0441\u043a\u0440\u0438\u043f\u0442\u0430.swift<\/code><\/pre><p>\u0422\u0443\u0442 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c.<\/p>\n<p><br\/><\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u00a0\u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u00a0\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0433\u0434\u0435 \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre class=\"e2-text-code\"><code>.\/\u0438\u043c\u044f_\u043d\u0430\u0448\u0435\u0433\u043e_\u0441\u043a\u0440\u0438\u043f\u0442\u0430.swift<\/code><\/pre><p>\u0412\u043e\u0442 \u0438\u00a0\u0432\u0441\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043e\u0442\u00a0\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <i>Apple<\/i> :)<\/p>\n<\/div>","date_published":"2019-02-19T19:28:00+03:00","date_modified":"2019-02-19T19:27:53+03:00","_date_published_rfc2822":"Tue, 19 Feb 2019 19:28:00 +0300","_rss_guid_is_permalink":"false","_rss_guid":"33","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css","system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css","system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}},{"id":"32","url":"http:\/\/bibobo.ru\/all\/chtenie-parametrov-komandnoy-stroki-v-swift-skripte\/","title":"\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u00a0Swift-\u0441\u043a\u0440\u0438\u043f\u0442\u0435","content_html":"<p>\u041f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430\u00a0<i>Swift<\/i> \u0438\u0437\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0443. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0435 \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u043d\u0430\u00a0\u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u043b\u0438\u0431\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p><input id=\"button_swift_params\" type=\"button\" onclick=\"toggle(cut_swift_params, button_swift_params)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/p>\n<div id=\"cut_swift_params\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br\/><\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0432\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <i>Swift<\/i> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 <i>Process<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a, \u043f\u043e\u0434\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <i>arguments<\/i>. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0432\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0443:<\/p>\n<blockquote>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code>for argument in Process.arguments\r\n{\r\n\tprint(argument);\r\n}<\/code><\/pre><p>\u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043f\u0443\u0442\u044c \u043a\u00a0\u0444\u0430\u0439\u043b\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438\u00a0\u0435\u0433\u043e \u0438\u043c\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0435 arguments \u0435\u0441\u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:<\/p>\n<pre class=\"e2-text-code\"><code>.\/script.swift -- \/simple\/path\/to\/directory file_name_to_find<\/code><\/pre><p>\u0422\u043e\u0433\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 Process.arguments \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<pre class=\"e2-text-code\"><code>Process.arguments[0] = \u201c.\/script.swift\u201d\r\nProcess.arguments[1] = \u201c--\u201d\r\nProcess.arguments[2] = \u201c\/simple\/path\/to\/directory\u201d\r\nProcess.arguments[3] = \u201cfile_name_to_find\u201d<\/code><\/pre><\/div>","date_published":"2019-02-19T19:12:00+03:00","date_modified":"2019-02-19T19:29:24+03:00","_date_published_rfc2822":"Tue, 19 Feb 2019 19:12:00 +0300","_rss_guid_is_permalink":"false","_rss_guid":"32","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css","system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css","system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}},{"id":"31","url":"http:\/\/bibobo.ru\/all\/poluchenie-informacii-o-sostoyanii-batarei-v-macos-vypolneniem-k\/","title":"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u00a0\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0432\u00a0MacOS (\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b)","content_html":"<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f <i>MacOS<\/i> \u0434\u043e\u00a0<i>Sierra<\/i> \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439\u00a0\u2014 \u0432\u00a0\u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440\u0435 \u0438\u0441\u0447\u0435\u0437\u043b\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431\u00a0\u043e\u0441\u0442\u0430\u0432\u0448\u0435\u043c\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u00a0\u0431\u0430\u0442\u0430\u0440\u0435\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u2014 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/codler\/Battery-Time-Remaining\">Battery-Time-Remaining<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u0448\u0432\u0435\u0439\u0446\u0430\u0440\u0441\u043a\u0438\u043c \u043d\u043e\u0436\u043e\u043c \u0432\u00a0\u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0431\u0430\u0442\u0430\u0440\u0435\u0435\u0439 \u043c\u0430\u043a\u0431\u0443\u043a\u0430. \u041d\u043e\u00a0\u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431\u00a0\u043e\u0441\u0442\u0430\u0432\u0448\u0435\u043c\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u00a0\u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0432\u00a0<i>MacOS<\/i> \u0438\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440\u0430.<\/p>\n<p><br\/><\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0432\u00a0<i>MacOS<\/i>:<\/p>\n<p><br\/><\/p>\n<ol start=\"1\">\n<li>(\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439) \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <a href=\"https:\/\/developer.apple.com\/reference\/iokit\">IOPowerFunctions<\/a> \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 <i>IOKit<\/i>;<\/li>\n<li>(\u0431\u044b\u0441\u0442\u0440\u044b\u0439) \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u201c<b>pmset -g batt<\/b>\u201d \u0438\u00a0\u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0432\u044b\u0432\u043e\u0434\u0430.<br \/>\n<input id=\"button_macos_pmset_battery_remaining\" type=\"button\" onclick=\"toggle(cut_macos_pmset_battery_remaining, button_macos_pmset_battery_remaining)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/li>\n<\/ol>\n<div id=\"cut_macos_pmset_battery_remaining\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br><\/p>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432\u0442\u043e\u0440\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c (\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u00a0\u043d\u0430\u0446\u0435\u043b\u0435\u043d\u043e \u043d\u0430\u00a0\u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u0438\u00a0\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e) \u0438\u00a0\u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 \u043e\u0442\u00a0\u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0432\u00a0\u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440\u0435.<\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<p><br\/><\/p>\n<ol start=\"1\">\n<li>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <i>IOKit<\/i> \u043f\u043e\u0434\u043f\u0438\u0448\u0435\u043c\u0441\u044f \u043d\u0430\u00a0\u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0434\u043b\u044f\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440\u0435 (\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u043d\u043e\u00a0\u044d\u0442\u043e \u043b\u0438\u0448\u043d\u044f\u044f \u0442\u0440\u0430\u0442\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b)<\/li>\n<li>\u043f\u0440\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <i>NSTask<\/i> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438\u00a0\u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0435\u0435 \u0432\u044b\u0432\u043e\u0434<\/li>\n<li>\u043f\u0430\u0440\u0441\u0438\u043c \u0432\u044b\u0432\u043e\u0434 \u0438\u00a0\u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0435\u043d\u044e \u0432\u00a0\u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440\u0435<br \/>\n<br\/><\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <i>IOKit.framework<\/i> \u0438\u00a0\u0437\u0430\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u0438\u0442\u044c \u0445\u0435\u0434\u0435\u0440 <i>IOKit\/ps\/IOPowerSources.h<\/i><\/p>\n<p>\u0422\u0430\u043a\u00a0\u0436\u0435, \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u00a0\u0437\u0430\u0431\u044b\u0442\u044c \u0441\u043d\u044f\u0442\u044c \u0433\u0430\u043b\u043e\u0447\u043a\u0443 <i>Visible At\u00a0Launch<\/i> \u0441\u00a0<i>NSWindow<\/i> \u0432\u00a0<i>Xib<\/i> \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u044d\u0442\u043e \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442 \u043e\u043a\u043d\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440)<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0437\u00a0\u0434\u043e\u043a\u0430 <i>MacOS<\/i> \u043d\u0443\u0436\u043d\u043e \u0432\u00a0<i>info.plist<\/i> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0433 <i>LSUIElement<\/i> \u0432\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>YES<\/i><\/p>\n<p><br\/><\/p>\n<pre class=\"e2-text-code\"><code>- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {\r\n    \/\/ Capture Power Source updates and make sure our callback is called\r\n    CFRunLoopSourceRef loop = IOPSNotificationCreateRunLoopSource(PowerSourceChanged, (__bridge void *)self);\r\n    CFRunLoopAddSource(CFRunLoopGetCurrent(), loop, kCFRunLoopDefaultMode);\r\n    CFRelease(loop);\r\n    \r\n    self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];\r\n    self.statusItem.title = @&quot;Checking...&quot;;\r\n    self.statusItem.highlightMode = YES;\r\n    \r\n    \/\/request battery status for the first time\r\n    [self requestBatteryStatus];\r\n}\r\n\r\n\/\/ IOPS notification callback on power source change\r\nstatic void PowerSourceChanged(void * context)\r\n{\r\n    \/\/requesting battery status\r\n    AppDelegate *self = (__bridge AppDelegate *)context;\r\n    [self requestBatteryStatus];\r\n}\r\n\r\n-(void)requestBatteryStatus\r\n{\r\n    \/\/create task &amp; launch 'pmset' to get battery status string\r\n    NSPipe *pipe = [NSPipe pipe];\r\n    NSFileHandle *file = pipe.fileHandleForReading;\r\n    \r\n    NSTask *task = [[NSTask alloc] init];\r\n    task.launchPath = @&quot;\/usr\/bin\/pmset&quot;;\r\n    task.arguments = @[@&quot;-g&quot;, @&quot;batt&quot;];\r\n    task.standardOutput = pipe;\r\n    \r\n    [task launch];\r\n    \r\n    NSData *data = [file readDataToEndOfFile];\r\n    [file closeFile];\r\n    \r\n    \/\/parse string to get particular items\r\n    NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];\r\n    NSString *statusData = [result componentsSeparatedByString:@&quot;\t&quot;][1];\r\n    NSArray *status = [statusData componentsSeparatedByString:@&quot;;&quot;];\r\n    \r\n    \/\/battery charge percent\r\n    NSString *batteryPercent = [status[0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];\r\n    \/\/charging status\r\n    NSString *batteryChanging = [status[1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];\r\n    \r\n    \/\/ETA\r\n    NSString *batteryEstimate = [status[2] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];\r\n    \/\/remaining hours\r\n    NSString *batteryRemaining = batteryEstimate;\r\n    NSRange range = [batteryEstimate rangeOfString:@&quot;present&quot;];\r\n    if(range.length &gt; 0){\r\n        batteryEstimate = [[[batteryEstimate substringToIndex:range.location] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@&quot;()&quot;]];\r\n        \r\n        batteryRemaining = [batteryEstimate componentsSeparatedByString:@&quot; &quot;][0];\r\n    }\r\n    \r\n    \/\/recrete status bar menu\r\n    NSMenu *menu = [[NSMenu alloc] init];\r\n    [menu addItemWithTitle:batteryPercent action:nil keyEquivalent:@&quot;&quot;];\r\n    [menu addItemWithTitle:batteryEstimate action:nil keyEquivalent:@&quot;&quot;];\r\n    [menu addItemWithTitle:batteryChanging action:nil keyEquivalent:@&quot;&quot;];\r\n    \r\n    [menu addItem:[NSMenuItem separatorItem]];\r\n    \r\n    [menu addItemWithTitle:@&quot;Exit&quot; action:@selector(exitAction:) keyEquivalent:@&quot;&quot;];\r\n    \r\n    self.statusItem.menu = menu;\r\n    \r\n    self.statusItem.title = [batteryRemaining stringByAppendingString:@&quot; ETA&quot;];\r\n    \r\n    NSLog(@&quot;Request success!&quot;);\r\n}\r\n\r\n-(void)exitAction:(id)sender\r\n{\r\n    exit(0);\r\n}<\/code><\/pre><\/div>","date_published":"2017-01-02T12:44:55+03:00","date_modified":"2017-01-03T11:06:59+03:00","_date_published_rfc2822":"Mon, 02 Jan 2017 12:44:55 +0300","_rss_guid_is_permalink":"true","_rss_guid":"http:\/\/bibobo.ru\/all\/poluchenie-informacii-o-sostoyanii-batarei-v-macos-vypolneniem-k\/","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}},{"id":"30","url":"http:\/\/bibobo.ru\/all\/rabota-s-avaudioplayer-i-mpnowplayinginfo-ios\/","title":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0AVAudioPlayer \u0438\u00a0MPNowPlayingInfo (iOS)","content_html":"<p>\u0412\u00a0\u0445\u043e\u0434\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0434\u00a0iOS \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0430\u0443\u0434\u0438\u043e-\u0444\u0430\u0439\u043b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438\u043b\u0438\u00a0\u044d\u0444\u0444\u0435\u043a\u0442. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u00a0iOS \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 AVAudioPlayer. \u041e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 AVFoundation, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u00a0\u043d\u0435\u0433\u043e using.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u043e\u0434 \u0445\u044d\u043b\u043f\u0435\u0440\u0430, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u00a0\u044d\u0442\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c.<\/p>\n<p><input id=\"button_ios_avaudioplayer\" type=\"button\" onclick=\"toggle(cut_ios_avaudioplayer, button_ios_avaudioplayer)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/p>\n<div id=\"cut_ios_avaudioplayer\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br><\/p>\n<pre class=\"e2-text-code\"><code>\/\/\/ &lt;summary&gt;\r\n\/\/\/ \u0425\u044d\u043b\u043f\u0435\u0440, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u043b\u0435\u0439\u0435\u0440\u043e\u043c (\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0438\u0441\u0438\u0442 \u043e\u0434\u0438\u043d \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043b\u0435\u0439\u0435\u0440)\r\n\/\/\/ &lt;\/summary&gt;\r\npublic static class PlayerHelper\r\n{\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043b\u0435\u0439\u0435\u0440\u0430\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public enum PlayerState\r\n    {\r\n        Uncknown,\r\n        Playing,\r\n        Stopped,\r\n        Paused\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043b\u0435\u0439\u0435\u0440\u0430\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;value&gt;The state.&lt;\/value&gt;\r\n    public static PlayerState State { get; private set; }\r\n\r\n    private static AVAudioPlayer _player;\r\n    public static AVAudioPlayer Player { get{ return _player; } }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u044f\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;value&gt;&lt;c&gt;true&lt;\/c&gt; if is infinite playing; otherwise, &lt;c&gt;false&lt;\/c&gt;.&lt;\/value&gt;\r\n    public static bool IsInfinitePlaying\r\n    {\r\n        get{ return _player != null ? _player.NumberOfLoops == int.MaxValue : false; }\r\n        set\r\n        {\r\n            if (_player == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            _player.NumberOfLoops = value ? int.MaxValue : 0;\r\n        }\r\n    }\r\n\r\n    static PlayerHelper()\r\n    {\r\n        State = PlayerState.Uncknown;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c URL \u0441 \u0434\u0438\u0441\u043a\u0430 (\u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0441\u044f \u0441 \u043c\u0435\u0441\u0442\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438)\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;returns&gt;The URL.&lt;\/returns&gt;\r\n    \/\/\/ &lt;param name=&quot;url&quot;&gt;URL.&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=&quot;finishedPlayingAction&quot;&gt;Finished playing action.&lt;\/param&gt;\r\n    public static AVAudioPlayer PlayUrl(NSUrl url, Action finishedPlayingAction = null)\r\n    {\r\n        \/\/\u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043f\u043b\u0435\u0439\u0435\u0440 \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 url - \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u043b\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430\r\n        if (IsPlayerLoadedThisFile(url))\r\n        {\r\n            ResumePlaying();\r\n            return _player;\r\n        }\r\n\r\n        StopPlaying();\r\n\r\n        _player = AVAudioPlayer.FromUrl(url);\r\n        _player.CurrentTime = 0;\r\n        _player.Volume = 1f;\r\n\r\n        if (finishedPlayingAction != null)\r\n        {\r\n            _player.FinishedPlaying += (sender, e) =&gt;\r\n            {\r\n                finishedPlayingAction.Invoke();\r\n            };\r\n        }\r\n\r\n        _player.PrepareToPlay();\r\n\r\n        \/\/\u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0432 \u0431\u0435\u043a\u0433\u0440\u0430\u0443\u043d\u0434\u0435\r\n        AVAudioSession.SharedInstance().SetCategory(AVAudioSessionCategory.Playback);\r\n        AVAudioSession.SharedInstance().SetActive(true);\r\n        UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();\r\n\r\n        _player.Play();\r\n\r\n        State = PlayerState.Playing;\r\n\r\n        return _player;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public static void Play()\r\n    {\r\n        if (_player == null)\r\n        {\r\n            return;\r\n        }\r\n\r\n        _player.Play();\r\n        State = PlayerState.Playing;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public static void StopPlaying()\r\n    {\r\n        if (_player == null)\r\n        {\r\n            return;\r\n        }\r\n\r\n        _player.Stop();\r\n        State = PlayerState.Stopped;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public static void PausePlaying()\r\n    {\r\n        if (_player == null)\r\n        {\r\n            return;\r\n        }\r\n\r\n        _player.Pause();\r\n        State = PlayerState.Paused;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public static void ResumePlaying()\r\n    {\r\n        if (_player == null)\r\n        {\r\n            return;\r\n        }\r\n\r\n        _player.Play();\r\n        State = PlayerState.Playing;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442 true, \u0435\u0441\u043b\u0438 \u043f\u043b\u0435\u0439\u0435\u0440 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u0444\u0430\u0439\u043b \u043f\u043e \u044d\u0442\u043e\u043c\u0443 URL \u0441 \u0434\u0438\u0441\u043a\u0430\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;c&gt;true&lt;\/c&gt; if is player loaded this file the specified url; otherwise, &lt;c&gt;false&lt;\/c&gt;.&lt;\/returns&gt;\r\n    \/\/\/ &lt;param name=&quot;url&quot;&gt;URL.&lt;\/param&gt;\r\n    public static bool IsPlayerLoadedThisFile(NSUrl url)\r\n    {\r\n        if (_player == null)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        return _player.Url.LastPathComponent == url.LastPathComponent;\r\n    }\r\n}<\/code><\/pre><p><\/br><\/p>\n<p>\u0422\u0430\u043a\u00a0\u0436\u0435 \u043f\u0440\u0438\u00a0\u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u0435\u0441\u043b\u0438 \u0432\u00a0info.plist \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0\u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0430\u0443\u0434\u0438\u043e \u0432\u00a0\u0431\u0435\u043a\u0433\u0440\u0430\u0443\u043d\u0434\u0435) \u043d\u0430\u00a0\u0433\u043b\u0430\u0432\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u00a0\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0430\u00a0\u0442\u0430\u043a\u00a0\u0436\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c. \u0427\u0442\u043e\u0431\u044b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u00a0\u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0435\u043a\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<p><\/br><\/p>\n<pre class=\"e2-text-code\"><code>MPNowPlayingInfo info = new MPNowPlayingInfo();\r\ninfo.Title = &quot;\u0418\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&quot;;\r\ninfo.Artist = &quot;\u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0440\u0442\u0438\u0441\u0442\u0430&quot;;\r\n\r\ninfo.PlaybackRate = 1f;\r\ninfo.PlaybackDuration = PlayerHelper.Player.Duration;\r\ninfo.ElapsedPlaybackTime = PlayerHelper.Player.CurrentTime;\r\n\r\nMPNowPlayingInfoCenter.DefaultCenter.NowPlaying = info;<\/code><\/pre><\/div>","date_published":"2016-01-18T23:11:20+03:00","date_modified":"2016-01-18T23:11:16+03:00","_date_published_rfc2822":"Mon, 18 Jan 2016 23:11:20 +0300","_rss_guid_is_permalink":"true","_rss_guid":"http:\/\/bibobo.ru\/all\/rabota-s-avaudioplayer-i-mpnowplayinginfo-ios\/","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css","system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}},{"id":"29","url":"http:\/\/bibobo.ru\/all\/ispolzovanie-qlpreviewcontroller-dlya-prosmotra-faylov-ios\/","title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 QLPreviewController \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 (iOS)","content_html":"<p>\u0414\u043b\u044f\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, word, excel, txt, \u043c\u0435\u0434\u0438\u0430 \u0438\u00a0\u0442.\u00a0\u043f.) \u0432\u00a0iOS \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 QLPreviewController. \u0414\u043b\u044f\u00a0\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p><\/br><\/p>\n<ol start=\"1\">\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a QLPreviewController, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 QLPreviewControllerDataSource, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0438 QLPreviewItem, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435<br \/>\n<input id=\"button_ios_qlpreview\" type=\"button\" onclick=\"toggle(cut_ios_qlpreview, button_ios_qlpreview)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/li>\n<\/ol>\n<div id=\"cut_ios_qlpreview\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br><\/p>\n<p>\u0411\u0435\u0437\u00a0\u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u043b\u043e\u0432 \u0441\u0440\u0430\u0437\u0443 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430\u00a0\u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/p>\n<p><\/br><\/p>\n<pre class=\"e2-text-code\"><code>\/\/\/ &lt;summary&gt;\r\n\/\/\/ \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0432\u043e\u0440\u0434, \u044d\u043a\u0437\u0435\u043b\u044c, \u043f\u0434\u0444 \u0438 \u0442.\u043f.) \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u0435\u0432\u044c\u044e\r\n\/\/\/ \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\r\n\/\/\/ &lt;\/summary&gt;\r\npublic class QuickLookPreviewController : QLPreviewController\r\n{\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a NSUrl'\u043e\u0432\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;c&gt;true&lt;\/c&gt;, if urls was previewed, &lt;c&gt;false&lt;\/c&gt; otherwise.&lt;\/returns&gt;\r\n    \/\/\/ &lt;param name=&quot;urls&quot;&gt;Urls.&lt;\/param&gt;\r\n    public bool PreviewUrls(params NSUrl[] urls)\r\n    {\r\n        List&lt;QLPreviewItem&gt; items = new List&lt;QLPreviewItem&gt;();\r\n        foreach (NSUrl url in urls)\r\n        {\r\n            QLPreviewItemNsUrl item = new QLPreviewItemNsUrl(url);\r\n            if (QLPreviewController.CanPreviewItem(item))\r\n            {\r\n                items.Add(item);\r\n            }\r\n        }\r\n\r\n        return PreviewItems(items.ToArray());\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a QLPreviewItem\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;returns&gt;&lt;c&gt;true&lt;\/c&gt;, if items was previewed, &lt;c&gt;false&lt;\/c&gt; otherwise.&lt;\/returns&gt;\r\n    \/\/\/ &lt;param name=&quot;items&quot;&gt;Items.&lt;\/param&gt;\r\n    public bool PreviewItems(params QLPreviewItem[] items)\r\n    {\r\n        if (items.Length &gt; 0)\r\n        {\r\n            DataSource = new PreviewControllerDataSource(items);\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ QL Preview \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445\r\n    \/\/\/ &lt;\/summary&gt;\r\n    private class PreviewControllerDataSource : QLPreviewControllerDataSource\r\n    {\r\n        private QLPreviewItem[] _items = new QLPreviewItem[0];\r\n\r\n        public PreviewControllerDataSource(params QLPreviewItem[] items)\r\n        {\r\n            _items = items;\r\n        }\r\n\r\n        public override nint PreviewItemCount(QLPreviewController controller)\r\n        {\r\n            return _items.Length;\r\n        }\r\n\r\n        public override IQLPreviewItem GetPreviewItem(QLPreviewController controller, nint index)\r\n        {\r\n            return _items[index];\r\n        }\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ QL Preview Item, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 NSUrl\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class QLPreviewItemNsUrl : QLPreviewItem\r\n    {\r\n        private NSUrl _documentUrl;\r\n\r\n        public QLPreviewItemNsUrl(NSUrl documentUrl)\r\n        {\r\n            _documentUrl = documentUrl;\r\n        }\r\n\r\n        public override string ItemTitle\r\n        {\r\n            get\r\n            {\r\n                return _documentUrl.LastPathComponent;\r\n            }\r\n        }\r\n        public override NSUrl ItemUrl\r\n        {\r\n            get\r\n            {\r\n                return _documentUrl;\r\n            }\r\n        }\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ QL Preview Item, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u0438\u043c\u044f \u0438 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class QLPreviewItemFileSystem : QLPreviewItem\r\n    {\r\n        string _fileName, _filePath;\r\n\r\n        public QLPreviewItemFileSystem(string fileName, string filePath)\r\n        {\r\n            _fileName = fileName;\r\n            _filePath = filePath;\r\n        }\r\n\r\n        public override string ItemTitle\r\n        {\r\n            get\r\n            {\r\n                return _fileName;\r\n            }\r\n        }\r\n        public override NSUrl ItemUrl\r\n        {\r\n            get\r\n            {\r\n                return NSUrl.FromFilename(_filePath);\r\n            }\r\n        }\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ QL Preview Item, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u0438\u043c\u044f \u0438\u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0438\u0437 \u0431\u0430\u043d\u0434\u043b\u0430\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class QLPreviewItemBundle : QLPreviewItem\r\n    {\r\n        string _fileName, _filePath;\r\n        public QLPreviewItemBundle(string fileName, string filePath)\r\n        {\r\n            _fileName = fileName;\r\n            _filePath = filePath;\r\n        }\r\n\r\n        public override string ItemTitle\r\n        {\r\n            get\r\n            {\r\n                return _fileName;\r\n            }\r\n        }\r\n        public override NSUrl ItemUrl\r\n        {\r\n            get\r\n            {\r\n                var documents = NSBundle.MainBundle.BundlePath;\r\n                var lib = Path.Combine(documents, _filePath);\r\n                var url = NSUrl.FromFilename(lib);\r\n                return url;\r\n            }\r\n        }\r\n    }\r\n}<\/code><\/pre><p><\/br><\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p><\/br><\/p>\n<pre class=\"e2-text-code\"><code>QuickLookPreviewController previewController = new QuickLookPreviewController();\r\nif (previewController.PreviewUrls(new NSUrl[]{ fileUrl }))\r\n{\r\n    this.NavigationController.PushViewController(previewController, true);\r\n}<\/code><\/pre><\/div>","date_published":"2016-01-13T22:10:14+03:00","date_modified":"2016-01-13T22:10:04+03:00","_date_published_rfc2822":"Wed, 13 Jan 2016 22:10:14 +0300","_rss_guid_is_permalink":"true","_rss_guid":"http:\/\/bibobo.ru\/all\/ispolzovanie-qlpreviewcontroller-dlya-prosmotra-faylov-ios\/","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css","system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}},{"id":"28","url":"http:\/\/bibobo.ru\/all\/sozdanie-i-udalenie-zapisey-v-kalendare-ios\/","title":"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u00a0\u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435 (iOS)","content_html":"<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0444\u0438\u0448\u043a\u0443 \u041e\u0421 \u043e\u0442\u00a0Apple \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u00a0\u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\u0439. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430-\u0445\u044d\u043b\u043f\u0435\u0440\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u00a0\u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0\u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u043c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435.<\/p>\n<p><\/br><\/p>\n<p>\u0412\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0\u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a EventKit, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<\/p>\n<p><\/br><\/p>\n<ol start=\"1\">\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 EKEventStore<\/li>\n<li>\u0417\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0\u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u00a0\u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\u043c<\/li>\n<li>\u0412\u00a0completionHandler \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c<\/li>\n<li>\u041f\u0440\u0438\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0448 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c EKCalendar (\u0438\u043b\u0438\u00a0\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0435\u0449\u0435 \u043d\u0435\u0442)<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 EKEvent (\u044d\u0442\u043e \u0438\u00a0\u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448\u0430 \u0437\u0430\u043f\u0438\u0441\u044c) \u0438\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u043b\u044f\u00a0\u043d\u0435\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u00a0\u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u00a0\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u043c\u0430\u0439\u043d\u0434\u0435\u0440 (\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 EKAlarm), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043e\u00a0\u0437\u0430\u043f\u0438\u0441\u0438<br \/>\n<input id=\"button_ios_manage_calendar_events\" type=\"button\" onclick=\"toggle(cut_ios_manage_calendar_events, button_ios_manage_calendar_events)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/li>\n<\/ol>\n<div id=\"cut_ios_manage_calendar_events\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br><\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043a\u043e\u0434:<\/p>\n<p><\/br><\/p>\n<pre class=\"e2-text-code\"><code>public class EventKitCalendarHelper\r\n{\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0418\u043c\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044f\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public static string CalendarTitle = &quot;CalendarTitle&quot;;\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public enum AlarmTime\r\n    {\r\n        None = 0,\r\n        FifteenMinutesBefore = -15*60,\r\n        HalfAnHourBefore = -30*60,\r\n        AnHourBefore = -60*60,\r\n        TwoHoursBefore = -2*60*60,\r\n        ThreeHoursBefore = -3*60*60\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=&quot;eventTitle&quot;&gt;Event title.&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=&quot;dateStart&quot;&gt;Date start.&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=&quot;timeLength&quot;&gt;Time length.&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=&quot;time&quot;&gt;Time.&lt;\/param&gt;\r\n    public static void AddCalendarEvent(string eventTitle, DateTime dateStart, TimeSpan timeLength, string eventNotes = &quot;&quot;, AlarmTime time = AlarmTime.None)\r\n    {\r\n        if (string.IsNullOrEmpty(eventTitle))\r\n        {\r\n            return;\r\n        }\r\n\r\n        EKEventStore store = new EKEventStore();\r\n        store.RequestAccess(EKEntityType.Event, (granted, err) =&gt;\r\n            {\r\n                if (!granted)\r\n                {\r\n                    return;\r\n                }\r\n\r\n                EKEvent entry = EKEvent.FromStore(store);\r\n                entry.Title = eventTitle;\r\n                entry.Notes = eventNotes;\r\n                entry.StartDate = dateStart.DateTimeToNSDate();\r\n                entry.EndDate = dateStart.Add(timeLength).DateTimeToNSDate();\r\n\r\n                \/\/\u0438\u0449\u0435\u043c \u043d\u0430\u0448 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c, \u0435\u0441\u043b\u0438 \u043c\u044b \u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043c - \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439\r\n                EKCalendar calendar = FindOrCreateCalendar(store, true);\r\n                if(calendar == null)\r\n                {\r\n                    return;\r\n                }\r\n\r\n                entry.Calendar = calendar;\r\n\r\n                \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0440\u0435\u043c\u0430\u0439\u043d\u0434\u0435\u0440, \u0435\u0441\u043b\u0438 \u043e\u043d \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f\r\n                if (time != AlarmTime.None)\r\n                {\r\n                    entry.AddAlarm(EKAlarm.FromTimeInterval((int)time));\r\n                }\r\n\r\n                err = null;\r\n                store.SaveEvent(entry, EKSpan.ThisEvent, out err);\r\n            });\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041d\u0430\u0445\u043e\u0434\u0438\u0442 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;returns&gt;The or create calendar.&lt;\/returns&gt;\r\n    \/\/\/ &lt;param name=&quot;store&quot;&gt;Store.&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=&quot;createIfDoesntExist&quot;&gt;If set to &lt;c&gt;true&lt;\/c&gt; create if doesnt exist.&lt;\/param&gt;\r\n    private static EKCalendar FindOrCreateCalendar(EKEventStore store, bool createIfDoesntExist = false)\r\n    {\r\n        NSError err = null;\r\n\r\n        EKCalendar calendar = store.Calendars.Where(x =&gt; x.Title == CalendarTitle).FirstOrDefault();\r\n        if (calendar == null &amp;&amp; createIfDoesntExist)\r\n        {\r\n            err = null;\r\n            calendar = EKCalendar.Create(EKEntityType.Event, store);\r\n            calendar.Title = CalendarTitle;\r\n\r\n            EKSource localSource = store.Sources.Where(x =&gt; x.SourceType == EKSourceType.Local).FirstOrDefault();\r\n            calendar.Source = localSource;\r\n\r\n            store.SaveCalendar(calendar, true, out err);\r\n        }\r\n\r\n        return calendar;\r\n    }\r\n}<\/code><\/pre><p><\/br><\/p>\n<p>\u0421\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0434\u0435\u043b\u0430 \u043e\u0431\u0441\u0442\u043e\u044f\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u041f\u0440\u0438\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0443\u00a0\u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 EventIdentifier, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0433\u0434\u0435-\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0434\u043b\u044f\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438. \u041b\u0438\u0431\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430 \u0438\u00a0\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0445. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p><\/br><\/p>\n<pre class=\"e2-text-code\"><code>\/\/\/ &lt;summary&gt;\r\n\/\/\/ \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438\r\n\/\/\/ &lt;\/summary&gt;\r\n\/\/\/ &lt;param name=&quot;dateStart&quot;&gt;Date start.&lt;\/param&gt;\r\n\/\/\/ &lt;param name=&quot;timeLength&quot;&gt;Time length.&lt;\/param&gt;\r\npublic static void RemoveCalendarEvent(DateTime dateStart, TimeSpan timeLength, string title = &quot;&quot;)\r\n{\r\n    EKEventStore store = new EKEventStore();\r\n    store.RequestAccess(EKEntityType.Event, (granted, err) =&gt;\r\n        {\r\n            if (!granted)\r\n            {\r\n                return;\r\n            }\r\n\r\n            \/\/\u0438\u0449\u0435\u043c \u043d\u0430\u0448 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c\r\n            EKCalendar calendar = FindOrCreateCalendar(store);\r\n            if (calendar == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u044d\u0432\u0435\u043d\u0442\u043e\u0432 \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\r\n            NSPredicate predicate = store.PredicateForEvents(dateStart.DateTimeToNSDate(), dateStart.Add(timeLength).DateTimeToNSDate(), new EKCalendar[]{ calendar });\r\n            EKEvent[] entries = store.EventsMatching(predicate);\r\n\r\n            if (entries == null || entries.Length == 0)\r\n            {\r\n                return;\r\n            }\r\n\r\n            \/\/\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e - \u043f\u0440\u043e\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044f \u043f\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443\r\n            if (!string.IsNullOrEmpty(title))\r\n            {\r\n                entries = entries.Where(x =&gt; x.Title == title).ToArray();\r\n            }\r\n\r\n            if (entries == null || entries.Length == 0)\r\n            {\r\n                return;\r\n            }\r\n\r\n            \/\/\u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u043c \u044d\u0432\u0435\u043d\u0442\u0430\u043c \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0438\u0445\r\n            foreach (EKEvent entry in entries)\r\n            {\r\n                err = null;\r\n                store.RemoveEvent(entry, EKSpan.ThisEvent, true, out err);\r\n            }\r\n        });\r\n}<\/code><\/pre>","date_published":"2016-01-06T18:38:03+03:00","date_modified":"2016-01-06T18:37:59+03:00","_date_published_rfc2822":"Wed, 06 Jan 2016 18:38:03 +0300","_rss_guid_is_permalink":"true","_rss_guid":"http:\/\/bibobo.ru\/all\/sozdanie-i-udalenie-zapisey-v-kalendare-ios\/","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css","system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}},{"id":"27","url":"http:\/\/bibobo.ru\/all\/ispolzovanie-nsurlsession-dlya-zagruzki-faylov-ios\/","title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 NSUrlSession \u0434\u043b\u044f\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 (iOS)","content_html":"<p>\u041f\u0440\u0438\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u00a0\u0441\u0435\u0442\u0438. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u00a0Xamarin \u0432\u044b\u0441\u043e\u043a\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 WebClient \u0434\u043b\u044f\u00a0\u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439. \u0412\u0441\u0435\u00a0\u0431\u044b \u043d\u0438\u0447\u0435\u0433\u043e, \u043d\u043e\u00a0\u043f\u0440\u0438\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 WebClient \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p><\/br><\/p>\n<ol start=\"1\">\n<li>\u041d\u0435\u00a0\u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/li>\n<li>\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u00a0\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438\u00a0\u0443\u0445\u043e\u0434\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u00a0\u0431\u0435\u043a\u0433\u0440\u0430\u0443\u043d\u0434<br \/>\n<\/br><\/li>\n<\/ol>\n<p>\u0414\u043b\u044f\u00a0\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0441\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 NSUrlSession.<\/p>\n<p><input id=\"button_ios_download_file_in_background\" type=\"button\" onclick=\"toggle(cut_ios_download_file_in_background, button_ios_download_file_in_background)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/p>\n<div id=\"cut_ios_download_file_in_background\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br><\/p>\n<p>NSUrlSession\u00a0\u2014 \u044d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c iOS, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u00a0\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u00a0\u0441\u0435\u0442\u0438, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0430\u043c\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0431\u0440\u044b\u0432\u044b \u0441\u0432\u044f\u0437\u0438, \u0434\u043e\u043a\u0430\u0447\u0430\u0435\u0442 \u0444\u0430\u0439\u043b, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u00a0\u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c NSUrlSession \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p><\/br><\/p>\n<ol start=\"1\">\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441-\u0445\u044d\u043b\u043f\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0NSUrlSession<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441-\u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a NSUrlSessionDownloadDelegate, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043e\u0434 \u043e\u00a0\u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430, \u0430\u00a0\u0442\u0430\u043a\u00a0\u0436\u0435 \u043e\u0431\u00a0\u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 NSUrlSession \u0438\u00a0\u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0435\u043c\u0443 \u0434\u0435\u043b\u0435\u0433\u0430\u0442<\/li>\n<li>\u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e URL \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c NSUrlRequest \u0438\u00a0NSUrlSessionDownloadTask, \u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435<\/li>\n<li>\u0422\u0430\u043a\u00a0\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u043c\u0443 Url \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0430\u043a\u043e\u0439 NSUrlSessionDownloadTask, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 \u043e\u00a0\u0445\u043e\u0434\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f<br \/>\n<\/br><\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043a\u043e\u0434 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u043e\u00a0\u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre class=\"e2-text-code\"><code>\/\/\/ &lt;summary&gt;\r\n\/\/\/ \u041a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c NSUrlSession \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0444\u043e\u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435\r\n\/\/\/ &lt;\/summary&gt;\r\npublic class DownloadSession\r\n{\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0435\u0441\u0441\u0438\u0438 (\u0441 \u0442\u0430\u043a\u0438\u043c ID \u0441\u0435\u0441\u0441\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438)\r\n    \/\/\/ &lt;\/summary&gt;\r\n    private static NSUrlSessionConfiguration _downloadConfiguration = NSUrlSessionConfiguration.BackgroundSessionConfiguration(&quot;com.appid.background.download&quot;);\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041a\u043b\u0430\u0441\u0441-\u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044e \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442\u043e\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public sealed class ChatBackgroundSessionDelegate : NSUrlSessionDownloadDelegate\r\n    {\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u0421\u043b\u043e\u0432\u0430\u0440\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 - \u0442\u0430\u0441\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 &lt;--&gt; url \u0444\u0430\u0439\u043b\u0430\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public Dictionary&lt;NSUrlSessionDownloadTask, string&gt; QueueHolder { get; private set; }\r\n\r\n        public delegate void DownloadingCompleteDelegate(string url, NSUrl tempFileLocation);\r\n        public delegate void DownloadProgressDelegate(string url, int progressPercent);\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u042d\u043a\u0448\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 (\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 url \u0444\u0430\u0439\u043b\u0430 \u0438 NSUrl \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b)\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public DownloadingCompleteDelegate CompleteAction { get{ return _completeAction; } set{ _completeAction = value; } }\r\n        private DownloadingCompleteDelegate _completeAction;\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u042d\u043a\u0448\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 (\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 url \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f)\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public DownloadProgressDelegate ProgressDelegate { get{ return _progressDelegate; } set{ _progressDelegate = value; } }\r\n        private DownloadProgressDelegate _progressDelegate;\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c-\u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u044d\u043a\u0448\u043d\u044b\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public ChatBackgroundSessionDelegate(DownloadingCompleteDelegate downloadCompleteAction, DownloadProgressDelegate progressDelegate = null)\r\n        {\r\n            _completeAction = downloadCompleteAction;\r\n            _progressDelegate = progressDelegate;\r\n\r\n            QueueHolder = new Dictionary&lt;NSUrlSessionDownloadTask, string&gt;();\r\n        }\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u041c\u0435\u0442\u043e\u0434, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public override void DidWriteData (NSUrlSession session, NSUrlSessionDownloadTask downloadTask, long bytesWritten, long totalBytesWritten, long totalBytesExpectedToWrite)\r\n        {\r\n            if (_progressDelegate == null || !QueueHolder.ContainsKey(downloadTask))\r\n            {\r\n                return;\r\n            }\r\n\r\n            \/\/\u0435\u0441\u043b\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430\u0439\u0434\u0435\u043d \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b \u0438 \u044d\u043a\u0448\u043d \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0438\u0437\u0432\u043d\u0435 - \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0448\u043d \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430\r\n            InvokeOnMainThread(() =&gt;\r\n                {\r\n                    _progressDelegate.Invoke(QueueHolder[downloadTask], Convert.ToInt32(totalBytesWritten * 100 \/ totalBytesExpectedToWrite));\r\n                });\r\n        }\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u041c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public override void DidFinishDownloading(NSUrlSession session, NSUrlSessionDownloadTask downloadTask, NSUrl location)\r\n        {\r\n            if (_completeAction == null || !QueueHolder.ContainsKey(downloadTask))\r\n            {\r\n                return;\r\n            }\r\n\r\n            InvokeOnMainThread(() =&gt;\r\n                {\r\n                    _completeAction.Invoke(QueueHolder[downloadTask], location);\r\n                });\r\n        }\r\n    }\r\n\r\n    private ChatBackgroundSessionDelegate _delegate;\r\n    private NSUrlSession _downloadSession;\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430-\u0445\u043e\u043b\u0434\u0435\u0440\u0430\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public DownloadSession(ChatBackgroundSessionDelegate.DownloadingCompleteDelegate downloadCompleteAction,\r\n        ChatBackgroundSessionDelegate.DownloadProgressDelegate progressDelegate = null)\r\n    {\r\n        \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0435\u043b\u0435\u0433\u0430\u0442\r\n        _delegate = new ChatBackgroundSessionDelegate(downloadCompleteAction, progressDelegate);\r\n\r\n        \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0435\u0441\u0441\u0438\u044e (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0441\u043b\u0438 \u0441\u0435\u0441\u0441\u0438\u044f \u0441 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 - \u0442\u043e \u043d\u043e\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0441\u0442\u0430\u0440\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f)\r\n        _downloadSession = NSUrlSession.FromConfiguration(\r\n            _downloadConfiguration,\r\n            _delegate,\r\n            new NSOperationQueue());\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0421\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=&quot;url&quot;&gt;URL.&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=&quot;file&quot;&gt;File.&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=&quot;message&quot;&gt;Message.&lt;\/param&gt;\r\n    public void StartDownload(string url)\r\n    {\r\n        if (string.IsNullOrEmpty(url))\r\n        {\r\n            return;\r\n        }\r\n\r\n        NSUrl nsurl = NSUrl.FromString(new NSString(url).CreateStringByAddingPercentEscapes(NSStringEncoding.UTF8));\r\n        NSUrlRequest request = NSUrlRequest.FromUrl(nsurl);\r\n        NSUrlSessionDownloadTask task = _downloadSession.CreateDownloadTask(request);\r\n\r\n        \/\/\u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u044e \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0437\u044f\u044c \u0435\u0435 \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u043a\u0430\u0441\u0442\u0430\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0438 \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u0442\u044c \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u044b\r\n        \/\/\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0435\u0441\u0441\u0438\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0438 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f - \u043d\u043e\u0432\u044b\u0439 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f :)\r\n        \/\/\u044d\u043a\u0448\u043d\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430 \u0432 \u0441\u0442\u0430\u0440\u044b\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043d\u0438\u043a\u0430\u043a \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0435\u043b\u0435\u0433\u0430\u0442 (\u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f)\r\n        if (_delegate != (ChatBackgroundSessionDelegate)_downloadSession.Delegate)\r\n        {\r\n            ChatBackgroundSessionDelegate newDelegate = (ChatBackgroundSessionDelegate)_downloadSession.Delegate;\r\n            newDelegate.CompleteAction = _delegate.CompleteAction;\r\n            newDelegate.ProgressDelegate = _delegate.ProgressDelegate;\r\n        }\r\n        _delegate = (ChatBackgroundSessionDelegate)_downloadSession.Delegate;\r\n\r\n        \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448 Url \u0438 \u0442\u0430\u0441\u043a \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\r\n        _delegate.QueueHolder.Add(task, url);\r\n\r\n        \/\/\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443\r\n        task.Resume();\r\n    }\r\n}<\/code><\/pre><p><\/br><\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre class=\"e2-text-code\"><code>\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0435\u0441\u0441\u0438\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\r\nDownloadSession session = new DownloadSession((url, tempFileLocation) =&gt;\r\n    {\r\n        \/\/\u0435\u0441\u043b\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 - \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\r\n        if (item.url == url)\r\n        {\r\n            \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n        }\r\n    }, (url, percent) =&gt;\r\n    {\r\n        if (item.url == url)\r\n        {\r\n            \/\/\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\r\n        }\r\n    });\r\n\r\n\/\/\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443\r\nsession.StartDownload(item.url);<\/code><\/pre><\/div>","date_published":"2016-01-03T10:53:01+03:00","date_modified":"2016-01-03T10:52:56+03:00","_date_published_rfc2822":"Sun, 03 Jan 2016 10:53:01 +0300","_rss_guid_is_permalink":"true","_rss_guid":"http:\/\/bibobo.ru\/all\/ispolzovanie-nsurlsession-dlya-zagruzki-faylov-ios\/","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css","system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}},{"id":"26","url":"http:\/\/bibobo.ru\/all\/realizaciya-uvedomleniy-indikatorov-dlya-zagruzhaemyh-na-server\/","title":"\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439-\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f\u00a0\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440 \u0444\u0430\u0439\u043b\u043e\u0432 (Android)","content_html":"<p>\u041f\u0440\u0438\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0437\u00a0\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0431\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0415\u0441\u043b\u0438 \u0434\u0438\u0437\u0430\u0439\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0431\u0430\u0440\u0430 (\u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f). \u041d\u043e\u00a0\u043d\u0430\u00a0\u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0432\u00a0\u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043c\u0430\u0445\u043d\u0443\u0442\u044c.<\/p>\n<p><\/br><\/p>\n<p>\u041f\u0440\u0438\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c:<\/p>\n<p><\/br><\/p>\n<ol start=\"1\">\n<li>\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 (\u0435\u0441\u043b\u0438 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0435\u0434\u0438\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432)<\/li>\n<li>\u041a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440<br \/>\n<input id=\"button_android_download_file_notification\" type=\"button\" onclick=\"toggle(cut_android_download_file_notification, button_android_download_file_notification)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/li>\n<\/ol>\n<div id=\"cut_android_download_file_notification\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br><\/p>\n<p>\u0414\u043b\u044f\u00a0\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043a\u043e\u043b\u044c \u0443\u0433\u043e\u0434\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439, \u043d\u043e\u00a0\u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435, \u043b\u0438\u0431\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e\u00a0\u2014 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437\u00a0\u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u0441\u0432\u043e\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 ID. \u041d\u0438\u0436\u0435 \u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u00a0\u0441\u0442\u0430\u0440\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u00a0\u0435\u0433\u043e \u043e\u0442\u043c\u0435\u043d\u044b, \u043f\u043e\u00a0\u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438:<\/p>\n<p><\/br><\/p>\n<pre class=\"e2-text-code\"><code>\/\/\u041a\u0435\u0448, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a id \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439\r\nprivate List&lt;int&gt; _notificationCache = new List&lt;int&gt;();\r\n\r\nprivate void UploadFile()\r\n{\r\n    \/\/\u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0439 ID \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 (\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0435\u0448)\r\n    Random r = new Random(System.Environment.TickCount);\r\n    int notificationId = 0;\r\n    while (notificationId == 0 || _notificationCache.Contains(notificationId))\r\n    {\r\n        notificationId = r.Next(1, 1000);\r\n    }\r\n    _notificationCache.Add(notificationId);\r\n    \/\/\r\n                \r\n    Notification.Builder builder = new Notification.Builder(Activity);\r\n    builder.SetSmallIcon(Resource.Drawable.file_32x32)\r\n        \/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f\r\n        .SetContentTitle(filename)\r\n        \/\/\u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0448\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 &quot;\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u044e \u0444\u0430\u0439\u043b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440...&quot;\r\n        .SetContentText(Activity.GetString(Resource.String.attachement_uploading))\r\n        .SetAutoCancel(false)\r\n        \/\/\u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u043e\u0442\u043c\u0435\u043d\u0443 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c\r\n        .SetOngoing(true)\r\n        \/\/\u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440\u0435, \u043c\u0438\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0438 \u0442.\u043f.\r\n        .SetDefaults(NotificationDefaults.All);\r\n\r\n    NotificationManager manager = (NotificationManager)Activity.GetSystemService(Activity.NotificationService);\r\n    manager.Notify(notificationId, builder.Build());\r\n\r\n    \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n    \/\/ ... \u043a\u043e\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 ... \/\/\r\n    \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n    \/\/\u043e\u0442\u043c\u0435\u043d\u044f\u0435\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0435\u0433\u043e ID \u0438\u0437 \u043a\u0435\u0448\u0430\r\n    manager.Cancel(notificationId);\r\n    _notificationCache.Remove(notificationId);\r\n}<\/code><\/pre><\/div>","date_published":"2015-12-20T12:53:09+03:00","date_modified":"2015-12-20T12:52:49+03:00","_date_published_rfc2822":"Sun, 20 Dec 2015 12:53:09 +0300","_rss_guid_is_permalink":"true","_rss_guid":"http:\/\/bibobo.ru\/all\/realizaciya-uvedomleniy-indikatorov-dlya-zagruzhaemyh-na-server\/","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}}],"_e2_version":3254,"_e2_ua_string":"E2 (v3254; Aegea)"}