Windows Phone 7 - 不可思議的WMAppManifest.xml

Windows Phone 7 - 不可思議的WMAppManifest.xml

開發Windows Phone的應用也有些時間,對於WMAppManifest.xml的了解就像Android中的Manifest.xml一樣,

博大精深,需要花一些時間來加以了解。增加對App的掌握度與在送審時可以多注意的部分,因此,以下就介

紹相關WMAppManifest.xml重要的標籤。

 

〉WMAppManifest.xml 內容結構

圖片1

 

‧範例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

 

Dotblogs Tags: