Free provisioning in Avalonia 11

Introduction

If you want to create mobile applications for iPhones (iOS operating system) then you have many ways to do that: Flutter, React Native, Cordova… But if you can write code in C# there are also a few frameworks: Xamarin, MAUI and Avalonia.

Currently I’m working with Avalonia UI so I wanted to deploy my apps for testing to my iPhone. The easiest way is to use Apple Developer account from Apple Developer Program and use TestFlight service. Although TestFlight is free, a paid developer control is required to use it (100$ per year). For me it was too much to pay for possibility to only test my apps.

But there is some free alternative: Free provisioning. To use it you need to have computers with MacOS (with installed Xcode) and Windows (with installed Microsoft Visual Studio), free Apple ID account and iPhone of course 😉

So today I would like to show you how you can use Free Provisioning with Avalonia UI framework.

How to use?

Options window used to set up an Apple ID account.

At the beginning set up Apple ID account in Visual Studio (Tools -> Options -> Xamarin -> Apple Accounts).

Connecting with Mac in Microsoft Visual Studio.

Next you have to turn on Remote Login in your Mac (in Mac: System settings… -> General -> Sharing -> Remote Login). After that pair and connect with your Mac from Visual Studio in Windows (Tools -> iOS -> Pair to Mac).

Then open Visual Studio solution that you want to deploy to iPhone (it’s „FreeProvisioning” in my case). You can try to run your app in iOS simulator to check if connection is working fine and if code is building without errors.

Now it’s time to config Free Provisioning.

Creating new iOS project in Xcode.

On Mac create in Xcode default iOS app project (File -> New -> Project). This project is needed to create keys used for our Avalonia app deploy (just create project, you don’t need to write any code in Xcode).

Setting up project properties.

In next page of wizard fill text inputs (remember to use your Apple ID account in „Team” field) and before clicking „Next” remember text showed in „Bundle Identifier” property (we will use it in future).

„Signing & Capabilities” tab in Xcode project properties.

After that step you should see opened project in Xcode. Click using left mouse key on your project name in Navigator (by default it’s top position in tree on the left). In new project properties go to „Signing & Capabilities” tab. Remember value from „Signing Certificate” field.

Adding new properties in csproj file.

Now go back to computer with Windows and open in notepad *.iOS.csproj file (in my case „FreeProvisioning.iOS.csproj”) in your iOS project directory. Add „CodesignProvision” (with your „Bundle Identifier”) and „CodesignKey” (with your „Signing Certificate”) properties with values from Xcode (you can see example in screenshot above).

Changing value „Bundle Identifier” in Visual Studio.

You have to also set up in „Info.plist” file property „Bundle Identifier” with value that you saw in Xcode.

Now set up your iPhone to be used in developer mode. Connect iPhone to Mac (accept and agree all pop-up’s on Mac and iPhone) and in iPhone go to Settings -> Privacy & Security, scroll down to the Developer Mode and turn it on. Probably after first deploy try you will have to give needed permits in „VPN & Device Management” page (Settings -> General -> VPN & Device Management).

After successful set up you should see your iPhone on device list in Visual Studio. Select your device and run app with debug from Visual Studio.

If iPhone is showing „App cannot be installed because its integrity could not be verified” errors then you can try to run your app in Release mode than in Debug. You can also try to completely remove app from iPhone and try to deploy it again.

Conclusion

If there are any problems during described process then you should also check Free Provisioning manual in MSFT docs.

I also had many problems with the configuration of the whole process, which I described above. I believe the problem is that Free Provisioning is too complex. But after many attempts and restarts of used devices and software finally it started to work.

With Free Provisioning you can test your apps with some limitations (check MSFT docs to read more), but in my case I could even test Bluetooth connection without any problems.

Solution presented in this post should also work with Xamarin and MAUI so if you have any problems in that frameworks then try to use my instructions 🙂

Traficar – tygodniowa wycieczka

Wstęp

Sezon wakacyjny już dawno za mną, więc mogę podsumować jeden z moich pomysłów. A chodzi o sierpniowy wyjazd, podczas którego postanowiłem skorzystać z Traficara jako środka transportu. Szczegóły poniżej 🙂

Planowanie

Miejscem wycieczki miały być Góry Sowie, czyli Dolny Śląsk. Jako bazę wypadową wybrałem miasto Dzierżoniów ze względu na zbliżoną odległość do wszystkich interesujących atrakcji w okolicy. Z Gdańska kawałek jest (dokładnie 548 km co daje prawie 6h jazdy samochodem). Żeby nie marnować całego dnia, a po przyjeździe nie być do niczego, jako alternatywę wyznaczyłem trasę pociągiem do Wrocławia (ok. 5h jazdy). Został jeszcze problem z odcinkiem Wrocław – Dzierżoniów (ok. 60 km). I tutaj z pomocą miał przyjść Traficar. Niestety w Dzierżoniowie nie ma strefy Traficara, co uniemożliwiało zakończenia wynajmu w mieście docelowym. I wtedy narodził się pomysł na zorganizowanie całej wycieczki wynajętym we Wrocławiu samochodem.

Szacowany koszt Traficara dla trasy z Gdańska do Dzierżoniowa to ok. 380 zł (+ koszty ewentualnych autostrad). Dla pociągu IC + Traficara z Wrocławia do Dzierżoniowa wyszło 162,71 zł. Dodatkowo w pociągu było można się wyspać i pooglądać seriale. Czyli druga opcja była najlepsza (no i miałem 50% zniżki w postaci wycieczki z dziewczyną 😉 ).

