{"id":138,"date":"2013-01-05T00:29:26","date_gmt":"2013-01-04T22:29:26","guid":{"rendered":"http:\/\/osxadmin.cz\/?p=138"},"modified":"2021-01-10T17:43:10","modified_gmt":"2021-01-10T15:43:10","slug":"property-list","status":"publish","type":"post","link":"https:\/\/macadmin.cz\/?p=138","title":{"rendered":"Property List"},"content":{"rendered":"<p><a href=\"http:\/\/osxadmin.cz\/wp-content\/uploads\/plist.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/osxadmin.cz\/wp-content\/uploads\/plist-150x150.png\" alt=\"plist\" width=\"150\" height=\"150\" class=\"alignleft size-thumbnail wp-image-158\" srcset=\"https:\/\/macadmin.cz\/wp-content\/uploads\/plist-150x150.png 150w, https:\/\/macadmin.cz\/wp-content\/uploads\/plist-300x300.png 300w, https:\/\/macadmin.cz\/wp-content\/uploads\/plist-500x500.png 500w, https:\/\/macadmin.cz\/wp-content\/uploads\/plist.png 512w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>.plist soubory se v OS X vyskuj\u00ed v\u00edce ne\u017e hojn\u011b. Nej\u010dast\u011bji na n\u011b pravd\u011bpodobn\u011b naraz\u00edte v podob\u011b konfigura\u010dn\u00edho souboru n\u011bjak\u00e9 aplikace. Jejich vyu\u017e\u00edt\u00ed je v\u0161ak mnohem \u0161ir\u0161\u00ed.<\/p>\n<p>Property List je <a href=\"http:\/\/en.wikipedia.org\/wiki\/XML\"><b>XML<\/b><\/a> soubor s pevnou strukturou obsahu <a href=\"http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd\">definovanou<\/a> v <a href=\"http:\/\/en.wikipedia.org\/wiki\/Document_Type_Definition\"><b>DTD<\/b><\/a>. Data organizuje pomoc\u00ed datov\u00fdch typ\u016f ekvivaletn\u00edm k typ\u016fm prom\u011bnn\u00fdch v programovac\u00edm frameworku <a href=\"https:\/\/developer.apple.com\/library\/mac\/#documentation\/CoreFoundation\/Reference\/CoreFoundation_Collection\/_index.html\"><b>Core Foundation<\/b><\/a> (CF). Program\u00e1tor pou\u017e\u00edvaj\u00edc\u00ed CF ve sv\u00e9 OS X nebo iOS aplikaci m\u016f\u017ee velmi snadno zapsat datov\u00e9 objekty do souboru a na\u010d\u00edst je zp\u011bt. Z povahy XML form\u00e1tu je z\u0159ejm\u011b, \u017ee tento proces nen\u00ed vhodn\u00fd pro bin\u00e1rn\u00ed data. Sta\u010d\u00ed se pod\u00edvat na .plist obsahuj\u00edc\u00ed informace o u\u017eiveteli, kde je nacpan\u00fd profilov\u00fd obr\u00e1zek v JPG. (hledejte v \/var\/db\/dslocal\/nodes\/Default\/users s rootem :-))<br \/>\n<!--more--><\/p>\n<h2>Struktura .plistu<\/h2>\n<pre class=\"brush: xml; gutter: true; first-line: 1; highlight: []; html-script: false\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\r\n&lt;!DOCTYPE plist PUBLIC &quot;-\/\/Apple\/\/DTD PLIST 1.0\/\/EN&quot; &quot;http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd&quot;&gt;\r\n&lt;plist version=&quot;1.0&quot;&gt;\r\n&lt;dict&gt;\r\n...\r\n&lt;\/dict&gt;\r\n&lt;\/plist&gt;\r\n<\/pre>\n<p>#1 Hlavi\u010dka ozna\u010duj\u00edc\u00ed XML dokument<br \/>\n#2 Definice struktury dokumentu pomoc\u00ed DTD<br \/>\n#3 Ko\u0159enov\u00fd element XML dokumentu -> zde za\u010d\u00edn\u00e1 obsah plistu<br \/>\n#4 Za\u010d\u00e1tek slovn\u00edku<\/p>\n<p>Slovn\u00edku (Dictionary) je datov\u00e1 strukura, krer\u00e1 obsahuje prvky identifikovan\u00e9 kl\u00ed\u010dem (key). Ka\u017ed\u00fd prvek m\u00e1 n\u011bjak\u00fd obsah (value). U plist\u016f se \u010dasto pou\u017e\u00edv\u00e1 term\u00edn &#8220;key-value pair&#8221; = kl\u00ed\u010d hodnota. Uvnit\u0159 m\u016f\u017eete potkat n\u00e1sleduj\u00edc\u00ed konstrukce:<\/p>\n<p>\u0158et\u011bzec (CFString)<\/p>\n<pre class=\"brush: xml; gutter: false; first-line: 1; highlight: []; html-script: false\">&lt;key&gt;retezec&lt;\/key&gt;\r\n&lt;string&gt;obsahretezce&lt;\/string&gt;<\/pre>\n<p>Cel\u00e9 a desetinn\u00e9 \u010d\u00edslo (CFNumber)<\/p>\n<pre class=\"brush: xml; gutter: false; first-line: 1; highlight: []; html-script: false\">&lt;key&gt;width&lt;\/key&gt;\r\n&lt;celecislo&gt;181&lt;\/integer&gt;\r\n&lt;key&gt;realnecislo&lt;\/key&gt;\r\n&lt;real&gt;0.0&lt;\/real&gt;<\/pre>\n<p>Datum (CFDate)<\/p>\n<pre class=\"brush: xml; gutter: false; first-line: 1; highlight: []; html-script: false\">&lt;key&gt;datum&lt;\/key&gt;\r\n&lt;date&gt;2012-12-24T21:56:18Z&lt;\/date&gt;<\/pre>\n<p>Boolean (CFBoolean)<\/p>\n<pre class=\"brush: xml; gutter: false; first-line: 1; highlight: []; html-script: false\">&lt;key&gt;jetopravda&lt;\/key&gt;\r\n&lt;true\/&gt;\r\n&lt;key&gt;nenitopravda&lt;\/key&gt;\r\n&lt;false\/&gt;<\/pre>\n<p>Bin\u00e1rn\u00ed data (CFData)<\/p>\n<pre class=\"brush: xml; gutter: false; first-line: 1; highlight: []; html-script: false\">&lt;key&gt;spatialData&lt;\/key&gt;\r\n&lt;data&gt;\r\nXgIAACgAAAD\/\/\/\/\/\/\/8AAA==\r\n&lt;\/data&gt;\r\n<\/pre>\n<p>Data lze seskupovat do pol\u00ed a slovn\u00edk\u016f, kter\u00e9 mohou b\u00fdt v\u00edce\u00farov\u0148ov\u00e9. (CFArray a CFDictionary)<\/p>\n<pre class=\"brush: xml; gutter: false; first-line: 1; highlight: []; html-script: false\">&lt;key&gt;poloe&lt;\/key&gt;\r\n&lt;array&gt;\r\n &lt;string&gt;polozka1&lt;\/string&gt;\r\n &lt;string&gt;polozka2&lt;\/string&gt;\r\n &lt;string&gt;polozka3&lt;\/string\r\n&lt;\/array&gt;\r\n\r\n&lt;key&gt;slovnik&lt;\/key&gt;\r\n &lt;dict&gt;\r\n &lt;key&gt;klic&lt;\/key&gt;\r\n &lt;string&gt;hodnota&lt;\/string&gt;\r\n &lt;key&gt;macbook&lt;\/key&gt;\r\n &lt;real&gt;pro&lt;\/real&gt;\r\n &lt;key&gt;dalsipole&lt;\/key&gt;\r\n &lt;array&gt;\r\n  &lt;string&gt;dalsipolozka1&lt;\/string&gt;\r\n  &lt;string&gt;dalsipolozka2&lt;\/string&gt;\r\n &lt;\/array&gt;\t\r\n&lt;\/dict&gt;\r\n<\/pre>\n<p>Pojmenov\u00e1n\u00ed kl\u00ed\u010d\u016f a obsah prom\u011bnn\u00fd je zcela v re\u017eiji tv\u016frce property listu. Mus\u00ed v\u0161ak dodr\u017eet pravidla pro XML dokumenty a strukturu danou DTD\u010dkem.<\/p>\n<p>V\u00edce \u010dten\u00ed v manu\u00e1lov\u00e9 str\u00e1nce -> <code>man plist<\/code><\/p>\n<h2>Form\u00e1ty<\/h2>\n<p>Vedle oby\u010dejn\u00fdch textov\u00fdch soubor\u016f \u010dasto potk\u00e1te bin\u00e1rn\u011b zak\u00f3dovan\u00fd property list. Strojov\u011b se o n\u011bco l\u00e9pe \u010dte a u\u010det\u0159\u00ed se p\u00e1r bajt\u016f na disku (i kdy\u017e to rozhodn\u011b nelze srovn\u00e1vat se sofistikovan\u011bj\u0161\u00ed komprimac\u00ed). N\u011bkdy to pak m\u016f\u017ee b\u00fdt probl\u00e9m, kdy\u017e pot\u0159ebujete .plist editovat ru\u010dn\u011b. Bu\u010f lze s\u00e1hnout po sofistikovan\u011bj\u0161\u00edm n\u00e1stroji pro editov\u00e1n\u00ed t\u011bchto soubor\u016f (XCode, PlistEdit Pro, &#8230;) nebo .plist p\u0159ev\u00e9zt z bin\u00e1rn\u00ed podoby do textov\u00e9 a zase zp\u011bt. K tomu slou\u017e\u00ed jednoduch\u00e1 utilitka &#8211; <code>plutil<\/code>. <\/p>\n<p>binary -> text<br \/>\n<code>plutil -convert xml1 BIN\u00c1RN\u00cd_PLIST -o TEXTOV\u00dd_PLIST<\/code><br \/>\ntext -> binary<br \/>\n<code>plutil -convert binary1 BIN\u00c1RN\u00cd_PLIST -o TEXTOV\u00dd_PLIST<\/code><\/p>\n<p><code>plutil<\/code> um\u00ed p\u0159ev\u00e1d\u011bt i do json form\u00e1tu, ale konverze m\u016f\u017ee v n\u011bkter\u00fdch p\u0159\u00edpadech selhat. Plisty se v t\u00e9to podob\u011b nav\u00edc prakticky nevyskytuj\u00ed.<\/p>\n<p>Po \u00faprav\u00e1ch je dobr\u00fdm zvykem prov\u00e9st kontrolu<br \/>\n<code>plutil -lint PLIST_KE_KONTROLE<\/code><\/p>\n<p>P\u00e1r dal\u0161\u00edch p\u0159ep\u00edn\u00e1\u010d\u016f v man str\u00e1nce -> <code>man plutil<\/code> <a href=\"https:\/\/developer.apple.com\/library\/mac\/#documentation\/Darwin\/Reference\/ManPages\/man1\/plutil.1.html\">(link)<\/a><\/p>\n<h2>Dal\u0161\u00ed \u010dten\u00ed<\/h2>\n<p><a href=\"http:\/\/en.wikipedia.org\/wiki\/Property_list\">Wikipedia<\/a><br \/>\n<a href=\"https:\/\/developer.apple.com\/library\/mac\/#documentation\/Cocoa\/Conceptual\/PropertyLists\/Introduction\/Introduction.html\">Apple Dev Article<\/a><br \/>\n<a href=\"http:\/\/www.bresink.com\/osx\/300268194\/Docs-en\/pgs\/PListIntro.html\">http:\/\/www.bresink.com\/osx\/300268194\/Docs-en\/pgs\/PListIntro.html<\/a><\/p>\n<p><a href=\"http:\/\/zvon.org\/comp\/r\/tut-XML.html\">\u00davod do XML na zvon.org<\/a><br \/>\n<a href=\"http:\/\/zvon.org\/comp\/r\/tut-DTD.html#Pages~Root_element\">\u00davod do DTD na zvon.org<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>.plist soubory se v OS X vyskuj\u00ed v\u00edce ne\u017e hojn\u011b. Nej\u010dast\u011bji na n\u011b pravd\u011bpodobn\u011b naraz\u00edte v podob\u011b konfigura\u010dn\u00edho souboru n\u011bjak\u00e9 aplikace. Jejich vyu\u017e\u00edt\u00ed je v\u0161ak mnohem \u0161ir\u0161\u00ed. Property List je XML soubor s pevnou strukturou obsahu definovanou v DTD. Data organizuje pomoc\u00ed datov\u00fdch typ\u016f ekvivaletn\u00edm k typ\u016fm prom\u011bnn\u00fdch v programovac\u00edm frameworku Core Foundation (CF). Program\u00e1tor &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/macadmin.cz\/?p=138\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Property List&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-138","post","type-post","status-publish","format-standard","hentry","category-macos"],"_links":{"self":[{"href":"https:\/\/macadmin.cz\/index.php?rest_route=\/wp\/v2\/posts\/138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/macadmin.cz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/macadmin.cz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/macadmin.cz\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/macadmin.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=138"}],"version-history":[{"count":17,"href":"https:\/\/macadmin.cz\/index.php?rest_route=\/wp\/v2\/posts\/138\/revisions"}],"predecessor-version":[{"id":1012,"href":"https:\/\/macadmin.cz\/index.php?rest_route=\/wp\/v2\/posts\/138\/revisions\/1012"}],"wp:attachment":[{"href":"https:\/\/macadmin.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/macadmin.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/macadmin.cz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}