<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Maciej Grabek &#187; UI</title>
	<atom:link href="https://blog.maciejgrabek.com/tag/ui/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.maciejgrabek.com</link>
	<description>/* Make it See Sharp - Windows Phone, C#, .NET i nie tylko */</description>
	<lastBuildDate>Mon, 27 Oct 2014 11:18:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Windows Phone Capability Detection Tool inaczej &#8211; UI</title>
		<link>https://blog.maciejgrabek.com/2011/02/20/windows-phone-capability-detection-tool-inaczej-ui/</link>
		<comments>https://blog.maciejgrabek.com/2011/02/20/windows-phone-capability-detection-tool-inaczej-ui/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 21:55:43 +0000</pubDate>
		<dc:creator><![CDATA[maciek]]></dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Capabilities]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://maciejgrabek.com/?p=10560</guid>
		<description><![CDATA[Capabilities &#8211; na początek trochę teorii Przy tworzeniu aplikacji na Windows Phone w naszym projekcie dodawany jest zawsze plik WMAppManifest.xml, który znajduje się w katalogu Properties. Istotną jego częścią jest informacja na temat tak zwanych capabilities, czyli elementów platformy, z których nasza aplikacja będzie korzystać. Domyślnie zawarte tam są wszystkie możliwe wpisy widoczne na listingu 1. Należą do nich między innymi korzystanie z połączenia sieciowego, mikrofonu, akcelerometru, notyfikacji itp. Listing 1. Capabilities 1 2 3 4 5 6 7 8 9 10 11 12 13 &#60;Capabilities&#62; &#60;Capability Name=&#34;ID_CAP_GAMERSERVICES&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_IDENTITY_DEVICE&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_IDENTITY_USER&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_LOCATION&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_MEDIALIB&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_MICROPHONE&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_NETWORKING&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_PHONEDIALER&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_PUSH_NOTIFICATION&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_SENSORS&#34;/&#62; &#60;Capability Name=&#34;ID_CAP_WEBBROWSERCOMPONENT&#34;/&#62; &#60;/Capabilities&#62; Informacje te są o tyle istotne, że informują system po jakie uprawnienia będzie sięgać nasza aplikacja. W przypadku próby odwołania się do funkcjonalności, która nie jest uwzględniona w sekcji capabilities wówczas zostanie zgłoszony błąd bezpieczeństwa, a nasza aplikacja zostanie zatrzymana. Capabilities też są wykorzystywane podczas procesu dodawania aplikacji do marketplace. W tym momencie proces ten analizuje paczkę z naszą aplikacją pod i następnie ustala ich listę usuwając zbędne elementy. Po co w takim razie jest ta informacja w WMAppManifest, skoro możnaby wychodzić z założenia &#8211; używam wszystkiego, a wy znajdździe to,<a href="https://blog.maciejgrabek.com/2011/02/20/windows-phone-capability-detection-tool-inaczej-ui/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<h2>Capabilities &#8211; na początek trochę teorii</h2>
<p>Przy tworzeniu aplikacji na Windows Phone w naszym projekcie dodawany jest zawsze plik WMAppManifest.xml, który znajduje się w katalogu Properties. Istotną jego częścią jest informacja na temat tak zwanych capabilities, czyli elementów platformy, z których nasza aplikacja będzie korzystać. Domyślnie zawarte tam są wszystkie możliwe wpisy widoczne na listingu 1. Należą do nich między innymi korzystanie z połączenia sieciowego, mikrofonu, akcelerometru, notyfikacji itp.</p>
<p><strong>Listing 1. Capabilities</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capabilities<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_GAMERSERVICES&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_IDENTITY_DEVICE&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_IDENTITY_USER&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_LOCATION&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_MEDIALIB&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_MICROPHONE&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_NETWORKING&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_PHONEDIALER&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_PUSH_NOTIFICATION&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_SENSORS&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Capability</span> <span style="color: #000066;">Name</span>=<span style="color: #ff0000;">&quot;ID_CAP_WEBBROWSERCOMPONENT&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Capabilities<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Informacje te są o tyle istotne, że informują system po jakie uprawnienia będzie sięgać nasza aplikacja. W przypadku próby odwołania się do funkcjonalności, która nie jest uwzględniona w sekcji capabilities wówczas zostanie zgłoszony błąd bezpieczeństwa, a nasza aplikacja zostanie zatrzymana.</p>
<p>Capabilities też są wykorzystywane podczas procesu dodawania aplikacji do marketplace. W tym momencie proces ten analizuje paczkę z naszą aplikacją pod i następnie ustala ich listę usuwając zbędne elementy. Po co w takim razie jest ta informacja w WMAppManifest, skoro możnaby wychodzić z założenia &#8211; używam wszystkiego, a wy znajdździe to, czego jednak nie potrzebuję. Jeżeli weźmiemy pod uwagę, że proces weryfikacji może się w przyszłości zmienić i nie pomagać użytkownikowi w określaniu właściwych wartości, to ocena przydatności WMAppManifest ulega zmianie <img src="https://blog.maciejgrabek.com/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Jeżeli okaże się, że automatyczne usuwanie niepotrzebnych wpisów zosgtanie zarzucone, to te śmieci mogą mieć duży wpływ na postrzeganie naszej aplikacji. Wyobraźmy sobie prosty przykład: tworzymy prosty stoper i umieszczamy go na marketplace bez czyszczenia manifestu. W momencie gdy użytkownik znajduje naszą aplikację i zobaczy, że korzysta ona z sensorów, GPS, notyfikacji, sieci, mikrofonu itp, to podejrzewam, że zastanowi się zanim ją zainstaluje.</p>
<h2>Koniec commandline &#8211; czyli Windows Phone Capability Detection Tool UI</h2>
<p>Na szczęście do analizy naszej aplikacji pod kątem capabilities istnieje narzędzie dostarczane z Windows Phone Developer Tools o nazwie <a href="http://msdn.microsoft.com/en-us/library/gg180730(v=vs.92).aspx" target="_blank">Windows Phone Capability Detection Tool</a>. Jest to narzędzie dostępne z linii komend, które można znaleźć w katalogu %ProgramFiles%\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect.</p>
<p>Składnia jest bardzo prosta. Wywołujemy komendę CapabilityDetection.exe podajemy plik z regułami (Rules.xml) a następnie w apostrofach ścieżkę do naszej aplikacji. Może to być ścieżka do pliku XAP, lub po prostu do katalogu, który ją zawiera. W rezultacie otrzymujemy listę używanych elementów, które powinny się znaleźć w manifeście naszej aplikacji. Przykład wykorzystania widać na rysunku 1.</p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2011/02/WindowsPhoneCapabilityDetectionTool.png" target="_blank"><img class="alignnone size-medium wp-image-10561" title="WindowsPhoneCapabilityDetectionTool" src="http://maciejgrabek.com/wp-content/uploads/2011/02/WindowsPhoneCapabilityDetectionTool-300x68.png" alt="Windows Phone Capability Detection Tool" width="300" height="68" /></a></p>
<p><strong>Rysunek 1. Użycie CapabilityDetection.exe</strong></p>
<p>Jak każde narzędzie dostępne z poziomu command line jest ono mało wygodne. W związku z tym przygotowałem nakładkę graficzną o nazwie <em><strong>WindowsPhoneCapabilityDetectionTool UI</strong></em>, która znacznie (przynajmniej w mojej ocenie) ułatwia korzystanie z tego narzędzia. Ekran aplikacji widoczny jest na rysunku 2.</p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2011/02/WindowsPhoneCapabilityDetectionToolUI.png" target="_blank"><img class="alignnone size-medium wp-image-10562" title="WindowsPhoneCapabilityDetectionToolUI" src="http://maciejgrabek.com/wp-content/uploads/2011/02/WindowsPhoneCapabilityDetectionToolUI-160x300.png" alt="Windows Phone Capability Detection Tool UI" width="160" height="300" /></a></p>
<p><strong>Rysunek 2. Okno Windows Phone Capability Detection Tool UI</strong></p>
<p>Jego działanie sprowadza się do wykonania czterech kroków:</p>
<ol>
<li>Wybieramy folder skompilowanej aplikacji</li>
<li>Procesujemy aplikację</li>
<li>Kopiujemy kod</li>
<li>Podmieniamy sekcję capabilities</li>
</ol>
<p>W razie problemów korzystając z lupy możemy otworzyć okno pomocy w którym opisane są wszystkie elementy niezbędne do wygodnego korzystania z tego narzędzia.</p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2011/02/WindowsPhoneCapabilityDetectionToolUIHelp.png" target="_blank"><img title="WindowsPhoneCapabilityDetectionToolUIHelp" src="http://maciejgrabek.com/wp-content/uploads/2011/02/WindowsPhoneCapabilityDetectionToolUIHelp-280x300.png" alt="Windows Phone Capability Detection Tool UI Help" width="280" height="300" /></a></p>
<p><strong>Rysunek 3. Okno pomocy Windows Phone Capability Detection Tool UI</strong></p>
<p><strong>Ważna informacja</strong></p>
<p>Z racji na konieczność dodania pliku <em>app.manifest</em>, w którym jest wpis o dziedziczeniu uprawnień od aktualnego użytkownika (requestedExecutionLevel level=&#8221;asInvoker&#8221;) może zostać zgłoszona informacja o niebezpieczeństwie (Comodo tak robi). Nie ma się jednak czego bać <img src="https://blog.maciejgrabek.com/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /> &#8211; w razie potrzeby mogę udostępnić też źródła.</p>
<h2>Do pobrania</h2>
<p><a href="http://maciejgrabek.com/projects-upload/MaciejGrabek.WP7CapabilityDetectionToolUI_bin.zip" target="_blank">binaria</a></p>
]]></content:encoded>
			<wfw:commentRss>https://blog.maciejgrabek.com/2011/02/20/windows-phone-capability-detection-tool-inaczej-ui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
