Windows 10 終於在7月29號發佈了,先來看看對於Windows 10 Universal Windows Platform App的開發,除了傳統的C#(C++)+XAML / WinJS+HTML 的方式外,還兼容了Web,Win32應用移植的方式,還有對Android和iOS的應用開發遷移到UWP進行了支持。如下圖:
通過Windows Bridge 把傳統Web/Win32/Android/iOS的應用程序帶到Universal Windows Platform App上。有人說這個技術有點無恥,但是我覺得也是很有意義的。首先解決了Windows Store精品應用不足的問題,其次對於應用不再侷限於用固定的技術了,吸納更多的開發者。
上週微軟公佈了Windows Bridge for iOS 的方案,而且這個項目是開源的,意味着你可以更好地基於這套轉換工具進行應用優化,把更好的應用體驗帶到Universal Windows Platform App當中。
Windows Bridge for iOS 的相關資源地址 : https://github.com/Microsoft/WinObjC
Windows Bridge for iOS SDK 的下載地址 : https://github.com/Microsoft/WinObjC/releases/download/0.1-preview/winobjc.zip
通過查看代碼,我認爲 Windows Bridge for iOS 的基本原理是這樣的 :
如圖,Windows Bridge for iOS 是通過把傳統的iOS API 通過objctrt 和 Starboard 進行轉換後,整合到UWP的API中。而對於原有的Objective-C 項目,需要通過SDK中的vsimporter.exe進行項目轉換。其實就是把原有的接口整理成兼容UWP API的模式。你可以理解爲Windows 10 中自帶了一個兼容iOS API的子集 。
vsimporter.exe
vsimporter.exe其實是一個cmake工具,它把原來通過Xcode創建的iOS項目轉換爲Visual Studio 的項目,並對該項目的一些第三方庫,和UWP的兼容性進行修改,達到可以變成UWP App的條件。
做一個簡單的例子看看
這是一個很簡單的iOS 項目,我點擊Button 按鈕就可以顯示 Hello Universal Windows Platform(如圖)
現在我把它轉換爲UWP 的應用 。
1. 你需要先把WinObjc SDK 解壓到任意路徑上,如圖 :
2. 通過命令行定位到對應的項目 ,並執行SDK bin目錄下的vsimporter.exe 如下圖
如果執行成功,就會有如下圖所示
這裏說明一點你可以轉換爲Windows 10 的 UWP 應用外,還可以轉換爲Windows 8.x/Windows Phone 8.x的應用(但這個意義不大就不說了)
我們可以比對轉換前後的項目變化 ,如圖在原有基礎上多了Visual Studio 2015的Solution 和一個項目名以.vsimporter爲後序的文件。而.vsimporter的文件內包含的是轉換後新增的一些圖片資源文件和一些頭文件索引。
3. 打開項目看看
原有的Xcode項目被分成一個基於C++的Universal Windows 項目,和帶原來.h的Headers Shared Library項目。
4. 跑一下
一個簡單的項目就可以跑了。
5. 一些注意事項
首先這是一個0.1的項目,很多的不完善,如果你希望把一些佈局引入如Storyboard/AutoLayout/xib(xib貌似用舊版的Xcode會行)就暫時等等了,基本不支持,所以我例子本希望用xib可是到了Visual Studio 還是轉換失敗了。
其次是你可以在Visual Studio 2015上修改Objective-C的代碼,建議安裝SDK bin目錄下的objc-syntax-highlighting.vsix,獲取高亮支持。
還是那句你別指望把項目遷移過來就算了,因爲這和UWP的用戶體驗相違背的,特別是應用。你還是好好做做你的UWP程序,這只是一個過渡的方法。
遷移還是去項目的Wiki看看那裏比較詳細,還有項目進度,解決一些遷移問題。https://github.com/Microsoft/WinObjC/wiki
個人還是挺欣賞Windows Bridge的項目的,話說微軟的遷移技術真的牛B ,可以把iOS/Android這類型的程序帶到了UWP來。但我覺得我僅僅只是遷移,更應該把多種語言帶到平臺中來,例如Swift ,Objective-C 可以直接寫UWP的應用就更好了。希望Windows Bridge在後續版本有更多驚喜