{"id":3397,"date":"2019-08-16T09:04:23","date_gmt":"2019-08-16T07:04:23","guid":{"rendered":"https:\/\/wp-test.itcraft.pl\/pl\/?p=3397"},"modified":"2020-03-05T09:52:07","modified_gmt":"2020-03-05T08:52:07","slug":"dodawanie-today-extension-w-8-krokach","status":"publish","type":"post","link":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/","title":{"rendered":"Dodawanie Today Extension w 8 krokach"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"http:\/\/schema.org\",\n  \"@type\": \"Article\",\n  \"mainEntityOfPage\": {\n  \"@type\": \"WebPage\",\n  \"@id\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/\"\n  },\n  \"headline\": \"Dodawanie Today Extension w 8 krokach\",\n \n    \"image\": [\n{\n\t\n  \"@type\": \"ImageObject\", \n  \"contentUrl\": \"itCraft-baner-fb-1200x900px-option14.png\",  \"url\":\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png\",\n  \"description\": \"Dodawanie Today Extension w 8 krokach\",\n  \"name\": \"Dodawanie Today Extension w 8 krokach\"\n\n}\n  \n  ],\n  \n  \"datePublished\": \"2019-08-16\",\n  \"dateModified\": \"2020-03-05\",\n  \"author\": {\n  \"@type\": \"Person\",\n  \"name\": \"Tomasz Olszewski\",\n  \"jobTitle\": \"iOS Developer\",\n  \"description\": \"iOS Developer\"\n\n  },\n  \"publisher\": {\n  \"@type\": \"Organization\",\n  \"name\": \"itCraftapps.com\",\n  \"logo\": {\n  \"@type\": \"ImageObject\",\n  \"url\": \"https:\/\/wp-test.itcraft.pl\/wp-content\/uploads\/2019\/04\/placeholder-post.png\"\n  },\n  \"description\": \"itCraftapps.com - Mobile App Development\"\n}}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\/\", \n  \"@type\": \"HowTo\", \n  \"name\": \"Dodawanie Today Extension w 8 krokach\",\n  \"description\": \"Poni\u017cej znajdziesz instrukcj\u0119 w 8 krokach (i jednym opcjonalnym) jak doda\u0107 Today Extension do twojego kodu.\",\n  \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png\",\n  \"totalTime\": \"PT1M\",\n  \"estimatedCost\": {\n    \"@type\": \"MonetaryAmount\",\n    \"currency\": \"PLN\",\n    \"value\": \"0\"\n  },\n  \"supply\": {\n    \"@type\": \"HowToSupply\",\n    \"name\": \"Apple\"\n  },\n  \"tool\": {\n    \"@type\": \"HowToTool\",\n    \"name\": \"XCode\"\n  },\n  \"step\": [{\n    \"@type\": \"HowToStep\",\n    \"text\": \"Stw\u00f3rz nowy projekt aplikacji\",\n    \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/themes\/itcraft\/dist\/images\/placeholder-post.png\",\n    \"name\": \"Stw\u00f3rz nowy projekt aplikacji\",\n    \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#1\"\n  },{\n    \"@type\": \"HowToStep\",\n    \"text\": \"Stw\u00f3rz nowy target dla Today Extension\",\n    \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png\",\n    \"name\": \"Today Extension\",\n    \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#2\"\n  },{\n    \"@type\": \"HowToStep\",\n    \"text\": \"Dodaj nowy label do MainInterface.storyboard\",\n    \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image5.png\",\n    \"name\": \"Nowy lebel\",\n    \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#3\"\n  },{\n    \"@type\": \"HowToStep\",\n    \"text\": \"Dodaj cia\u0142o klasy i po\u0142\u0105cz z plikiem storyboard\",\n    \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/themes\/itcraft\/dist\/images\/placeholder-post.png\",\n    \"name\": \"Dodaj cia\u0142o klasy i po\u0142\u0105cz z plikiem storyboard\",\n    \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#4\"\n  },{\n    \"@type\": \"HowToStep\",\n    \"text\": \"Dodaj kod do nag\u0142\u00f3wka pliku\",\n    \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/themes\/itcraft\/dist\/images\/placeholder-post.png\",\n    \"name\": \"Dodaj kod do nag\u0142\u00f3wka pliku\",\n    \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#5\"\n  },{\n    \"@type\": \"HowToStep\",\n    \"text\": \"Skopiuj funkcj\u0119 dodawania danych\",\n    \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/themes\/itcraft\/dist\/images\/placeholder-post.png\",\n    \"name\": \"Skopiuj funkcj\u0119 dodawania danych\",\n    \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#6\"\n  },{\n    \"@type\": \"HowToStep\",\n    \"text\": \"Zast\u0105p metod\u0119 viewDidLoad\",\n    \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/themes\/itcraft\/dist\/images\/placeholder-post.png\",\n    \"name\": \"Zast\u0105p metod\u0119 viewDidLoad\",\n    \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#7\"\n  },{\n    \"@type\": \"HowToStep\",\n    \"text\": \"Skompiluj i uruchom aplikacj\u0119\",\n    \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image1-576x1024-576x1024.png\",\n    \"name\": \"Skompiluj i uruchom aplikacj\u0119\",\n    \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#8\"\n  },{\n    \"@type\": \"HowToStep\",\n    \"text\": \"Dodaj funkcjonalno\u015b\u0107 \u201cPoka\u017c wi\u0119cej\/mniej\u201d\",\n    \"image\": \"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image2-576x1024-576x1024.png\",\n    \"name\": \"Dodaj funkcjonalno\u015b\u0107 \u201cPoka\u017c wi\u0119cej\/mniej\u201d\",\n    \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#9\"\n  }]    \n}\n<\/script>\n<script type=\"application\/ld+json\">\n    {\n      \"@context\": \"http:\/\/schema.org\",\n      \"@type\": \"Blog\",\n      \"name\": \"itCraftapps.com - Mobile App Development Blog\",\n      \"url\": \"https:\/\/itcraftapps.com\/pl\/blog\"\n    }\n  <\/script>\n\n\n\n\n<p>Od wprowadzenia <a href=\"https:\/\/itcraftapps.com\/pl\/zatrudnij-najlepszych-programistow-ios-do-swojego-projektu\/\">iOS<\/a> 8 w 2014 programi\u015bci maj\u0105 dost\u0119p do wielu u\u017cytecznych funkcjonalno\u015bci. Jedna z nich &#8211; Today Extension pozwala na wsp\u00f3\u0142dzielenie funkcjonalno\u015bci aplikacji z iOS i innymi aplikacjami. Today Extension umo\u017cliwia wy\u015bwietlanie informacji dla u\u017cytkownika w centrum powiadomie\u0144, wyszukiwarce lub na ekranie blokady. G\u0142\u00f3wnym zadaniem tego rozszerzenia jest zachowanie interakcji mi\u0119dzy aplikacj\u0105 i u\u017cytkownikiem nawet je\u015bli aplikacja nie jest otwarta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Spis tre\u015bci<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#1\">Stw\u00f3rz nowy projekt aplikacji<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#2\">Stw\u00f3rz nowy target dla Today Extension<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#3\">Dodaj nowy label do MainInterface.storyboard<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#4\">Dodaj cia\u0142o klasy i po\u0142\u0105cz z plikiem storyboard<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#5\">Dodaj kod do nag\u0142\u00f3wka pliku<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#6\">Skopiuj funkcj\u0119 dodawania danych<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#7\">Zast\u0105p metod\u0119 viewDidLoad<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#8\">Skompiluj i uruchom aplikacj\u0119<\/a><\/span><\/li><li><span style=\"text-decoration: underline;\"><a href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#9\">Dodaj funkcjonalno\u015b\u0107 \u201cPoka\u017c wi\u0119cej\/mniej\u201d (opcjonalnie)<\/a><\/span><\/li><\/ol>\n\n\n\n<br \/>\n\n\n\n<p>Poni\u017cej znajdziesz instrukcj\u0119 w 8 krokach (i jednym opcjonalnym) jak doda\u0107 Today Extension do twojego kodu.&nbsp;<\/p>\n\n\n\n<p>Zacznijmy wi\u0119c!<br \/><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"1\">Krok 1: Stw\u00f3rz nowy projekt aplikacji<\/h2>\n\n\n\n<p>Today Extension dzia\u0142a tylko w powi\u0105zaniu z aplikacj\u0105. Aby utworzy\u0107 nowy projekt aplikacji otw\u00f3rz XCode, wybierz New -&gt; Project -&gt; iOS -&gt; Single View App. Po naci\u015bni\u0119ciu Next, nazwij sw\u00f3j projekt i wybierz folder gdzie ma on by\u0107 zapisany.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"2\">Krok 2: Stw\u00f3rz nowy target dla Today Extension<\/h2>\n\n\n\n<p>Nast\u0119pnie, utw\u00f3rz nowy target dla Today Extension. Mo\u017cesz to wykona\u0107 przez wybranie Editor -&gt; Add Target -&gt; Today Extension w sekcji iOS \\ Application Extension:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"731\" height=\"529\" src=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png\" alt=\"Widok Xcode Application Extension\" class=\"wp-image-3943\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png 731w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7-300x217.png 300w\" sizes=\"(max-width: 731px) 100vw, 731px\" \/><\/figure>\n\n\n\n<p> W kolejnym widoku nale\u017cy ustawi\u0107 Nazw\u0119 Produktu np.\u201cExtension\u201d. Po wci\u015bni\u0119ciu \u201cFinish\u201d w projekcie, zobaczysz dwa targety: <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"863\" height=\"238\" src=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image4.png\" alt=\"Xcode Application Extension\" class=\"wp-image-3944\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image4.png 863w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image4-300x83.png 300w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image4-768x212.png 768w\" sizes=\"(max-width: 863px) 100vw, 863px\" \/><\/figure>\n\n\n\n<p>Utworzone zostaj\u0105 nast\u0119puj\u0105ce pliki:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"513\" src=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image6-1024x513-1024x513.png\" alt=\"Tworzenie plik\u00f3w Application Extension w Xcode\" class=\"wp-image-3945\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image6-1024x513.png 1024w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image6-1024x513-300x150.png 300w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image6-1024x513-768x385.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"3\">Krok 3: Dodaj nowy label do MainInterface.storyboard<\/h2>\n\n\n\n<p>Teraz otw\u00f3rz plik MainInterface.storyboard, zmie\u0144 wysoko\u015b\u0107 kontrolera widoku na 200, usu\u0144 istniej\u0105cy label i dodaj nowy, o tytule \u201c(No data)\u201d w pozycji wy\u015brodkowanej:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"866\" height=\"373\" src=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image5.png\" alt=\"\" class=\"wp-image-3946\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image5.png 866w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image5-300x129.png 300w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image5-768x331.png 768w\" sizes=\"(max-width: 866px) 100vw, 866px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"4\">Krok 4: Dodaj cia\u0142o klasy i po\u0142\u0105cz z plikiem storyboard<\/h2>\n\n\n\n<p>Przejd\u017a do pliku TodayViewController.swift i dodaj poni\u017csze do cia\u0142a klasy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@IBOutlet weak var ipLabel: UILabel!<\/code><\/pre>\n\n\n\n<p>i po\u0142\u0105cz z plikiem storyboard<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"5\">Krok 5: Dodaj kod do nag\u0142\u00f3wka pliku<\/h2>\n\n\n\n<p>Dodaj poni\u017csze do nag\u0142\u00f3wka pliku:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct Response: Codable {\n    let ip: String\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"6\">Krok 6: Skopiuj funkcj\u0119 dodawania danych<\/h2>\n\n\n\n<p>Nast\u0119pnie, skopiuj nast\u0119puj\u0105c\u0105 funkcj\u0119 do cia\u0142a TodayViewController.swift:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ MARK: - Loading of data\n\t\n\tfunc loadData() {\n\t\tDispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {\n\t\t\t\n            guard let url = URL(string: \"https:\/\/api.ipify.org\/?format=json\") else { return }\n            URLSession.shared.dataTask(with: url) { data, response, error in\n                \n                guard let data = data else { return }\n                do {\n                    let res = try JSONDecoder().decode(Response.self, from: data)\n                    DispatchQueue.main.async {\n                        self.ipLabel.text = res.ip\n                    }\n                } catch let error {\n                    DispatchQueue.main.async {\n                        self.ipLabel.text = error.localizedDescription\n                    }\n                }\n            }.resume()\n\t\t}\n\t}<\/code><\/pre>\n\n\n\n<p>Powy\u017csza funkcja podmienia label \u201c(No data)\u201d na label twojego API kiedy po\u0142\u0105czenie z internetem jest aktywne.<\/p>\n\n\n\n<p>Funkcja jest ju\u017c zaimplementowana, ale jeszcze nie wywo\u0142ywana.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"7\">Krok 7: Zast\u0105p metod\u0119 viewDidLoad<\/h2>\n\n\n\n<p>Podmie\u0144 metod\u0119 viewDidLoad na:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> override func viewDidLoad() {\n        super.viewDidLoad()\n  \n        self.preferredContentSize.height = 200\n        loadData()\n    }<\/code><\/pre>\n\n\n\n<p> Wywo\u0142aj funkcj\u0119 loadData w metodzie widgetPerformUpdate: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {\n        \/\/ Perform any setup necessary in order to update the view.\n\n        \/\/ If an error is encountered, use NCUpdateResult.Failed\n        \/\/ If there's no update required, use NCUpdateResult.NoData\n        \/\/ If there's an update, use NCUpdateResult.NewData\n\n        loadData()\n\t\t\n        completionHandler(NCUpdateResult.newData)\n    }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"8\">Krok 8: Skompiluj i uruchom aplikacj\u0119<\/h2>\n\n\n\n<p>Naci\u015bni\u0119cie z przytrzymaniem ikony aplikacji wy\u015bwietli nast\u0119puj\u0105ce informacje:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image1-576x1024-576x1024.png\" alt=\"\" class=\"wp-image-3947\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image1-576x1024.png 576w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image1-576x1024-169x300.png 169w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/figure>\n\n\n\n<p>Pokazana warto\u015b\u0107 to tw\u00f3j adres IP.<\/p>\n\n\n\n<p>Mo\u017cesz te\u017c doda\u0107 widget do twojej listy widget\u00f3w wy\u015bwietlanej na ekranie g\u0142\u00f3wnym po przesuni\u0119ciu ekranu w lewo:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image2-1-576x1024-576x1024.png\" alt=\"\" class=\"wp-image-3948\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image2-1-576x1024.png 576w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image2-1-576x1024-169x300.png 169w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-align:left\" id=\"9\">Krok 9 (opcjonalny): Dodaj funkcjonalno\u015b\u0107 \u201cPoka\u017c wi\u0119cej\/mniej\u201d<\/h2>\n\n\n\n<p>Wraz z wprowadzeniem iOS10 Apple dostarczy\u0142 API obs\u0142uguj\u0105cy funkcj\u0119 &#8222;Show More\/Show Less&#8221;. Rozszerz metod\u0119 viewDidLoad:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>override func viewDidLoad() {\n        super.viewDidLoad()\n\t\t\n\t\tif #available(iOSApplicationExtension 10.0, *) {\n\t\t\textensionContext?.widgetLargestAvailableDisplayMode = .expanded\n\t\t}\n        \n\t\tself.preferredContentSize.height = 200\n\t\t\n\t\tloadData()\n    }<\/code><\/pre>\n\n\n\n<p><em>Dodaj poni\u017csze do cia\u0142a TodayViewController:<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func widgetMarginInsets(forProposedMarginInsets defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {\n\t\treturn UIEdgeInsets.zero\n\t}\n\t\n\t@available(iOSApplicationExtension 10.0, *)\n\tfunc widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {\n\t\tif activeDisplayMode == .expanded {\n\t\t\tpreferredContentSize = CGSize(width: maxSize.width, height: 300)\n\t\t}\n\t\telse if activeDisplayMode == .compact {\n\t\t\tpreferredContentSize = maxSize\n\t\t}\n\t}<\/code><\/pre>\n\n\n\n<p> wy\u015bwietli si\u0119: <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image2-576x1024-576x1024.png\" alt=\"\" class=\"wp-image-3949\" srcset=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image2-576x1024.png 576w, https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image2-576x1024-169x300.png 169w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>&#8222;image&#8221;: [ { &#8222;@type&#8221;: &#8222;ImageObject&#8221;, &#8222;contentUrl&#8221;: &#8222;itCraft-baner-fb-1200x900px-option14.png&#8221;, &#8222;url&#8221;:&#8221;https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png&#8221;, &#8222;description&#8221;: &#8222;Dodawanie Today Extension w 8 krokach&#8221;, &#8222;name&#8221;: &#8222;Dodawanie Today Extension w 8 krokach&#8221; } ], &#8222;datePublished&#8221;: &#8222;2019-08-16&#8221;, &#8222;dateModified&#8221;: &#8222;2020-03-05&#8221;, &#8222;author&#8221;: { &#8222;@type&#8221;: &#8222;Person&#8221;, &#8222;name&#8221;: &#8222;Tomasz Olszewski&#8221;, &#8222;jobTitle&#8221;: &#8222;iOS Developer&#8221;, &#8222;description&#8221;: &#8222;iOS Developer&#8221; }, &#8222;publisher&#8221;: { &#8222;@type&#8221;: &#8222;Organization&#8221;, &#8222;name&#8221;: &#8222;itCraftapps.com&#8221;, &#8222;logo&#8221;: { &#8222;@type&#8221;: &#8222;ImageObject&#8221;, &#8222;url&#8221;: &#8222;https:\/\/wp-test.itcraft.pl\/wp-content\/uploads\/2019\/04\/placeholder-post.png&#8221; },&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-3397","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-news"},"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dodawanie Today Extension w 8 krokach - itCraftapps.com<\/title>\n<meta name=\"description\" content=\"Przedstawiamy jak w 8 krokach doda\u0107 Today Extension do X-code.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dodawanie Today Extension w 8 krokach - itCraftapps.com\" \/>\n<meta property=\"og:description\" content=\"Przedstawiamy jak w 8 krokach doda\u0107 Today Extension do X-code.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/\" \/>\n<meta property=\"og:site_name\" content=\"Aplikacje mobilne i webowe dla firm | itCraft\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-16T07:04:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-03-05T08:52:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dodawanie Today Extension w 8 krokach - itCraftapps.com","description":"Przedstawiamy jak w 8 krokach doda\u0107 Today Extension do X-code.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/","og_locale":"pl_PL","og_type":"article","og_title":"Dodawanie Today Extension w 8 krokach - itCraftapps.com","og_description":"Przedstawiamy jak w 8 krokach doda\u0107 Today Extension do X-code.","og_url":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/","og_site_name":"Aplikacje mobilne i webowe dla firm | itCraft","article_published_time":"2019-08-16T07:04:23+00:00","article_modified_time":"2020-03-05T08:52:07+00:00","og_image":[{"url":"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png","type":"","width":"","height":""}],"author":"root","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/","url":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/","name":"Dodawanie Today Extension w 8 krokach - itCraftapps.com","isPartOf":{"@id":"https:\/\/itcraftapps.com\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#primaryimage"},"image":{"@id":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#primaryimage"},"thumbnailUrl":"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png","datePublished":"2019-08-16T07:04:23+00:00","dateModified":"2020-03-05T08:52:07+00:00","author":{"@id":"https:\/\/itcraftapps.com\/pl\/#\/schema\/person\/7f005eebbb23587ebb5e67da80d14679"},"description":"Przedstawiamy jak w 8 krokach doda\u0107 Today Extension do X-code.","breadcrumb":{"@id":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#primaryimage","url":"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png","contentUrl":"https:\/\/itcraftapps.com\/pl\/wp-content\/uploads\/sites\/5\/2020\/01\/image7.png"},{"@type":"BreadcrumbList","@id":"https:\/\/itcraftapps.com\/pl\/blog\/dodawanie-today-extension-w-8-krokach\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/itcraftapps.com\/pl\/"},{"@type":"ListItem","position":2,"name":"Dodawanie Today Extension w 8 krokach"}]},{"@type":"WebSite","@id":"https:\/\/itcraftapps.com\/pl\/#website","url":"https:\/\/itcraftapps.com\/pl\/","name":"Aplikacje mobilne i webowe dla firm | itCraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itcraftapps.com\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Person","@id":"https:\/\/itcraftapps.com\/pl\/#\/schema\/person\/7f005eebbb23587ebb5e67da80d14679","name":"root","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/itcraftapps.com\/pl\/#\/schema\/person\/image\/","url":"https:\/\/itcraftapps.com\/pl\/wp-content\/litespeed\/avatar\/5\/c28d2298456f70316440c99aa0dc214f.jpg?ver=1776858916","contentUrl":"https:\/\/itcraftapps.com\/pl\/wp-content\/litespeed\/avatar\/5\/c28d2298456f70316440c99aa0dc214f.jpg?ver=1776858916","caption":"root"},"url":"https:\/\/itcraftapps.com\/pl\/blog\/author\/root\/"}]}},"_links":{"self":[{"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/posts\/3397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/comments?post=3397"}],"version-history":[{"count":0,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/posts\/3397\/revisions"}],"wp:attachment":[{"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/media?parent=3397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/categories?post=3397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itcraftapps.com\/pl\/wp-json\/wp\/v2\/tags?post=3397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}