適用於 Windows Phone 的 Windows 應用程式認證套件測試

Applies to Windows Phone only

Windows 應用程式認證套件包含一些測試,能協助確保您的 Windows Phone 8.1 應用程式已準備好,可以在市集上發佈。

測試名稱可能的測試結果測試的認證需求作業系統適用性

套件規範測試

通過

失敗

應用程式資訊清單規範

Windows Phone 8.1

應用程式計數

套件大小檢查

套件組合資訊清單驗證

Windows 安全性功能測試

通過

失敗

二元分析器

Windows Phone 8.1

禁止的檔案分析程式

私用程式碼簽署

支援的 API 測試

通過

失敗

支援的 API

Windows Phone 8.1

應用程式資訊清單資源測試

通過

失敗

應用程式資源驗證

Windows Phone 8.1

商標驗證

偵錯設定測試

通過

失敗

偵錯設定

Windows Phone 8.1

檔案編碼測試

通過

失敗

UTF-8 檔案編碼

Windows Phone 8.1

應用程式功能測試

通過

失敗

特殊用途功能

Windows Phone 8.1

Windows 執行階段中繼資料驗證

通過

失敗

ExclusiveTo 屬性測試

Windows Phone 8.1

類型位置測試

類型名稱區分大小寫測試

類型名稱正確性測試

一般中繼資料正確性測試

屬性測試

套件例行性檢查

通過

失敗

平台適用檔案

Windows Phone 8.1

套件驗證

資源使用狀況測試

通過

失敗

WinJS 背景工作測試

Windows Phone 8.1

 

Windows Phone 8.1 應用程式認證的測試

套件規範測試

測試套件的內容,以確定內容是有效的。

應用程式資訊清單規範測試

測試應用程式資訊清單的內容以確定內容是有效的。

背景

應用程式必須包含格式正確的應用程式資訊清單。

測試詳細資料

檢查應用程式資訊清單,確認內容是正確的,如套件中繼資料需求中所述。

  • 副檔名與通訊協定

    您的應用程式可以宣告它要產生關聯的副檔名。如使用不當,應用程式可能會宣告大量的副檔名,而其中的大多數可能甚至不會用到,因而造成不佳的使用者經驗。這個測試將新增一項檢查,以限制應用程式可以產生關聯的副檔名數目。

  • 架構相依性規則

    這個測試會強制要求 Windows Phone 8.1 應用程式與 Windows 執行階段有適當的相依性。如果有不適當的相依性,這個測試就會失敗。

    架構作業系統最低需求在 Windows Phone 8.1 執行

    Microsoft.VCLibs.120.00.Phone

    6.3.1

     

    如果應用程式套用的作業系統版本與建立架構相依性的作業系統版本不符,測試將會失敗。如果應用程式參照任何預覽版本的架構 .dll,則測試也將失敗。

修正動作

按照套件中繼資料需求中所述的需求,檢閱應用程式的資訊清單。

Windows 安全性功能測試

背景

變更預設的 Windows 安全性保護會讓客戶面臨較高的風險。

測試詳細資料

執行 BinScope 二元分析器以測試應用程式的安全性。

BinScope 二元分析器測試會檢驗應用程式的二進位檔,檢查編碼和建置做法是否讓應用程式較不容易受到攻擊或是做為攻擊媒介。

BinScope 二元分析器測試會檢查是否正確使用下列安全性相關的功能:

BinScope 二元分析器測試

BinScope 二元分析器測試會檢驗應用程式的二進位檔,檢查編碼和建置做法是否讓應用程式較不容易受到攻擊或是做為攻擊媒介。

BinScope 二元分析器測試會檢查是否正確使用下列安全性相關的功能:

AllowPartiallyTrustedCallersAttribute

Windows 應用程式認證套件錯誤訊息:APTCACheck 測試失敗

AllowPartiallyTrustedCallersAttribute (APTCA) 屬性可從已簽署組件中部分信任的程式碼,存取可完全信任的程式碼。當您對組件套用 APTCA 屬性時,部分信任的呼叫者可以在該組件存留期內存取組件,如此會危害安全性。

如果您的應用程式未通過這個測試,應該怎麼辦?