Polowanie

Po dojechaniu pociągiem do Wrocławia należało znaleźć jakiegoś wolnego „Traficzka”. Koło dworca głównego były akurat dwa. Na szczęście przed wyruszeniem w jego stronę zorientowałem się, że oba są modelami Renault Clio IV, a nie po to płacę tyle za wynajem, żeby teraz jeździć takim „starociem” 😉 Najbliższe Renault Clio V było spory kawałek drogi spacerem od dworca, ale nie po to są kółka w walizkach, żeby mnie to zniechęciło 😉 Nad głową słoneczna pogoda, więc nie było przeciwskazań, żeby trochę się zmęczyć po tak długim czasie w pociągu.

Skończyło się na dopłacie 1,95 zł do naszej rezerwacji. Dodatkowo po wędrówce okazało się, że do najczystszych samochód nie należał (niestety w środku), ale już nie starczyło sił, żeby po takim spacerze szukać kolejnego samochodu. Po chwili „klima” ustawiona, Android Auto skonfigurowane, Yanosik włączony – a więc w drogę. Niestety nie udało się zamocować uchwytu na telefon (deska rozdzielcza była tak zakurzona, że przyssawka co chwilę się odklejała). Na szczęście miałem obok siebie współtowarzyszkę podróży, którą mianowałem na stanowisko operatora nawigacji samochodowej. Po zatrzymaniu się na wszystkich światłach we Wrocławiu i ok. godzinie jazdy udało się dotrzeć do hotelu. Na ten dzień był to koniec samochodowych wycieczek.

Podróżowanie

Przed wyruszeniem na szlak 🙂

Samochód na górskich serpentynach sprawdzał się bez zarzutu. Android Auto też robiło robotę (szkoda, że Yanosik zrobił aktualizację w trakcie wyjazdu i nie udało się skorzystać z „samochodowej” wersji aplikacji).

Uzupełnianie prowiantu przed wycieczką 😉
„Trafi” dojedzie wszędzie 😉

Z nowych funkcji z którymi miałem do czynienia to bardzo doceniłem funkcję automatycznego otwierania i zamykania samochodu w zależności od położenia karty służącej jako kluczyk. Wadą takiego rozwiązania była możliwość pozostawienia uruchomionego silnika, bo niestety silnik w używanym modelu był bardzo cichy (trzeba było weryfikować jego działanie poprzez obrotomierz).

Uzupełnianie płynów

Z szacunków wynikało, że samochód podczas wynajmu będzie musiał przemierzyć ok. 505 km czego bak Clio raczej nie przewidywał. W związku z tym trzeba będzie zaliczyć jakieś tankowanie podczas wyjazdu.

W samochodzie, w osłonie przeciwsłonecznej, umieszczona była karta paliwowa Orlenu. Na szczęście obok hotelu znajdowała się stacja benzynowa potrzebnej firmy.

I tak przed jednym z wyjazdów na szlak zahaczyłem o Orlena (regulamin mówi, że tankować można dopiero, gdy stan w zbiorniku paliwa jest niższy niż 30%, więc najpierw trzeba było wyjeździć początkowy stan). Do baku, w przypadku Clio V, lejemy zwykłą „dziewięćdziesiątkę piątkę”.

Generowanie kodu PIN w aplikacji

Tankowanie należy opłacić z wykorzystaniem dołączonej karty paliwowej. Przy płatności potrzebna jest wiedza o:

  • kodzie PIN – generowany z poziomu aplikacji (tylko po wyłączeniu silnika 😉 ) i ważny przez 30 minut (kod najlepiej wygenerować przed rozpoczęciem tankowania),
  • aktualnym stanie przejechanego dystansu przez samochód (do odczytania z deski rozdzielczej).
Tankowanie tylko do pełna 😉

Szybko, miło i raczej bezboleśnie 😉

Podsumowanie

Podsumowanie wyjazdu

Wycieczka skończyła się na przejechaniu 473 km, które kosztowały 326,37 zł. Miłym zaskoczeniem był nowy sposób naliczania wynajmu, który dobę liczył od momentu rozpoczęcia wynajmu (wydaje mi się, że w przeszłości było to od północy do północy). Ostatecznie za 6 dni wynajmu zapłaciłem 354 zł. Całkowity koszt wyniósł 682,32 zł co przy 50-cio procentowej zniżce (uroki wycieczek z dziewczyną 😉 ) było bardzo sympatyczną kwotą za wynajem nowego samochodu (praktycznie z salonu), który można wziąć i oddać w dowolnym miejscu w strefie.

Na dodatek tuż przed zakończeniem wynajmu Traficar został przez godzinę wykorzystany jako przechowalnia bagażu, która dzięki braku opłat za parkowanie w płatnej strefie mogła znajdować się bardzo blisko dworca PKP.

Podczas wyjazdu dowiedziałem się też, że brak opłat w strefach płatnego parkowania dotyczy tylko miast, w których są strefy Traficar, więc w takim Wałbrzychu trzeba było się wykosztować ze swoich.

Ogólnie to raczej polecam taki sposób podróżowania (w głowie już jest pomysł na kolejny wyjazd) 🙂 Jeśli chodzi o wady to na pewno gdzieś z tyłu głowy bolał mnie „indywidualny” sposób podejścia do ewentualnych uszkodzeń/wypadków, bo niezależnie od intencji kierowcy może to się dla niego bardzo boleśnie skończyć (na szczęście nie musiałem tego podejścia sprawdzać).