Windows Phone 7 - 不可思議的WMAppManifest.xml
開發Windows Phone的應用也有些時間,對於WMAppManifest.xml的了解就像Android中的Manifest.xml一樣,
博大精深,需要花一些時間來加以了解。增加對App的掌握度與在送審時可以多注意的部分,因此,以下就介
紹相關WMAppManifest.xml重要的標籤。
〉WMAppManifest.xml 內容結構:
‧範例WMAppManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.1"> <App xmlns="" ProductID="{GUID}" Title="[Project Name]" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="[Project Name] author" Description="Sample description" Publisher="[Project Name]"> <IconPath IsRelative="true" IsResource="false">ApplicationIcon.jpg</IconPath> <Capabilities> <Capability Name="ID_CAP_APPOINTMENTS"/> <Capability Name="ID_CAP_CAMERA"/> <Capability Name="ID_CAP_CONTACTS"/> <Capability Name="ID_CAP_GAMERSERVICES"/> <Capability Name="ID_CAP_IDENTITY_DEVICE"/> <Capability Name="ID_CAP_IDENTITY_USER"/> <Capability Name="ID_CAP_ISV_CAMERA"/> <Capability Name="ID_CAP_LOCATION"/> <Capability Name="ID_CAP_MEDIALIB"/> <Capability Name="ID_CAP_MICROPHONE"/> <Capability Name="ID_CAP_NETWORKING"/> <Capability Name="ID_CAP_PHONEDIALER"/> <Capability Name="ID_CAP_PUSH_NOTIFICATION"/> <Capability Name="ID_CAP_SENSORS"/> <Capability Name="ID_CAP_WEBBROWSERCOMPONENT"/> <Capability Name="ID_HW_FRONTCAMERA"/> </Capabilities> <Requirements> <Requirement Name="ID_REQ_MEMORY_90"/> </Requirements> <Tasks> <DefaultTask Name ="_default" NavigationPage="MainPage.xaml"/> <ExtendedTask Name="" NavigationPage="" > <BackgroundServiceAgent Name="" Source="" Specifier="" Type=""/> </ExtendedTask> </Tasks> <Tokens> <PrimaryToken TokenID="[Project Name]Token" TaskName="_default"> <TemplateType5> <BackgroundImageURI IsRelative="true" IsResource="false">Background.jpg</BackgroundImageURI> <Count>0</Count> <Title>[Project Name]</Title> </TemplateType5> </PrimaryToken> </Tokens> <Extensions> <Extension ConsumerID="" ExtensionName="" ExtraFile="" TaskID="" /> </Extensions> </App> </Deployment>
上述是大略的繪製出各個標籤之間的結構與順序,以下便說明各標籤中可設定的屬性與意義。
(1) Deployment:
為整份WMAppManifest.xml的Root標籤,並且指定了發佈的App平台版本,例如:7.0、7.1。
屬性 | 型別 | 說明 |
xmlns | string | xml命名空間,預設為:http://schemas.microsoft.com/windowsphone/2009/deployment。 |
AppPlatformVersion | string | Windows Phone SDK 的版本或運作的平台。預設為:7.1。 |
(2) App:
為Deployment的子元素,定義應用程式的基本資訊,如下:
屬性 | 型別 | 說明 |
Author | string | 應用程式的作者名稱。 |
BitsPerPixel | integer | 16 or 32 bits per pixel。較不常見。 |
Description | string | 應用程式的描述。 |
Genre | string |
依據該應用程式專案的類型,分成二個值:Apps.Normal或Apps.Game。 Apps.Name:安裝後出現於Application List清單中; Apps.Game:安裝後出現於Game Hub清單中; |
HasSettings | boolean | 識別應用程式是否支援設定。 |
HubType | integer |
允許開發者的應用程式可以出現在Music + Video Hub中的Extras Section中。 用於在送審前的測試,需手動設定該值,以測試應用程式是否加入Extras Section中。值:1或0。 |
IsBeta | boolean | 識別應用程式是否為Beta版,需搭配版本控制的類別進行操作。 |
ProductID | GUID | 應用程式代號,預設值為:GUID for the project (128 bit)。該值在送審之後,由Dev Center加入新的Product ID至Manifest中。 |
Publisher | string | 應用程式的發行者。預設值為專案名稱。該值是重要的,在Push-enabled(推播)應用時是被用來識別的。 |
RuntimeType | string | 預設值為:Silverlight或XNA。 |
SingleInstanceHost | boolean | 識別應用程式是否有single instance host。 |
Title | string | 定義應用程式出現在Application List清單或Game Hub清單中的名稱。預設是專案名稱。 |
Version | version string | 版本號,預設為:1.0.0.0。 |
(3) IconPath:
屬於App標籤的子元素,定義應用程式出現在Application List清單中的icon識別圖。
Silverlight應用程式預設值為:ApplicationIcon.png;XNA Framework Games預設值為:PhoneGameThumb.png。
(4) Capabilities:
屬於App標籤的子元素,Windows Phone提供capabilities-driven security model的模式,讓開發人員在撰寫應用程時,
需要選擇應用程式主要使用那些特性,這些特性的定義也會影響至用戶設備是否支援,而能否下載。如果沒有設定
任何Capabilites的話,可能會收到UnauthorizedAccessException error 的訊息。另外,該模式的主要目的為:
*Ensure proper disclosure:
如果應用程式的功能有安全性的疑慮,必須告知用戶。讓用戶選擇是否要啟動該功能。例如:推播服務、GPS服務。
*Decrease the attack surface:
選擇的特性均被建立於一個安全的Chamber,保持應用程式執行的安全性與支援度。
往下便來了解在該標籤下的子元素定義了那些特性:
(4-1) Capability:
為Capabilities下的子元素,透過屬性name設定以下的值。
值 | 型別 | 說明 |
ID_CAP_APPOINTMENTS | String | 使用到appointment data。 |
ID_CAP_CAMERA | String | 使用到相機的功能。這個的標籤由Mobile Operator與Original Equipment Manufactures唯一使用。Application開發者用ID_CAP_ISV_CAMERA。 |
ID_CAP_CONTACTS | String | 使用到聯絡人資訊。 |
ID_CAP_GAMERSERVICES | String | 能與XBOX LIVE APIs互動。如果有用到這個特性,要記得在Application告知用戶該隱私的使用問題。 |
ID_CAP_IDENTITY_DEVICE | String | 使用到設備的硬體資訊。例如:unique device id、manufacture name或model name。 |
ID_CAP_IDENTITY_USER | String | 使用到匿名的LiveID作為來唯一識別匿名用戶資訊。 |
ID_CAP_ISV_CAMERA | String | 使用主要或前景相機。 |
ID_CAP_LOCATION | String | 連接與使用Location Services。 |
ID_CAP_MEDIALIB | String | 連接與使用Media Library。 |
ID_CAP_MICROPHONE | String | 使用麥克風功能。應用程式可用在沒有視覺化介面下記錄語音資料。 |
ID_CAP_NETWORKING | String | 連接與使用Network Services。該項目一定要跟用戶宣告,因為有可能會在漫遊的情況下使用該程式,須告知用戶。 |
ID_CAP_PHONEDIALER | String | 可在程式中撥打電話。This may happen without a visual indication for the end user. |
ID_CAP_PUSH_NOTIFICATION | String | 可接受來自網路服務的Push Notification。該項目一定要跟用戶宣告,因為有可能會在漫遊的情況下使用該程式,須告知用戶。 |
ID_CAP_SENSORS | String | 使用Windows Phone sensors。 |
ID_CAP_WEBBROWSERCOMPONENT | String | 使用web browser元件。須注意scripting的安全風險。 |
ID_HW_FRONTCAMERA | String | 使用前景相機。使用該特性,如果用戶的設備沒有支援,在Marketplace將會出現不支援的提示,用戶下載後應用程式可能無法正常運行。更相關的說明可以參考<Camera and Photos Overview for Windows Phone>。 |
(5) Requirements:
屬於App的子元素與Capabilities屬於同層次。該標籤是在Windows Phone 7.1 Update之後才有的,用於限定該應用程是需要的硬體資源。
例如:Application不能Run在256-MB Device上,此時就要設定該標籤。目的在於讓用戶直接在Marketplace就不會看到這個Application,
避免下載後沒有辦法使用。
[註] 不過這個標籤並不是必要的,所以沒有加到WMAppManifest.xml也不會影響。
=>個人猜測Nokia的App有限定Nokia設備,應該也是按照這個規則吧!只是不知道格式是怎麼樣就是了。
格式:
<Requirements> <Requirement Name="ID_REQ_MEMORY_90"/> </Requirements>
值 | 說明 |
ID_REQ_MEMORY_90 |
指示該應用程序需要超過90 MB的內存和一個256 MB的移動設備是不適合的。 更詳細的內容可參考<Developing for 256-MB Devices>。 |
(6) Tasks:
定義應用程式使用的Task項目,包括:Default Task(啟動的Page)、Extension Task(可用的多個Tasks)與搭配Background Agent的定義。
往下便分別說明這二個項目:
(6-1). Default Task:
定義應用程式預設進入的Page,這可以搭配這兩篇來進行動態更換:<Windows Phone 7 - 動態轉換初始的Default Page>與
<WP7 修練 DAY 02:如何在頁面顯示前自動轉向到其他頁面>。
主要二個屬性:
屬性 | 型別 | 說明 |
Name | String | Task的名稱,預設:_default。 |
NavigationPage | String | 當應用程式啟動時,該Task要進入的Page。 |
(6-2). ExtendedTask:
Tasks中的子元素,也包括了BackgroundServiceAgent元素。該元素定義應用程式可用的多個Tasks。
Extended Tasks的命名由開發者自行定義,但現在只能用於定義應用程式中有使用Background tasks。
主要二個屬性:
屬性 | 型別 | 說明 |
Name | String | Task的名稱。 |
NavigationPage | String | 當應用程式啟動時,該Task要進入的Page。 |
(6-2-1). BackgroundServiceAgent:
定義了相關Background service agent的詳細資訊。
主要屬性:
屬性 | 型別 | 說明 |
Name | String | Assembly的名稱。 |
Source | String | Assembly source file。 |
Specifier | String |
Background Agnet的類型: AudioPlayerAgent、AudioStreamingAgent、或ScheduledTaskAgent。 |
Type | String | Assembly入口點的類別名稱。 |
(7) Tokens:
屬於App下的子元素。每一個應用程式均有一個Tile,用戶可以將它pin在Start Screen上。因此,Tokes即是用於
定義應用程式Tile的相關資訊,詳細參考<Tiles Overview for Windows Phone>。
=> 記得在董大偉老師有一篇<如何建立長方形的Application Tile動態磚>提到如何定義一個比較寬的Tile也是透過
定義Tokens裡的標籤,相信在Windows Phone 8裡也是這樣的做法。
目前只能定義PrimaryToken元素與它內部的TemplateType5元素,往下便加以說明:
(7-1). PrimaryToken:
用於描述應用程式關聯的Tile資訊。主要屬性如下:
屬性 | 型別 | 說明 |
TokenID | String |
Tile的名稱。預設是專案名稱。 [注意] 如果改變了PrimaryToken裡的TokenID屬性值,它將無法被Match到應用程式所擁有的Secondary Tiles。這將會造成用戶將無法再透過Marketplace安裝或更新這個應用程式。 |
TaskName | String | Task的名稱,它對應的Tile是用戶點擊時所觸發的項目。預設值:_default。 |
(7-1-1). TemplateType5:
屬於PrimaryToken的子元素,它是應用程式預設的Template,控制應用程式的Tile。以下便是它可設定的屬性:
屬性 | 型別 | 說明 |
BackgroundImageURI | String |
Tile的Background Image資源,其值可以是local或remote資源。 IsRelative:如果是使用lcoal的資源,該值為true; IsResource:如果是使用remote的資源,該值為:true; |
Count | Integer | Tile可以呈現數字符號於右上角,值介於0~99之間。預設值:0,0不會出現於Tile上。 |
Title | String | Tile上顯示的標題名稱。預設值為專案的名稱。 |
(8) Extensions:
屬於App下的子元素,用於定義應用程式有支援特定的Extensions。詳細資訊可以參考<Search Extensibility Overview for Windows Phone>,
詳細的範例,可以參考<Windows Phone 7 – Search Extensibility>與<Windows Phone 7 – Photo Extensibility>的內容。
主要可設定的屬性如下:
屬性 | 型別 | 說明 |
ConsumerID | String |
指定Extensions到Consumer的特定Product ID。 所有Search Extensions需要有相同的值:5B04B775-356B-4AA0-AAF8-6491FFEA5661。 如果Phone Extensions的值:5B04B775-356B-4AA0-AAF8-6491FFEA5632。 |
ExtensionName | String |
Extensions的識別類型,包括:Photos_Extra_Viewer、Photos_Extra_Hub、Photos_Extra_Share、Bing_Products_Video_Games…等。 詳細的可以參考<Quick Card Sample>。 |
ExtraFile | String | 指定的Extras.xml檔案的路徑。需具有該份文件與資料夾必需儲存在專案裡,命名也要相同,路徑為:Extensions\\Extras.xml。 |
TaskID | String | 指定調用的TaskID,即時當Extensions延伸時,連結到該應用程式指定使用的TaskID。預設是:_default。 |
以上是分享相關Windows Phone 7.1 SDK在WMAppManifest.xml定義的參數,這些東西其實在Windows Phone 8 SDK出來後,
將會增加更多新的與詳細的功能,讓應用程式可以做到的任務更多元就讓我們期待往下看看吧。
======
這一篇的內容不會談論太多的程式,因為這一篇是撰寫WP7有一段時間的我不小心忽略它,導致在送審過程中遇到
不少問題時,才又回頭來看這一篇的內容,感覺有很多東西需要寫下來,以免再犯相同的錯誤。希望對大家也有所幫助。
References:
‧Application Manifest File for Windows Phone
‧Getting data out of WP7 WMAppManifest is easy with Coding4Fun PhoneHelper
‧WMAppManifest.xml文件结构说明 & WP7-配置文件WMAppmanifest.xml的介绍
‧WP7 WMAppManifest.xml各个属性作用 & Farseer Physics Engine 3.2 WP7 - WMAppManifest.xml
‧视频:WindowsPhone(WP7)教程:6-WMAppManifest配置
‧Resco MobileLight Toolkit — Sample application & Windows Phone 7 Silverlight Programming - Handling XML Data
‧How to: Determine Application Capabilities (重要)
‧windows phone 开篇(1) & 最后一里路:Windows Phone应用提交完全攻略(转)
‧Introduction to Windows Phone 7 Development