請勿在強式命名的組件上使用 APTCA 屬性,除非您的專案需要,而且您充分了解風險。若有必要,請務必使用適當的程式碼存取安全性要求來保護所有 API。當組件是 Windows 市集應用程式的一部分時,APTCA 沒有任何作用。

備註

這個測試只會在 Managed 程式碼 (C#、.NET 等) 執行。

/SafeSEH 例外狀況處理保護

Windows 應用程式認證套件錯誤訊息:SafeSEHCheck 測試失敗

當應用程式發生像是除以零錯誤的例外狀況時,例外處理常式就會執行。因為呼叫函式時,在堆疊儲存例外處理常式的位址,所以如果有些惡意軟體意欲覆寫該堆疊,就會讓緩衝區溢位攻擊者有機可趁。

如果您的應用程式未通過這個測試,應該怎麼辦?

建置您的應用程式時,在連結器命令中啟用 /SAFESEH 選項。在 Visual Studio 的發行組態中,這個選項預設會處於開啟。針對您應用程式中的所有可執行檔模組,確認建置指示中的這個選項已經啟用。

備註

測試不會在 64 位元的二進位檔或 ARM 晶片組二進位檔上執行,原因是兩者不會在堆疊上儲存例外處理常式位址。

資料執行防止

Windows 應用程式認證套件錯誤訊息:NXCheck 測試失敗

這個測試會確認應用程式不會執行儲存在資料區段中的程式碼。

如果您的應用程式未通過這個測試,應該怎麼辦?

建置您的應用程式時,在連結器命令中啟用 /NXCOMPAT 選項。在支援資料執行防止 (DEP) 的連結器版本中,這個選項預設會處於開啟。

備註

建議您在支援 DEP 的 CPU 上測試應用程式,並修正由 DEP 所導致的任何失敗。

位址空間配置隨機載入

Windows 應用程式認證套件錯誤訊息:DBCheck 測試失敗

位址空間配置隨機載入 (ASLR) 會將可執行檔映像載入記憶體中無法預期的位置,使惡意軟體難以預測會在哪個特定虛擬位址載入程式來運作。您的應用程式與其所使用的所有元件都必須支援 ASLR。

如果您的應用程式未通過這個測試,應該怎麼辦?

建置您的應用程式時,在連結器命令中啟用 /DYNAMICBASE 選項。確認您應用程式使用的所有模組也都使用這個連結器選項。

備註

通常 ASLR 不會影響效能。但在某些情況下,可稍微改善 32 位元系統上的效能。系統若將許多影像載入多個不同的記憶體位置而發生嚴重壅塞,可能會使效能降低。

這個測試只能在以 Managed 程式碼 (如 C# 或 .NET Framework) 撰寫的應用程式上執行。

讀取/寫入共用的 PE 區段

Windows 應用程式認證套件錯誤訊息:SharedSectionsCheck 測試失敗。

含有標示為共用可寫入區段的二進位檔便是一個安全性威脅。除非必要,否則不要建置含有共用可寫入區段的應用程式。使用 CreateFileMappingMapViewOfFile 建立有適當安全保護的共用記憶體物件。

如果您的應用程式未通過這個測試,應該怎麼辦?

從應用程式中移除任何共用的區段,然後搭配適當的安全性屬性來呼叫 CreateFileMappingMapViewOfFile 以建立共用的記憶體物件,然後重新建置您的應用程式。

備註

這個測試只能在以 Unmanaged 語言 (如 C 或 C++) 撰寫的應用程式上執行。

AppContainerCheck

Windows 應用程式認證套件錯誤訊息:AppContainerCheck 測試失敗。

AppContainerCheck 會確認可執行二進位檔的可攜式執行檔 (PE) 標頭中的 appcontainer 位元已設定。 Windows Phone 8.1 應用程式必須在所有 .exe 檔案和所有 Unmanaged DLL 上設定 appcontainer 位元才能正確執行。

如果您的應用程式未通過這個測試,應該怎麼辦?

如果原始可執行檔未通過這個測試,請確定您使用了最新的編譯器和連結器來建立檔案,並在連結器上使用 /appcontainer 旗標。

如果 Managed 可執行檔未通過測試,請確定您使用了最新的編譯器和連結器 (如 Microsoft Visual Studio) 來建置 Windows Phone 8.1 應用程式。

備註

這個測試會在所有 .exe 檔案和 Unmanaged DLL 上執行。

ExecutableImportsCheck

Windows 應用程式認證套件錯誤訊息:ExecutableImportsCheck 測試失敗。

如果可攜式執行檔 (PE) 映像的匯入表格被放置到可執行程式碼區段中,就無法通過這個測試。 如果您將 Visual C++ 連結器的 /merge 旗標設成 /merge:.rdata=.text 以對 PE 映像啟用 .rdata 合併,就會發生這種情形。

如果您的應用程式未通過這個測試,應該怎麼辦?

不要將匯入表格合併到可執行程式碼區段中。確定 Visual C++ 連結器的 /merge 旗標沒有設定為將 “.rdata” 區段合併到程式碼區段中。

備註

這個測試會在完全 Managed 組件以外的所有二進位程式碼上執行。

WXCheck

Windows 應用程式認證套件錯誤訊息:WXCheck 測試失敗。

這個檢查有助於確保二進位檔沒有任何對應為可寫入或可執行的頁面。 如果二進位檔有可寫入和可執行的區段,或如果二進位檔的 SectionAlignment 小於 PAGE_SIZE,就會發生這種情形。

如果您的應用程式未通過這個測試,應該怎麼辦?

確認二進位檔沒有可寫入或可執行的區段,而且二進位檔的 SectionAlignment 值至少等於其 PAGE_SIZE

備註

這個測試會在所有 .exe 檔案和原生的 Unmanaged DLL 上執行。

如果可執行檔在建置時啟用了 [編輯後繼續] (/ZI),則可執行檔便可能有可寫入和可執行的區段。停用 [編輯後繼續] 即可不顯示無效的區段。

可執行檔的 SectionAlignment 預設為 PAGE_SIZE

禁止的檔案分析程式

Windows 應用程式認證套件錯誤訊息:禁止的檔案檢查測試失敗。

Windows Phone 8.1 應用程式不應包含某些檔案。這些檔案有較新的版本可供使用,以提供重要的安全性、可靠性或其他改進功能。Microsoft 在 Windows 應用程式認證套件中封鎖了這些檔案,以確保所有開發人員都使用當前的版本。

測試詳細資料

Windows 應用程式認證套件中禁止的檔案檢查目前會檢查下列檔案:

  • Bing.Maps.JavaScript\js\veapicore.js

    當應用程式使用的是 "Release Preview" 版檔案,而不是最新的正式版檔案時,這項檢查通常會失敗。

    Windows 8.1 SDK 隨附的最新版 Windows 應用程式認證套件已經加入 Microsoft Advertising SDK 發行前版本的檢查。如果在禁止的檔案測試階段發現下列檔案的發行前版本,您將需要更新為已發行的 Microsoft Advertising SDK 版本:

    • Microsoft.Advertising.Mobile.Display.winmd
    • Microsoft.Advertising.Mobile.UI.winmd
    • Microsoft.Advertising.Mobile.UI.Design.dl

修正動作

若要更正這個問題,請使用最新版的適用於 Windows 市集應用程式的 Bing 地圖 SDK

若要使用 Microsoft Advertising SDK 修正錯誤,請使用最新版的 Microsoft Advertising SDK

私用程式碼簽署

測試私用程式碼簽署二進位檔是否存在於應用程式套件。

背景

私用程式碼簽署檔案應該保持私用,因為若遭到洩露,可能會被用於惡意用途。

測試詳細資料

測試應用程式套件內的檔案是否存在 .pfx 或.snk,以指出已包含私用簽署金鑰。

修正動作

從套件中移除任何私用程式碼簽署金鑰 (例如,.pfx 和 .snk 檔案)。

應用程式計數測試

測試應用程式套件的內容,以確保只會顯示一個應用程式。

背景

Windows Phone 8.1 應用程式套件在提交到市集時,只能包含單一應用程式。

修正動作

確保應用程式資訊清單針對每個套件只會定義一個應用程式。

套件大小檢查

測試應用程式套件的大小,以確保大小不會超過 4GB。

背景

提交到市集時,Windows Phone 8.1 應用程式套件的大小限制為 4GB。請注意,這項限制適用於套件,不適用於延伸的內容。

修正動作

降低應用程式套件的大小,以確保發行版本會在允許的 4GB 大小限制內。

套件組合資訊清單驗證

測試以確保一個套件組合中只會有一個主要的應用程式套件,而且架構為 ARM 或 Neutral。

背景

預期 Windows Phone 8.1 應用程式套件組合包含單一的主要應用程式套件,其目標為 ARM 或 Neutral 架構。套件組合中最多可以有 512 個套件。

修正動作

更新應用程式套件,以確保套件組合中只會有單一的主要應用程式套件,而且已定義適當的架構。您可能需要從套件組合中移除 x86 和/或 x64 架構套件。 如果套件組合包含的套件超過 512 個,您將需要減少套件數量以符合需求。

支援的 API 測試

支援的 API

測試應用程式是否使用不相容的 API。

背景

應用程式必須使用適用於 Windows Phone 8.1 應用程式的 API 來進行市集認證。這個測試也會識別 Managed 二進位檔案相依於核准的 Windows Phone 8.1 設定檔外部函式的狀況。

測試詳細資料

  • 檢查二進位檔案的匯入位址表,確認應用程式套件內的每個二進位檔案未相依於 Windows Phone 8.1 應用程式開發中不支援的 API。

  • 確認應用程式套件內的每個 Managed 二進位檔案沒有相依於核准的 Windows Phone 8.1 設定檔外部的函式。

修正動作

確定應用程式是編譯為發行組建而不是偵錯組建。

附註  應用程式的偵錯組建即使只使用適用於 Windows Phone 8.1 應用程式的 API,還是無法通過這個測試。

檢閱錯誤訊息,找出應用程式使用的 API 有哪些不被視為 Windows Phone 8.1 應用程式的 API。

應用程式資訊清單資源測試

應用程式資源驗證

如果應用程式資訊清單中宣告的字串或影像不正確,就無法安裝應用程式。應用程式將不會在發生這些錯誤的情況下安裝,或者您應用程式的標誌或其他影像可能不會正確顯示。

測試詳細資料

檢查應用程式資訊清單中定義的資源,確定它們同時存在且有效。

修正動作

使用下表做為指引。

錯誤訊息註解

影像 {imageName} 同時定義 ScaleTargetSize 限定詞。您一次只能定義一個限定詞。

您可以針對不同的解析度自訂影像。

在實際訊息中,{imageName} 包含有錯誤的影像名稱。

確定每個影像都將 ScaleTargetSize 定義為限定詞。若要深入了解,請參閱如何使用限定詞命名資源

影像 {imageName} 不符合大小限制。

確認所有應用程式影像都遵守適當的大小限制。

在實際訊息中,{imageName} 包含有錯誤的影像名稱。

如需應用程式影像及大小的詳細資訊,請參閱應用程式影像

套件缺少影像 {imageName}

缺少必要的影像。

在實際訊息中,{imageName} 包含缺少的影像名稱。

如需應用程式影像及大小的詳細資訊,請參閱應用程式影像

影像 {imageName} 不是有效的影像檔。

確認所有應用程式影像都遵守適當的檔案格式類型限制。

在實際訊息中,{imageName} 包含無效的影像名稱。

如需應用程式影像及大小的詳細資訊,請參閱應用程式影像

影像 “BadgeLogo” 在位置 (x,y) 的 ABGR 值 {value} 無效。像素必須是白色 (##FFFFFF) 或透明 (00######)

徽章標誌是出現在徽章通知旁邊的影像,用以在鎖定畫面識別應用程式。這個影像必須為單色 (只能包含白色和透明像素)。

在實際訊息中,{value} 包含影像中無效的色彩值。

如需應用程式影像及大小的詳細資訊,請參閱應用程式影像

影像 “BadgeLogo” 在位置 (x,y) 的 ABGR 值 {value} 對於高對比白色影像無效。像素必須是 (##2A2A2A) 或較深,或透明 (00######)。

徽章標誌是出現在徽章通知旁邊的影像,用以在鎖定畫面識別應用程式。因為在高對比白色中,徽章標誌會出現在白色背景上,所以它必須是標準徽章標誌的深色版本。在高對比白色中,徽章標誌只能包含比 (##2A2A2A) 深的像素或透明。

在實際訊息中,{value} 包含影像中無效的色彩值。

如需應用程式影像及大小的詳細資訊,請參閱應用程式影像

影像至少必須定義一個不含 TargetSize 限定詞的變數。它必須定義 Scale 限定詞,或不指定 Scale 和 TargetSize,然後預設為 Scale-100。

如需詳細資訊,請參閱調整成像素密度的指導方針以及如何使用限定詞命名資源

套件缺少 "resources.pri" 檔案。

如果您的應用程式資訊清單中有可當地語系化的內容,請確定應用程式套件會包含有效的 resources.pri 檔案。

"resource.pri" 檔案必須包含名稱符合套件名稱 {packageFullName} 的資源對應

如果資訊清單已變更,而 resources.pri 中的資源對應名稱不再符合資訊清單中的套件名稱,就會發生這個錯誤。

在實際訊息中,{packageFullName} 包含 resources.pri 必須包含的套件名稱。

若要修正此問題,您需要重新建置 resources.pri。執行這個動作的最簡單方法是重新建置應用程式套件。

"resources.pri" 檔案不能啟用 AutoMerge。

MakePRI.exe 支援一個稱為 AutoMerge 的選項。這個選項的預設設定為 Off。

啟用時,AutoMerge 會在執行期間將應用程式的語言套件資源合併到單一 resources.pri 中。

字串 {string} 不符合 {number} 個字元的長度上限限制。

請參閱套件中繼資料需求

在實際訊息中,{string} 會以有錯誤的字串取代,而 {number} 會包含長度上限。

字串 {string} 的開頭/結尾不得具有空白字元。

應用程式資訊清單中的元素結構描述不允許前後有空白字元。

在實際訊息中,{string} 會以有錯誤的字串取代。

確定 resource.pri 中的資訊清單欄位沒有任何當地語系化的值前後有空白字元。

字串必須為非空白 (長度大於零)。

如需詳細資訊,請參閱套件中繼資料需求

"resources.pri" 檔案中沒有指定預設資源。

如需詳細資訊,請參閱定義應用程式資源

"resources.pri" 檔案中沒有指定資源值。

請確定應用程式資訊清單會在 resource.pri 中定義有效的資源。

如需詳細資訊,請參閱當地語系化套件資訊清單

 

如需詳細資訊,請參閱應用程式套件資源驗證

商標驗證

Windows Phone 8.1 應用程式應該要完整且功能正常。使用預設影像 (來自範本或 SDK 範例) 的應用程式會呈現不佳的使用者經驗,而且在市集型錄中也不容易識別。

測試詳細資料

這個測試會驗證應用程式所使用的影像不是來自 SDK 範例或 Visual Studio 範本的預設影像。

修正動作

以特別且更能代表您應用程式的影像取代預設影像。

偵錯設定測試

偵錯設定

測試應用程式,確定它不是偵錯組建。

背景

若要通過市集的認證,應用程式不可以針對偵錯進行編譯,而且不可以參照可執行檔案的偵錯版本。此外,您必須建置最佳化的程式碼以便通過這個測試。

測試詳細資料

測試應用程式,確定它不是偵錯組建,而且沒有連結到任何偵錯架構。

修正動作

  • 將應用程式提交到市集之前,將它建置為版本組建。
  • 確定您已安裝正確的 .NET Framework 版本。
  • 確認應用程式並未連結到偵錯版本的架構,且其含有發行版本。如果應用程式包含 Microsoft .NET 元件,請確認您會安裝正確的 .NET Framework 版本。

檔案編碼測試

UTF-8 檔案編碼

背景

必須使用對應的位元順序標記 (BOM),以 UTF-8 格式為 HTML、CSS 和 JavaScript 檔案編碼,如此即能從位元組程式碼快取中獲益,並可避免其他執行階段錯誤情況。

測試詳細資料

測試應用程式套件的內容,確定它們使用正確的檔案編碼。

修正動作

開啟受影響的檔案,然後從 Visual Studio 的 [檔案] 功能表中選取 [另存新檔]。選取 [儲存] 按鈕旁的下拉式控制項,然後選取 [Save with Encoding]。從 [進階] 儲存選項對話方塊中選擇 [Unicode (UTF-8 有簽章)] 選項,然後按一下 [確定]

應用程式功能測試

特殊用途功能

背景

特殊用途功能適用於非常特殊的情況。僅限公司帳戶使用這些功能。

測試詳細資料

驗證應用程式是否宣告下列任一功能:

  • EnterpriseAuthentication
  • SharedUserCertificates
  • DocumentsLibrary

如果宣告了這些功能的其中之一,測試就會顯示警告給使用者。

修正動作

請考慮移除應用程式不需要的特殊用途功能。此外,這類功能的使用方式需接受其他上架原則審查。

Windows 執行階段中繼資料驗證

背景

確保應用程式隨附的 Windows 執行階段元件符合 Windows 執行階段類型系統。

測試詳細資料

確認套件中的 .winmd 檔案符合 Windows 執行階段規則。

修正動作

  • ExclusiveTo 屬性測試:確保 Windows 執行階段類別不會實作已標示為 ExclusiveTo 其他類別的介面。
  • 類型位置測試:確保所有 Windows 執行階段類型的中繼資料,都位於應用程式套件中命名空間相符名稱最長的 winmd 檔案。
  • 類型名稱區分大小寫測試:確保所有 Windows 執行階段類型在應用程式套件內都具有唯一且不區分大小寫的名稱。 同時也確保應用程式套件內的命名空間名稱均未使用 Windows 執行階段類型的名稱。
  • 類型名稱正確性測試:確保全域命名空間或 Windows 最上層命名空間中,不存在任何 Windows 執行階段類型。
  • 一般中繼資料正確性測試:確保您用來產生 Windows 執行階段類型的編譯器符合最新的 Windows 執行階段規格。
  • 屬性測試:確保 Windows 執行階段類別的所有屬性都有 get 方法 (set 方法為選用)。 針對 Windows 執行階段類型的所有屬性,確保 get 方法傳回值的類型與 set 方法輸入參數的類型相符。

套件例行性測試

平台適用檔案測試

視使用者的處理器架構而定,安裝混合二進位檔案的應用程式可能會損毀或無法正確執行。

背景

這個測試驗證應用程式套件中的二進位檔案是否會發生架構衝突。應用程式套件不應包含無法在資訊清單中所指定的處理器架構上使用的二進位檔案。包含不支援的二進位檔案會導致應用程式毀損,或是以非必要方式增加應用程式套件的大小。

測試詳細資料

驗證每個檔案的 PE 標頭中的「位元」都適合與應用程式套件處理器架構宣告交叉參考

修正動作

遵循這些指導方針,以確保您的應用程式套件只包含應用程式資訊清單中指定之架構所支援的檔案:

  • 如果應用程式的目標處理器架構是 Neutral 處理器類型,則應用程式套件不得包含 x86、x64 或 ARM 二進位檔案或映像類型檔案。

  • 如果應用程式的目標處理器架構是 ARM 處理器類型,則應用程式套件必須只能包含 ARM 二進位檔案或映像類型檔案。如果套件包含 x64 或 x86 二進位檔案或映像類型檔案,這個測試將會失敗。

套件驗證

這個測試會驗證應用程式套件是否與適用於 XAP 套件的 Windows Phone 8.1 規則相容。

背景

這個測試會驗證存在於壓縮的 XAP 套件內部的一些元素,以確認是否與 Windows Phone 8.1 相容。

測試詳細資料

如需您可能會碰到的特定錯誤訊息的清單,請參閱了解應用程式提交錯誤

修正動作

檢視並解決您從這個測試可能遇到的所有錯誤。

附註  雖然這個測試僅適用於 XAP 型的應用程式,但最終報告仍會反映非 XAP 型的應用程式在這個測試的結果為通過。

資源使用狀況測試

WinJS 背景工作測試

WinJS 背景工作測試可確保 JavaScript 應用程式具備適當的 close 陳述式,以免應用程式耗用電池電力。

背景

具備 JavaScript 背景工作的應用程式必須呼叫 Close() 做為其背景工作的最後一個陳述式。不執行此動作的應用程式可能會使系統無法返回連線待命模式,導致電池電力耗盡。

測試詳細資料

如果應用程式沒有資訊清單中指定的背景工作檔案,將會通過測試。否則,測試將會剖析應用程式套件中指定的 JavaScript 背景工作檔案,並尋找 Close() 陳述式。如果找到,將會通過測試;否則測試就會失敗。

修正動作

更新背景 JavaScript 程式碼以正確呼叫 Close()。

 

 

顯示:
© 2015 Microsoft