Mając chwilę wolnego czasu doszedłem do wniosku, że pobawię się Universal App. Jakby ktoś nie wiedział to jest taki nowy “twór” Microsoftu umożliwiający tworzenie aplikacji na każde urządzenie z Windows 10. Niby zapowiada się fajnie ale jak zwykle nie ma tak prosto jakby się chciało!!
Zamiast siedzieć i testować nowe kontrolki, rozwiązania na emulatorach Windows Phone i Windows 10 to spędziłem kilka ładnych godzin nad rozwiązywaniem problemów.
Ale wszystko po kolei.
Wcześniejsze wersje produkowania Universal App polegało na tym, że do solucji zostały umieszczane 3 projekty. Jeden dla Windows, drugi dla Windows Phone a trzeci tzw. Shared, który umożliwiał pisanie jednego kodu właśnie dla Windows i Windows Phone. Tak jak dobrze pamiętam też nie wszystko działało jak było zapowiadane i dość szybko zmieniła się wizja Microsoftu dotycząca produkowania czegoś “uniwersalnego”.

Pierwsze zderzenie miałem z widokami dla różnych urządzeń. Różnica w ekranach pomiędzy telefonem a tabletem/PC jest spora a nie wiedziałem w jaki sposób mam przygotować widoki, które będą automatycznie zaczytywane w zależności od tego na jakim urządzeniu aplikacja zostanie uruchomiona.
Z pomocą przyszedł mi filmik na channel9 gdzie Navit Saxena opowiada jak to teraz jest zrobione i jak powinno się to robić.
Rozwiązanie? Jak zwykle mało oczywiste!!!!
Do solucji trzeba! dodać foldery i odpowiednio je nazwać. Ludzie!? No chyba nie tędy droga 😐
Foldery powinny się nazywać tak aby “prawie” jednoznacznie powiedzieć, którego urządzenia dotyczą.

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!170091″]

Tak, dobrze widzicie… DeviceFamily-Desktop, DeviceFamily-Mobile. Wyjaśniać chyba nie muszę, które foldery czego dotyczą.
No dobra ale jak dodam xaml’a do folderów to co z cs’em? No na filmie też zostało to wyjaśnione… Mając już na przykład MainPage.xaml w projekcie do odpowiedniego katalogu dodajemy tylko i wyłącznie XAML View

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!170093″]

I tak oto powstaje nam mniej więcej taka struktura projektu.

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!170092″]

O dziwo!!! Działa jak należy. Ale czas spędzony nad tym aby do tego dojść jest jak dla mnie czasem straconym.
Microsofcie! Czy nie można było dodać tych katalogów podczas tworzenia nowego projektu? Nie!!!!! Bo developer sam sobie to znajdzie!? SUPER!!!

Lecz to nie koniec moich zmagań a raczej początek.

Jak już zaczęło mi wszystko działać to pomyślałem sobie, że dorzucę do projektu mój ulubiony framework MVVMLight. Jeżeli nie wiecie jak to zrobić odsyłam do mojego poprzedniego artykułu, w którym to wyjaśniam. Choć dotyczy on poprzedniej wersji tworzenia uniwersalnych aplikacji to tak naprawdę nic się w tym momencie nie zmieniło.
Dodałem. I ku mojemu zdziwieniu… zadziałało bez najmniejszego zająknięcia 😀

Na laurach jeszcze nie osiadłem. Na szybko pomyślałem sobie, że dodam tytułowe SQLite do projektu i chwile się pobawię.
Żeby nie było tak kolorowo. Poprzednia “edycja” Universal App w wykonaniu Microsoft wymagała zainstalowania SQLite osobno dla Windows i osobno dla Windows 8.1. Tutaj jest trochę inaczej. Okazało się, że teraz możemy ściągnąć i zainstalować jedną zbiorczą bibliotekę z visualstudiogallery, która ma obsługiwać wszystko. Czyli jest moc! Jeden za wszystko, wszystko za jedno.

Trzeba jednak pamiętać o jednej bardzo ważnej rzeczy. SQLIte to jest coś zewnętrznego co Visual Studio interpretuje jako rozszerzenie więc aby dodać SQLite należy z dialogu dodawania referencji przejść w drzewie na Universal Windows -> Extension i wybrać SQLite for Universal App Platform

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!170094″]

Build aplikacji i pierwsze co widzę w oknie output to:

C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(2048,5): warning MSB3781: The SDK “SQLite.UAP.2015, Version=3.9.2” depends on the following SDK(s) “Microsoft.VCLibs, version=14.0″, which have not been added to the project or were not found. Please ensure that you add these dependencies to your project or you may experience runtime issues. You can add dependencies to your project through the Reference Manager.

K. mać, ile jeszcze… zwariuje!! Miałem zamiar fajnie spędzić czas, pogrzebać w czymś nowym i ocenić.
Więc moja ocena to -10 w skali od 1 – 10.

No nic. Nie można się poddawać! Ponad godzinę spędziłem nad szukaniem konkretnej odpowiedzi na warning z kompilacji, który uniemożliwiał mi skorzystanie z tej biblioteki.
Znalazłem!

Trzeba dodać kolejne rozszerzenie do Visual C++ 2015 Runtime for Universal Windows Platform Apps. Rozumiem, całość napisana w C++ z wraperem do C# ale czy nie można automatycznie dodać tego runtime przy rozszerzeniach, które tego wymagają?
Panie/Panowie z MS… naprawdę nie potraficie tego zrobić!?

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!170095″]

Zajebiście, dodane!

Na szybko dodaję do klasy zmienną SQLiteConnection myśląc, że ReSharper szybciutko rozwiąże mi problem i każe dodać odpowiedni using. Nic z tego… 😐

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!170096”]

I w tym momencie przypomniałem sobie, że nuget’em trzeba dodać sqlite-net. Oj ja głupi!
Dodałem…

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!170097″]

Przekompilowałem i o zgrozo to nie w tym jest problem!?

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!170097″]

Ludzie! No tak się nie robi! Wydaje mi się, że najpierw trzeba sprawdzić czy coś działa czy nie!

Niestety historii ciąg dalszy ponieważ wniosek był jeden. Nie zostawię tak tego!!
Znowu grzebanie po forach, tutorialach, które nic nie wnosiły a jedynie robiły młyn w głowie. W końcu znalazłem rozwiązanie na moje bolączki!
Zamiast instalować sqlite-net trzeba zainstalować sqlite-net-pcl. Zainstalowałem i? Resharper w końcu załapał co jest 5!

[onedrivefile id=”file.d569b1679fa79aae.d569b1679fa79aae!170100″]

Szczerze?
Po całym dniu zabawy z guglami, bingami… nie chce mi się, nie chce mi się dodawać czegoś innego/nowego do testowego projektu bo boję się, że “kolorowo” będzie dalej!

Microsofcie, raz jeszcze! Czy naprawdę aż tak chcesz zniechęcać nas do siebie samego?
Visual Studio to Wasze dziecko a nasz chrześniak. Nie dopuszczajcie do takich sytuacji, że programista musi spędzić cały dzień nad tym aby coś w końcu zadziałało.