想起來一個笑話:唐僧一行千辛萬苦來到佛祖面前,准備取經,佛祖輕聲問了一句:汝等帶U盤了嗎?師徒4人立刻昏倒在地。好吧,扯遠了,不過是想告訴大家准備工作一定要到位。
Universal App 的打包發布其實與傳統的 Windows Phone / Windows Store App 項目並無太大不同,但是鑒於總有人會在這些步驟中遇到問題,而且即使是發布過幾個應用的開發者也不例外,所以對這個看起來比較繁瑣的過程做一個小結還是必要的。
打包前的准備工作
1. 修改編譯模式
在調試程序時,我們通常會選擇 debug 模式,但是發布時不要忘記切換到 Release 模式,否則程序打包后連驗證程序都不會執行,更不用說上傳到應用商店了。為了保證程序在所有設備上都運行,我們選擇 Any CPU,這樣就可以保證我們的 UAP 運行在所有可以運行的平台上(包括基於 ARM 架構的 Windows RT 平板和基於 x86 架構的平板,例如 Surface Pro)了。
2. 修改 Manifest 文件
Manifest 文件記錄了項目中的一些基礎元數據,包括項目名稱,申請的權限,項目的 Logo 和發布者信息等等,只有這些信息都填寫完整並且准確,打包的文件才能保證通過上傳時的自動驗證。
在項目中我們可以找到本項目的 appxmanifest 文件。
我們還可以通過菜單中的選項找到修改 Manifest 文件的入口。
下面我們來逐個標簽檢查 Manifest 文件的內容是否完整。
在 Application 標簽頁中,我們需要填寫項目的基本信息,並確認是否需要修改對應的屏幕旋轉方向和在鎖屏時如何通知用戶。
與 Windows 項目不同的是, Windows Phone 項目還需要用戶填寫是否允許將 App 安裝到 SD 卡的選項。
在 Visual Assets 標簽頁中,我們需要將所有用到的 Logo 圖片做好對應,一般來說,如果在 Assets 文件夾中圖片的命名規范正確的話,這里可以自動檢測並將圖片自動載入的。
需要注意的是,Badge Logo 的圖片要求比較嚴格,要求只能有白色和透明兩種顏色,哪怕有一個像素出現別的顏色,都會在自動驗證程序時檢測到並且不予通過,所以修改這幾個圖片的時候要務必小心,確認只包含白色和透明色。
在 Capabilities 頁面,我們需要填寫項目申請的權限,例如本項目必須在網絡下運行,所以必須申請 Internet 權限。最關鍵的注意事項是,任何 Windows App,如果申請了網絡權限,就必須在 Setting 菜單中添加隱私聲明 (Privacy Statement)的入口,否則會不能通過人工審核階段。關於如何添加隱私聲明,請參考之前的博客:博客園客戶端(Universal App)開發隨筆 - Setting Page的實現方法與經驗
Windows Phone 的項目還需要額外填寫對於設備傳感器的申請,如果在 App 中應用到了陀螺儀,磁場傳感器,NFC,前/后攝像頭等資源,需要在這里予以聲明。
在 Declarations 標簽頁中,我們要對 App 使用的其他資源進行聲明,例如博客園項目使用到了后台任務,就需要在這里聲明后台任務的入口。
如果 App 使用到了特殊的通知事件,可以在 Content URIs 頁面進行聲明,需要注意的是,Windows 8.1 僅支持 https 協議的安全頁面,不再支持 http 協議。
Packaging 頁面非常關鍵,這里的任何一項填錯都會導致項目通不過上傳時的自動審核。不過好在如果我們在下面的步驟中選擇了將項目對應到商店中的 App,那么這個頁面中的大部分項目都會自動填好。而如果我們選擇僅僅打包,委托別人幫忙發布,那么這些信息就一定要填寫完整。本頁面中需要填寫的信息,可以在對應的開發者賬戶頁面找到信息。
另一個注意事項是最后的 Generate app bundle 選項。如果選擇了 always,那么如果之前的 Visual Assets 中有對應的多種尺寸的圖片,那么打包時就會生成一個對應多種尺寸設備的整包(bundle)。這樣以后再更新項目,也必須上傳一個 bundle,否則就不能通過上傳審核。這也意味着,Assets 文件夾里的圖片只能增加,不能再減少。
當然以上的所有項目,我們都可以右鍵點擊 manifest 文件,選擇 view code 進行修改或更新。貌似這也是一個更適合 geek 的方法。
開始打包
Manifest 文件修改完之后,我們就可以開始正式的打包工作了。
這里我們選擇 Create App Packages
在這里,有兩種選擇,選擇Yes是直接登陸 Microsoft Dev 賬戶,將項目和商店中的 App 進行綁定,這樣 Manifest 文件中關於開發者的信息會自動更新到 Microsoft Dev 賬戶的對應信息。這種方式適用於自己發布自己項目的情況。
選擇No是不登陸賬戶,僅僅打包。這種情況適用於委托第三方幫忙發布項目的情況,或者是想先打個包出來給別人共享用作測試,測試完成后,你就可以直接用這個測試包提交應用了,這樣更符合一般的工作流程,避免你的測試包和最后提交商店的包不一致。
我們強烈建議選擇No,使用第二種方式。 在下一篇隨筆中會詳細說到如何提交應用。
我們先選擇第一種,登陸 Microsoft Dev 賬戶。
登陸以后,該開發者之前提交過的項目就都顯示出來,我們也可以為新項目重新預留一個名字。
為項目選擇版本信息,輸出位置,是否打包生成和 CPU 等信息。
都填寫完之后,就可以打包項目了。打包完成后,會顯示項目位置,並會提醒開發者為項目執行驗證程序(Windows App Certification Kit)。由於上傳后服務器會首先執行這個程序對項目進行初次自動驗證,如果有不合規范的地方就不予通過,所以為了確保上傳的成功性,我們通常會在本機先執行一次驗證程序。
如果驗證程序在本機通過,那么就可以向商店上傳應用了。由於篇幅所限,我們會在將來的文章中繼續介紹商店上傳的注意事項。
總結
本文按照流程介紹了 Universal App 在上傳商店前的打包步驟,並分析了 Windows 和 Windows Phone App打包時的細小區別和容易導致上傳失敗的注意事項。
我們的已經發布的應用和代碼可以在下面找到:
Windows Phone Store App link:
http://www.windowsphone.com/zh-cn/store/app/博客園-uap/500f08f0-5be8-4723-aff9-a397beee52fc
Windows Store App link:
http://apps.microsoft.com/windows/zh-cn/app/c76b99a0-9abd-4a4e-86f0-b29bfcc51059
GitHub open source link:
https://github.com/MS-UAP/cnblogs-UAP
MSDN Sample Code:
https://code.msdn.microsoft.com/CNBlogs-Client-Universal-9c9692d1