在這裡,您已經準備好要來進行開發跨平台 ( Android, iOS, UWP ) 的行動應用程式開發,並且在行動應用程式中,將會呼叫企業後端所提供的 Web API 服務,以便讓使用者可以透過行動裝置,進行差旅費用的申請;這是企業內部很典型的一個應用程式,接下來就是需要開始建立專案與進行相關設定。
在這個階段的練習,您將會學會底下的 Xamarin.Forms 的開發技術:
- 使用 Visual Studio 2015 增加 Prism 專案樣版
- 建立 Prism for Xamarin.Forms 的專案
- 升級與安裝必要的套件(NuGet Package)或者插件(Plug-ins)
- 建立專案資料夾
這篇章節的練習專案的原始程式碼將會存放在 GitHubhttps://github.com/vulcanlee/XFAppSample/tree/master/XFDoggy/1.BuildProject 內,在這個目錄下,會有兩個目錄:
Starter這個目錄將會存放當您要進行練習開發這個專案之前,Visual Studio 專案的原始檔案。 Completed這個目錄將會存放當您要進行練習開發這個專案完成之後,Visual Studio 專案的原始檔案。
使用 Visual Studio 2015 增加 Prism 專案樣版
若您的 Visual Studio 開發環境中,尚未安裝
Prism Template Pack
擴充功能,請參考底下步驟,進行安裝這個擴充功能。安裝 Prism Template Pack
- 首先,開啟 Visual Studio 2015
- 點選功能表
工具
>擴充功能與更新
選項 - 在
擴充功能與更新
對話窗內,點選線上
>Visual Studio 組件庫
- 在右上方文字輸入盒內,輸入
Prism Template Pack
,並且按下Enter
按鍵 - 點選搜尋出來的
Prism Template Pack
項目,點選下載
按鈕,安裝Prism Template Pack
組件到您的Visual Studio 2015 內;安裝完成後,您需要點選立即重新啟動
按鈕,讓您的 Visual Studio 2915 重新啟動之後,這次的安裝才會生效。
建立 Prism for Xamarin.Forms 的專案
- 當 Visual Studio 重新啟動之後,點選功能表
檔案
>新增
>專案
- 在
新增專案
對話窗內,點選範本
>Visual C#
>Prism
>Prism Unity App (Forms)
,並且在底下名稱欄位中,輸入XFDoggy
最後,點選確定
按鈕。 - 接著,會出現
Prism for Xamarin.Forms - Project Wizard
這個對話窗,請在這個對話窗中,勾選Android
/iOS
/UWP
這三個檢查盒,最後點選Create
按鈕,以便產生這三個類型的專案。 - 當專案建立到一半,若您的開發環境還沒有建置與設定完成 Mac 電腦與 Xamarin Studio for Mac 系統,此時會看到
Xamarin Mac Agent Instructions
對話窗出現,這個對話窗是要提醒您進行與 Mac 電腦連線設定,這是因為,您無法在 Windows 作業系統進行 iOS 相關應用程式的建立與設計工作,而是需要透過 Mac 電腦安裝的 XCode 來協助您完成這些 iOS 應用程式的建立工作。不過,這不影響您繼續開發 Xamarin.Forms 的應用程式,只不過此時,您無法編譯與執行 iOS 的應用程式。 - 接著會看到
新的通用Windows專案
對話視窗,此時,您只需要按下確定
按鈕即可,此時,專案精靈會繼續完成相關平台的專案建立工作。 - 最後,整個新的 Xamarin.Forms 專案就建立完成了。
升級與安裝必要的套件(NuGet Package)或者插件(Plug-ins)
在這個專案內,將會使用到許多不同的 NuGet 套件 (Package),因此,您需要先在這裡把這些套件安裝到所有的專案內,方便日後開發作業可以更加順利。
- 滑鼠右擊方案
XFDoggy
,選擇管理方案的 NuGet 套件
,在NuGet - 解決方案
頁面中,切換到瀏覽
標籤頁次內,請在文字輸入盒中輸入,Behaviors.Forms
並且開始搜尋這個套件,並且安裝到所有的專案內。使用這個套件,可以讓您在宣告 XAML 定義的時候,使用 XAML 提供的行為特性功能,例如,可以綁定當某個事件發生的時候,將會執行某個指定的 ICommand。這項功能對於有在開發 WPF 或者 Windows UWP 的開發者而言,必定不陌生,因為,在這些環境之下,可以使用 Blend SDK 所提供的各種不同行為(Behaviors)功能,來擴增或者豐富您的 XAML 宣告。 - 滑鼠右擊方案
XFDoggy
,選擇管理方案的 NuGet 套件
,在NuGet - 解決方案
頁面中,切換到瀏覽
標籤頁次內,請在文字輸入盒中輸入,Newtonsoft.Json
並且開始搜尋這個套件,並且安裝到所有的專案內。'Newtonsoft.Json' 這個套件,可以讓您進行 JSON 物件的 序列化 (Serialization) 或者 反序列化 (Deserialization)) 的操作;這項功能將會提供當從網路取得開發資料的 JSON 定義資料之後,接著,便可以將這些 JSON 定義文字轉換成為 .NET 的物件。 - 滑鼠右擊核心PCL專案
XFDoggy
,選擇管理 NuGet 套件
,在NuGet - 解決方案
頁面中,切換到瀏覽
標籤頁次內,請在文字輸入盒中輸入,Microsoft.Net.Http
並且開始搜尋這個套件,並且安裝到核心PCL專案內;在安裝過程中,若看到接受授權
對話窗,請點選我接受
按鈕由於在撰寫這份文件的時候 (2016.09.19),本機電腦 Visual Studio 的 Xamarin Toolkit 已經升級到 Xamarin 4.2 版,而透過這個Xamarin版本再產生 核心PCL專案 的時候,其 PCL TargetFrameworkProfile 已經採用了Profile259
(前一個 Xamarin 版本,使用的Profile111
);而在Profile259
的 PCL專案內,是沒有這個System.Net.Http
命名空間。因此,需要額外安裝這個Microsoft.Net.Http
NuGet 套件,以便可以使用HttpClient
這樣的類別。想要查看您的 PCL專案的TargetFrameworkProfile
是哪個版本,可以先使用滑鼠右擊 核心PCL XFDoggy 專案,接著選取卸載專案
,再度使用滑鼠右擊 核心PCL XFDoggy 專案,選取編輯 XFDoggy.csproj
這個選項。在下面截圖中,將會看到紅色框線處標示的,就是這個 PCL 的 Profile 版本有關更多不同 PCL Profile 資訊,可以參考這個網址http://portablelibraryprofiles.apps.stephencleary.com/
建立專案資料夾
核心 PCL 專案
請在 核心 PCL 專案內依序建立底下的資料夾
- 滑鼠右擊
XFDoggy
核心PCL 專案節點,選擇加入
>新增資料夾
,在新產生的資料夾內,填入資料夾名稱Helps
- 滑鼠右擊
XFDoggy
核心PCL 專案節點,選擇加入
>新增資料夾
,在新產生的資料夾內,填入資料夾名稱Infrastructure
- 滑鼠右擊
XFDoggy
核心PCL 專案節點,選擇加入
>新增資料夾
,在新產生的資料夾內,填入資料夾名稱Models
- 滑鼠右擊
XFDoggy
核心PCL 專案節點,選擇加入
>新增資料夾
,在新產生的資料夾內,填入資料夾名稱Services
平台專案
請在每個平台的專案下,依序建立底下資料夾
- 滑鼠右擊
XFDoggy.Droid
專案節點,選擇加入
>新增資料夾
,在新產生的資料夾內,填入資料夾名稱Infrastructure
- 滑鼠右擊
XFDoggy.iOS
專案節點,選擇加入
>新增資料夾
,在新產生的資料夾內,填入資料夾名稱Infrastructure
- 滑鼠右擊
XFDoggy.UWP
專案節點,選擇加入
>新增資料夾
,在新產生的資料夾內,填入資料夾名稱Infrastructure
- 滑鼠右擊
XFDoggy.UWP
專案節點內的Assets
資料夾,選擇加入
>新增資料夾
,在新產生的資料夾內,填入資料夾名稱Images
複製圖片檔案
- 請下載底下連結中的圖片檔案到本機檔案總管內的某個資料夾內
- 請拖拉這些圖片檔案到
XFDoggy.Droid
專案 >Resources
>drawable
目錄下 - 請拖拉這些圖片檔案到
XFDoggy.iOS
專案 >Resources
目錄下 - 請拖拉這些圖片檔案到
XFDoggy.UWP
專案 >Assets
>Images
目錄下
第一次啟動專案測試
- 滑鼠右擊
XFDoggy.Droid
專案節點,選擇設定為起始專案
- 按下
F5
按鍵,該使執行這個 Android 專案,看看是否可以正常執行。 - 若可以正常編譯,但是執行的時候出現了錯誤訊息:
java.lang.OutOfMemoryError
- 此時請滑鼠雙擊
XFDoggy.Droid
專案Properties
節點 - 在
XFDoggy.Droid
頁面,點選Android Options
>Advanced
- 在
Java Max Heap Size
欄位內輸入1G
- 重新執行一次