Native Development for Windows Phone 8

  • View
    313

  • Download
    1

Embed Size (px)

DESCRIPTION

The largest change in the Windows Phone 8 SDK was the addition of support for native code. As a .NET developer you may be turned off by the idea of returning to an unmanaged language, but with the Windows Runtime (WinRT) API, Component Extensions (C++/CX) and C++ 11 support, native development for Windows Phone 8 may be less intimidating then you would think. In this talk I’ll go over some of the features of C++/CX and show examples of using the native WinRT API in a Windows Phone 8 app.

Text of Native Development for Windows Phone 8

  • 1. WAY AHEAD Native Development for Windows Phone The Windows Runtime API and Modern C++

2. 2 Senior Software Engineer at ALK Technologies Led development effort to bring CoPilot GPS navigation app to Windows Phone 8 #4 Free Navigation App in Window Phone store Windows Phone Dev by day and night Released 6 of my own apps to Windows Phone store Blog: www.robwirving.com Twitter: @robwirving Rob Irving 3. 3 History of Native on Windows Phone Why use Native? C++ 11 Windows Runtime (WinRT) Component Extensions (C++/CX) Options in Visual Studio Sample Code Q & A Agenda 4. 4 Lack of Native Development on WP7 hurt the platform Lack of high-end games available on other platforms More difficult/impossible to port existing apps from other platforms Support for Native Development is the single largest change in the WP8 SDK Native Gaming and Middleware products Unity 3D, Havok, Cocos 2D, etc. History of Native on Windows Phone 5. WAY AHEAD Why use Native? 6. 6 Reusability Existing code that you dont want to rewrite Use of existing 3rd party libraries (SQLite) Portability Share code between Windows, iOS and Android Write once, use it everywhere Why use Native? 7. 7 Game development with high-end graphics Direct3D on Windows and Windows Phone OpenGL on iOS and Android Performance Should not be viewed as the main reason to use C++ Performance can be better using Native, but is often exaggerated Why use Native? 8. 8 Portability & Reusability in action ~1,000 Lines of C# for WP8 ~7,000 Lines of new C++ and C++/CX ~800,000 Lines of existing C++ code ~99% shared code between Windows Phone, iOS and Android! CoPilot GPS Native Case Study 9. WAY AHEAD A brief introduction to Modern C++ C++ 11 10. 10 1979 1983 1998 2011 History of C++ C++ began as an enhancement to C at Bell Labs Originally named C with Classes Renamed to C++ C++ ISO committee defined C++ 98 No significant changes to C++ for 13 years C++ ISO committee defined C++ 11 New features heavily influenced by managed languages like .NET 11. 11 Type inference (auto) Avoid explicitly declaring the type of a variable Similar to .NET var keyword Lambdas Anonymous inline functions C++ 11 Features int num1 = 10; double num2 = 2.5 auto num3 = num1 / num2; std::vector cities; std::sort(begin(cities), end(cities), [](CityLocation a, CityLocation b) { return a.distance < b.distance; }); 12. 12 Strongly type enums Foreach-ish loop C++ 11 Features int numbers[] = {0, 1, 2, 3, 4, 5}; int sum = 0; for(int& number : numbers) { sum += number; } enum class Fruit { Apple, Banana, Orange }; if(meal.Fruit == Fruit::Banana) // do Banana stuff int fruitAbomination = Apple + Orange; // ERROR - Cant do this anymore 13. WAY AHEAD Windows Runtime API 14. 14 Shared API between Windows Phone 8 and Windows Store Apps Overlaps much of the existing Windows Phone .NET API Not all APIs are available for both ~11,000 Windows Runtime ~2,800 for both ~600 Windows Phone Runtime Windows Runtime API (WinRT) 15. 15 API is a COM-based Native API Accessible from C#, VB.NET and Component Extensions (C++/CX) Also Javascript on Windows 8 API definitions in Windows Metadata (.winmd) files Similar format to .NET API definitions Windows Runtime API (WinRT) 16. 16 Native / Managed Interop WinRT is the only supported method of interop The most painful parts of Native /Managed interop are gone with Windows Runtime No P/Invoke No Marshalling Native Interop is easy with WinRT 17. WAY AHEAD Component Extensions (C++/CX) 18. 18 Syntax and Library abstractions to interact with COM based WinRT API Much easier to develop for compared to old COM programming Component Extensions (C++/CX) 19. 19 Syntactically similar to C++/CLI ref and sealed classes Reference pointers or hats ^ Component Extensions (C++/CX) public ref class Foo sealed { }; Foo^ foo = ref new Foo(); 20. 20 Differences from C++/CLI No managed CLR No Garbage Collection, ref counted objects instead ref new instead of gcnew Pure C++ classes allowed in C++/CX classes Global ref ptrs allowed Component Extensions (C++/CX) 21. 21 Properties No value keyword Cant have public get, private set Component Extensions (C++/CX) public ref class Foobar sealed { public: property int Foo; // automatic/trivial property property int Bar { int get() { return _bar; } void set(int newBar) { if(newBar > 0) _bar = newBar; } } private: int _bar; }; 22. 22 Events Very similar to .NET events Unsubscribe using token Component Extensions (C++/CX) MyClass::MyClass() { geoLocator = ref new Geolocator(); // subscribe eventToken = geoLocator->PositionChanged += ref new TypedEventHandler(this, &MyClass::OnPosChanged); } MyClass::~MyClass() { // unsubscribe geoLocator->PositionChanged -= eventToken; } void MyClass::OnPosChanged(Geolocator^ geoLocator, PositionChangedEventArgs^ args) { auto geoPos = args->Position->Coordinate; } 23. 23 XAML with Direct 3D Options in Visual Studio 24. 24 Several Native Projects available Options in Visual Studio 25. WAY AHEAD Visual Studio Demo 26. 26 Additional Resources Windows Phone 8 Development Internals (Whitchapel, McKenna) http://amzn.to/1a2989c Modern C++ and Windows Store Apps (Poduri) http://amzn.to/GEW6Y4 27. 27 Channel 9 channel9.msdn.com Build 2012 Sessions channel9.msdn.com/Events/Build/2012/ Build 2013 Sessions channel9.msdn.com/Events/Build/2013/ Going Native channel9.msdn.com/Shows/C9-GoingNative C++ 11 Features in Visual C++ 11 blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx Additional Resources 28. 28 Questions & Answers Slides will be posted to blog: robwirving.com Thank You!