folder Tahribat.com Forumları
linefolder Android - IOS Programlama
linefolder Unbalanced - Xamarin Nedir ?



Unbalanced - Xamarin Nedir ?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    Selam arkadaslar,

    Bu konuda gectigi üzere Xamarin ile ilgili bazi temel noktalara deginmeye calisacagim. Umarim faydali olur. Yazimdaki gramer ve kelime hatalarindan dolayi kusura bakmayin. Maalesef cok fazla Türkce kullanmadigim icin, diger dillerden kaynakli bariz gramer hatalari yapiyorum. Acik olmayan noktalari sorabilirsiniz.

     

    Kisaca yazilim hayatimdan bahsedecek olursam, suan IoT Application Engineer olarak uluslararasi bir firmada calisiyorum (bu yaziya ilk basladigimda farkli bir iste calisiyordum). Görevlerimden biri de Xamarin ile yeni uygulamalar gelistirmak ya da var olan uygulamalara yeni özellikler eklemek. Suan da NFC tabanli bir ölcüm cihazinda veri okuyup-yazan bir mobil yazilim gelistirmekteyim. Bunun haricinde eski calistigim firmada, farkli platformlarda cesitli toollar gelistiriyordum (Bir ara imkanim olursa GUI tabanli pluginlerle ilgili kücük bir ekitap yazmak istiyorum, tabi arkaplaninda MEF-MAF (versiyonlama ve dll resolving ile ilgili) karisimi bir yapiyla. Ingilizce bile pek ornek yok bu konuyla ilgili, gerci cok kisinin isine yaramayabilir ama talep olursa bakabilirim)

     

    Xamarin’in temelleri mono projesinden gelmekte (Isteyen arkadaslar Miguel de Icaza yi arastirabilir), hatirlayanlar olur elbette, linux ortaminda windows appleri calistirmak icin cesitli yollar mevcuttu, bunlardan birisi de mono projesiydi ve amaci da .net framework catisi altinda cross-platform olarak calisabilen uygulamalarin gelismesinde ön ayak olmasi. Nitekim oldu da. Xamarin’in kurulmasiyla .Net tabanli dillerin cross-platform olarak calisma imkani saglandi. (Mono ispanyolca maymun demek, o yüzden biraz xamarin-mono ile ilgili olanlar her yerde maymun resmi görmelerinin sebebi budur :) )

     

    Bilindigi üzere mobil artik cagimizin büyük bir gercegi ve giderek büyüyen bir pastaya sahip oluyor ve gelecekte de kolay kaybolmayacak bir alan. Google un destekleriyle Java; Android icin büyük bir önem sahibi. Apple da Objective-C ile iOS/macOS icin gelistirme yapmaya olanak sagliyor ve bunun yaninda Swift dilini destekleyerek eskide kalmis Objective-C nin yerine koymayi planlamakta ve gayet de iyi gitmektedirler. Keza Google da benzer bir sey gerceklestirilmeye calisiliyor. Bir cek firmasi olan Jetbrains’in, Kotlin programlama dili, Android gelistirme icin kullanilmaya ve Google tarafindan desteklenmeye baslandi. Java ile ilgili cesitli sikintilar (oracle firmasinin cikardigi problemler) oldugu icin google’un Kotlin diline yatirim yapacagi soyleniyordu, suan beklenilen etki yok ama kim bilir...

     

    Durum boyle iken, mobil alanda, Windows Phonelarla birlikte Microsoft bir basari saglayamadi. Ancak koskoca firmanin bu büyük pazardan pay edinmemesi olacak is degildi bu yüzden aciktan aciga Xamarin’i desteklediler (ve benim tahminimce satin almak istediler ama Miguel de Icaza satmadi). Cross-platform icin gelistirme yapmak isteyenler Xamarin i harici olarak satin almak zorundaydilar ta ki microsoft, Xamarin’i satin alabilene kadar. Ayrica bildigim kadariyla Windows Phone destegi kalkti, onun yerine Windows 10 da da calisabilen UWP (universal windows platform) destegi geldi. Bu konuda cok da fazla detaya girmek istemiyorum ama günümüze gelirsek artik Xamarin yerine Microsoft var ve haliyle Xamarin Studio da Visual Studio for Mac adi altinda piyasaya cikti. Ismi haric, ben pek büyük bir degisiklik göremedim.

     

    Biraz fikir edindikten sonra, Xamarin’e biraz daha detayli bakabiliriz. Yukarida bahsettigim gibi Xamarin, cross-platformu destekleyen bir gelistirme ortami. Xamarin’i iki sekilde ele almak mümkün. Kendime baski acima göre ayirirsam Xamarin Native 1, Xamarin Native 2 olarak konulari islemek istiyorum. Detaya girmeden önce, isminden de anlasilacagi üzere EVET Xamarin ile native mobil appler gelistirilebiliyor.

     

    1- Xamarin Native 1

    1.1. Genel Bilgi

     

    Boyle bir isim yok aslinda kendi uydurdugum bir sey :) Xamarin Native 1’i, iki kisma ayirmak gerekiyor. Bunlarin biri Xamarin.iOS digeri de Xamarin.Android. (Bir de Xamarin.Mac var ama konumuz mobil oldugu icin girmeye gerek yok). Ayrica windows OS tabanli telefonlar icin de gelistirme yapilabiliyor ancak bu Xamarin’in özelliginden cok microsoft’un (visual studio) getirdigi bir özellik oldugu icin onu da katmiyorum.

     

    Hem Xamarin.iOS hen Xamarin.Android’i C# ya da F# ile yazabilirsiniz. (Xamarin’in VB.Net destegi yok ancak ek araclarla vb.net ile de yazilabilir). Baslamadan önce onemli bir noktayi belirtmek istiyorum. C# bilmek ya da iyi bilmek, Xamarin ile iOS/Android uygulama yapabileceginiz anlamina gelmez. Cünkü iki platformun da kendine ait classlari mevcut. Yani mesela Windows - Form yerine, iOS’da ViewController, Android de de Activity lerle ugrasacaksiniz. Yani Objective-C (ios) ya da Java (Android) da gördügünüz hemen hemen tüm classlar, isimleriyle birlikte Xamarinde de mevcut. Yine bir baska örnek olarak, Xamarin.iOS da NString kullanilabiliyor. Ayni class i biz Objective-C de görüyoruz. O yüzden yazilim gelistirme asamasinda, C# bilmekten ziyade platformun kütüphanesini tanimak daha önemli bir nokta oluyor. Ancak elbette bir yazilim dili bilmek, (özellikle C#), sizin hizli ilerlemenizi saglayacaktir.

    1.2 Xamarin.iOS

     

    Xamarin.iOS basitce; iOS kütüphanesi icin yazilmis bir .NET framework destekli bir wrapper. Yani iOS un bize sundugu API lerle ne yapilabiliniyorsa aynisinin birebir karsiligi Xamarin.iOS mevcut ve ayrica daha da önemlisi, .Net Framework’un bize sagladigi bir cok kütüphaneyi de kullanabiliyoruz. Xamarin, compile asamasinda bunu iOS icin uygun dile cevirip build ediyor (Bu noktada mac OS a ihtiyac duyuyor). Kisacasi biz C# ile gelistirsek de, arkaplanda isler aslinda Apple’e uygun (istedigi) sekilde yürüyor.  Bu kod cevirme olayi aslinda mtouch adi verilen bir sistemle yapiliyor. Mtouch gereksiz kullanilmayan seyleri silip iOS simulator ve iOS tabanli cihazlarda calisabilecek sekilde native Assemblyler yaratiyor. Detayli bilgi edinmek isteyen arkadaslar buraya buraya buraya ve buraya bakabilirler. Asagidaki resim, compile asamalarini göstermekte.

     

    Güzel olan nokta, Apple yeni bir iOS sürümü cikarip, kütüphanesini yayimladiktan sonra, Xamarin de bu yeni kütüphane icin API’leriini güncelliyor. Boylece yeni versiyonun nimetlerinden yararlanilabiliyor. Ayrica iOS icin hazirlanmis native kütüphaneleri Xamarin’de kullanma imkani da var (sahsen hic denemedim o yüzden pratik anlaminda cok fikrim yok). Ayricabircok firma/kisinin ücretli/ücretsiz yayinladigi kütüphaneleri NuGet/github üzerinden erisme sansiniz mevcut. Kullanabileceginiz cesitli temalar da mevcut.

     

    En önemli ve merak edilen bir konu da; hiz ve performans konusu sanirim. Ben hem Objective-C hem de Xamarin.iOS ile uyguala gelistirdim, öyle gözle görülebilecek büyük farklar yok. Zaten dedigim gibi Xamarin arkaplanda ilgili platforma uygun assemblyler ürettigi icin biraz fazlalik kod haricinde benzer kodlar elde ediliyor.

     

    Teorik ve pratik olarak macOS a sahip bir bilgisayar olmadan da iOS uygulamalari gelistirilebilse de Apple’in politikalari bu olaya maalesef engel oluyor (katildigim bir konferansta, microsoft calisani Laurent Bugnion böyle söylemisti). O sebeple Apple, her türlü build isleminde macOS’un varligini zorunlu tutuyor. Windows da iOS uygulamasi gelistiren arkadaslar sanal makinelere macOS kurup (ya da tam tersi mac’e sanal windows kurmak) build islemini macOS (xCode yapiyor bu isi) a yaptirmak zorunda kaliniyor. iPhone/iPad simulatorler bile sadece mac ortaminda uygun oldugu icin her halükarda gerekiyor. Ancak Xamarin (Microsoft) bu lisans problemini cözdü. Xamarin Live Player diye bir uygulamayi telefonunuza ya da tabletinize indiriyorsunuz ve bu uygulamayi gelistirdiginiz uygulama ile eslestiriyorsunuz. Daha sonra, uygulamaniz otomatik olarak Microsoft’un cloudlarinda compile ve deploy edilerek, Xamarin Live player da, uygulamanizi kullanabiliyorsunuz. Youtube da bununla ilgili videolar bulabilirsiniz. Yine de uygulamanizi App Store’da yayinlamak icin bir mac isletim sistemi olan bilgisayara sahip olmaniz gerekmekte.

     

    Xamarin.iOS icin bir tabloda avantaj ve dezavantajlari yazilirsa;

     

    Avantajlar

    Dezavantajlar

    Native olarak derleme

    Appstore’da yayinlamak ya da telefonda test icin mac OS gereksimi

    Her yeni iOS versiyonuna uyumlu bire bir karsiligi olan library

    Kaynaklarin, Objective-C/Swift’e oranla daha az sayida olmasi

    iOS native kütüphanelerini ve CocoaPods’u kullanma imkani

    Is imkanlarinin daha kisitli olmasi

    C# bilenler icin Objective-C karmasasina girmeme

     

    (bir cok) dahili ve (bazi) harici .Net kütüphanelerini kullanma imkani

     

    Gelistirme icin Visual Studio Community i tam ve ücretsiz edinme

     

    Xamarin Live Player ile uygulama testi

     

    1.3 Xamarin.Android

     

    Xamarin.iOS daki benzeri olaylar Xamarin.Android’de de var. En büyük fark compile asamasinda. Apple’in politikalari yüzünden, JIT compile mümkün degil o yüzden AOT olarak compile ediliyor. Android icin ise ilgili kodlar JIT compiler ile derleniyor. (JIT ve AOT compile farklarini internetten bulabilirsiniz)

     

    Bunun haricinde Java (Android) da alisik oldugumuz classlar, metodlar Xamarin.Android’de de var. Yine tasarim da, ID ekleme de ayni sekilde. iOS icin yazdiklarimin hemen hemen hepsi benzerlik gösteriyor. Android’in en büyük avantaji ise iOS un aksine tamamen Windows ortaminda uygulama gelistirebilme sansinizin olmasi. Emulatorler de Windows’da sorunsuz calisabiliyor ve herhangi baska bir seye ihtiyaciniz yok. Isterseniz de harici emulatörler satin alip kullanabilirsiniz ancak sahsi fikrim cok gerekli olmayabiliyor. Xamarin.iOS ile benzerliklerden dolayi Xamarin.Android ile ilgili cok yazmayacagim. Java da ne yapiyorsaniz aynisini C# kullanarak yapiyorsunuz diye kisaca özetleyebilirim.

    1.3 Cross-Platform icin Ortak Projeler   

     

    Xamarin de iki sekilde ortak kod yazimi mümkün. Bunlar Shared Code ve Portable Library.

     

    1.3.1 Shared Project

     

    Shared Project’de yazdiginiz metodlari platforma özel olarak olusturabilirsiniz. Mesela veritabani ile iliski bir class iniz var ve bu class veritabani baglanti islemlerini yapiyor, ekleme-silme islemini yapiyor. Bu yapiyi tüm mobil platformlarda kullanmak istiyorsunuz ancak platforma özel bir seyler de eklemek istiyorsunuz. Mesela veritabaninda her yeni bir kayit olustugunda android icin mail göndermek, iOS icin messagebox/alert göstermek ve windows phone icin de takla attirmak istiyorsaniz  #if Platform_Ismi ni kullanarak ayirabilirsiniz. Ornek vermem gerekirse;

     

    public void Ekle(Kayit kayit)
    {
           DBEkle (kayit);

           #if  __ANDROID__
                  MailGonder();
           #else
           #if  __IOS__
                  MesajGoster();
          #else  // UWP icin
                TaklaAt();
    }

    Share Code herhangi bir dll olusturmaz ama kendi mobil projelerinizin icinde kullanabilirsiniz. Ayrica shared projeye, platform spesifik libraryler ekleyebilirsiniz. Asagidaki resim, bu konuyu daha iyi sekillendirmenizi saglayacaktir

     

    1.3.2. Portable Class Library

     

    Portable Class Library (PCL) de, Shared Code gibi ortak kodlari bir arada toplamaya calisan bir proje tipi. Ancak Shared Code gibi platform ayrimi yapilmiyor. Burada tüm platformlar icin ortak olan kodlar yazilmali ve platform spesifik libraryler eklenemiyor. Proje derlendiginde, bircok yerde kullanabileceginiz DLL olusur . Bu proje tipin daha cok wrapper/helper yazmak icin kullanilabilir. Mesela bir webservisiniz var ve bu webservis tüm platformlar icin ayni isi yapacaksa, bu servis icin yaratilacak olan bir wrapper bu library icinde barinabilir. Asagidaki resim konuyu daha iyi anlamaniza vesile olabilir.

    2- Xamarin Native 2

    Bu bölümde Xamarin’in daha cok cross-platform a yönelik olan kismini inceleyecegiz yani Xamarin.Forms. Kisa bir süre öncesine kadar kesinlikle cok fazla sicak bakmiyordum ancak kullandikca sevmeye basladim her ne kadar cok ve gereksiz sikintilar cikarsa da.

     

    Xamarin.Forms, Xaml tabanli cross-platform uygulamalar üretmemizi saglar ve bu kodlarin mümkün mertebe ortak olmasinin temel alindigi bir platformdur. Ben baslik olarak Xamarin Native 2 dedim ancak bu isimi yine kendim verdim. Isimden de anlasilacagi üzerine yine Xamarin.iOS/Android de oldugu gibi, cikti olarak native uygulama elde ediyoruz.

     

    Tipik bir Xamarin.Forms uygulamasi olusturdunuzda normalde bir tane Xaml projesinin oldugu ortak proje ve 3 tane platform spesifik proje olusturulur (iOS, Android ve UWP icin). Tüm design ve business logic olaylari Xaml projesinde ya da farkli projelerde gerceklestirilir. Platforma özel kodlar eklenebilir ancak cok fazla yapilmamasi tavsiye edilir. Sonuc olarak grafik arayüz, Xaml projesinde yapilmakta. Burada yapilan grafik arayüzü tüm platformlarda ayni sekilde (platformun özelligine göre) görülür. Ornek vermek gerekise:

    Yukaridaki resimde görülecegi üzere  label ve textbox kullanilmis. Platform türüne göre bu label ve textboxlar hatta diger controller farkli sekilde gösterilmekte. Yani textbox, iOS da nasil görülüyorsa o sekilde, android de nasil görülüyorsa o sekilde gösterilmekte. Ve bunlar ayni kodun ürünü. Yukarida bahsettigim Xaml projesinde, bu arayüz, tek bir form olarak tasarlanmakta ve 3 platform icin kullanilmakta. Yani her platform icin ayri ayri tasarlamaya gerek olmadan, Xaml ile tek bir form tasarlayip bunu 3 platformda da kullanabiliriz. Böylece  her platform icin, designa ayiracagimiz vakit azalmis olacak. Cünkü tek bir tasarimi tüm platformda kullanabiliyoruz. Yine de bazen platform tabanli istisnalar olabiliyor. Örnek vermek gerekirse, full screen ekranda bazen tasarladigimiz layer, iOS da cok üst tarafta görülüyor (cünkü en üstte bulunan barin (sebeke ismi, wifi, saat bilgisi olan bar) üstüne geciyor). Bu durumda tasarladigimiz layeri, iOS projesinde margini degistirmemiz gerekmekte. Asagida bununla ilgili kücük bir örnek var.

     

    <StackLayout>
     <StackLayout.Margin>
       <OnPlatform x:TypeArguments="Thickness">
         <On Platform="iOS" Value="0,20,0,0" />
         <On Platform="Android, UWP" Value="0,0,0,0" />
       </OnPlatform>
     </StackLayout.Margin>
    </StackLayout>

    Yukaridaki örnek Xaml kodunda görüldügü gibi, StackLayout un margin özelligini iOS icin üstten 20 pixel veriyoruz. (burda margin left-top,right,bottom seklinde gidiyor). Böylece Stacklayout ekledigimizde iOS icin üstten 20 pixellik bir kaydirma yapilmis olacak ve böylece üstteki bar ile cakismamis olacak. Bu sekilde ceisitli özellikler eklenebilir. Tabi cok nadir de olsa Android, iOS ve UWP projelerine de cesitli kodlar yazilabilir ama genel itibariyle bir cok sey, özellikle tasarim, Xaml projesinde yapilir.

     

    Simdi kavramlarimizi biraz daha netlestirelim. Bahsettigim Xaml projesi aslinda yukarida söyledigim PCL’in karsiligidir. Yani ortak kodlar yazdigimiz bir proje türü. Xamarin.Forms bunu bizim icin otomatik olusturmakta. Xaml deyince akillara hemen MVVM gelmesi lazim, gelmiyorsa büyük bir bilgi eksikliginiz söz konusu demektir. MVVM bir design pattern degil, bir architectural patterndir. Yani bir nevi bir konsept olarak düsünebiliriz.




    2.1.  MVVM

     

    Konumuz Xamarin oldugu icin MVVM in detaylarina girmeyecegim ancak bu pattern bizim kodumuzun daha anlasilabilir olmasina ve birbirinden ayirmamiza yardimci olmaktadir. MVVM yani model, view, viewmodeli, asagidaki resimde cok güzel olarak anlatmakta.

     

     

    Kisaca özetlemek gerekirse; projemiz 3 katmandan olusuyor. View katmani bizim grafiksel tasarimimizin oldugu kisim (Xaml dosyasi hem xaml kodlarini hem de c# kodlarini barindiran 2 dosya o yüzden resimde View(Xaml) ve View(code) seklinde görüyoruz). Model ise bizim entitylerimiz yani icerisinde her hangi bir business logic icermeyen sinif tanimlamalarimiz ve verilerimizin kaynagi. ViewModel i bir köprü gibi düsünebiliriz. ViewModel adinda da anlasilacagi üzerine hem View hem de Model katmani arasinda olan ve iki katmanin birbiriyle haberlesmesini saglayan baska bir katmandir.  Asagidaki resim bu olayi biraz daha somut hale cevirecek.

     

    Yukaridaki resimde daha acik sekilde View model katmaninin islevi görülmekte. View Model’in bir kac görevi mevcut. Property deger degisimlerini katmanlar arasi iletmesi, databinding, Command ve Converter. Bunlarin hepsinin detayina girmeyecegim ancak MVVM in neden kullanildigini anlatmak icin kücük bir örnek üzerinden gitmek istiyorum. Ornegimiz söyle:

     

    Xamarin Formumuzda bir tane sayfa var ve bu sayfanin üzerinde bir tane de textbox (entry diye geciyor Xamarin.Forms da) var. Bu textbox da benim meslegim yaziyor diyelim ve bu bilgi de database den geliyor. Simdi normal uygulamalarda, kod tarafinda hemen database sorgusu yapilir ve meslek bilgisi database den cekilip txtMeslek.Text = dbden_gelen_veri; seklinde kullanilir. Ancak veritabaninda olasi bir degisiklikte, textbox umuzdaki veri hala ayni kalmis olacak, ta ki biz uygulamamizi yeniden baslatip degismis veriyi görene kadar. Ya da textbox daki veriyi degistirdigimde, veritabaninin bundan haberi olmayacak. (Not: buradaki veritabanini daha iyi anlamaniz icin kullaniyorum aslinda anlatmak istedigim kisim Model), ta ki kaydedene kadar. Ben bu islemleri anlik ve herhangi bir efor sarfmetmeden halledilmesini istiyorum. Yani veritabanindaki veri otomatik olarak benim textbox’uma gelsin (buna data binding diyoruz) ve gerek veritabaninda (model katmaninda), gerekse textbox da bir degisiklik olunca birbirlerinden haberdar olup senkronize olsunlar (buna da notify propertychanged diyoruz). Textbox umuzun Text propertysini, veritabanindan gelen meslek degerine bagliyoruz (binding) böylece program otomatik olarak bu degeri aliyor ve bunu viewmodel üzerinden yapiyoruz. Biz textbox da bir degisiklik yaptigimizda da veritabanimizin (model katmaninin) bundan haberdar olmasini istiyoruz yani bu Text property ile ilgili bir changed eventimiz oluyor, bunun tam ismi de INotifyPropertyChanged. Tabi cift tarafli oldugu icin Text propertysini binding yaparken cift yönlü oldugunu belirtmemiz gerekiyor. Bu sayede iki tarafta var olan degisiklerden haberdar olup gerek grafik arayüzü gerekse modelimizi otomatik olarak senkron hale getirebiliriz.

     

    Diger iki elemente gelirsek:

     

    Converter bize cesitli veri tiplerini dönüstürmemizi saglar. Ornek vermek gerekirse, modelimde bir property var ve ismi IsMale (erkek mi) olsun ve bool deger tutsun. Ben programi actigimda IsMale true ise, örnek bir erkek resmi, false ise bir kadin resmi göstermek istiyorum.Ancak resmin tipi Image/Bitmap, ama bana gelen deger boolean. Iste converter lar bir deger tipini, baska bir deger tipine cevirmekte.Yani burada bool deger alip bana image/bitmap deger yolluyorlar

     

    Son olarak Command ise ICommand interface i ile geliyor. Bu interface bana komutun calisip calisamayacagina dair bir implementation imkani sagliyor. Ornek vermek gerekirse, bir online satin alma uygulamamiz olsun. Bu uygulama ile kredimiz oldugu sürece magazalardan bir seyler alabilmekteyiz ve bunu saglayan -Satin Al- isimli bir butonumuz var. Bu butona tikladigimda yani click eventini (commandini) cagirdigimda ICommand öncelikle CanExecute metodunu cagirmakta ve bu metod ile siz, kisinin kredisinin olup olmadigini kontrol ederek bu komutun calisip calismamasina izin verebilirsiniz. Hakeza, IsEnabled propertysini üstte anlattigim binding ile de kontrol edebilirsiniz. Yani kredisi yoksa butonu disabled yap diyebilirsiniz. Ancak komutlarla calisirken ICommand kullanilabilir. Böylece karmasik olarak check yapmak yerine, bu isi CanExecute da kontrol edip, hakki var ise Execute metodunun cagrilmasina müsade edilir.

     

    MVVM in basitce anlatimi bu sekilde. Eger Xamarin.Forms ile ugrasacaksaniz kesinlikle ögrenmeniz gereken bir sey. Ben ön bilgi amacli yazdim ki MVVM ögrenirken kavram kargasasi yasamaminiz icin en azindan az cok fikir sahibi olmaniz acisindan.

     

    2.1.1 MVVM Light Toolkit

     

    Yazinin baslarinda söyledigim bir sey vardi. Katildigim bir konferansta konusmaci olan Laurent Bugnion tarafindan gelistirilmis olan MVVM Light isimli kütüphane, kendisi buna toolkit demeyi tercih ediyor. Bu kütüphane MVVMCross a alternatif olarak yapilmis daha basit, karmasik bir implementation iceriyor. Bir cok avantaji mevcut. Icerisinde bir tane IOC container yerlestirerek (SimpleIoc demis ismine) dependency Injection (DI) kullanmamiza imkan saglamakta (harici olarak da her hangi bir DI componenti de kullanabilirsiniz ninject, unity gibi). Onun haricinde cesitli eklemeler yapmis mesela ICommand interface ini direk kullanmak yerine daha basit uygulama olarak RelayCommand getirmis vs. Bu toolkit in de detaylarina girmiyorum. Pluralsight da bununla ilgili bir egitim hazirlamis, isteyenler izleyebilir. Egitimi Torrent de bulabilirsiniz.

     

    Bu kütüphaneden bahsetmemin asil amaci, bir cok platformu desteklemesi. Daha acik ifadeyle Xamarin.Forms dan tutun da WPF e kadar bir cok cesitli platformda bu libraryi kullanabilirsiniz ve benim en cok sevdigim bir özelligi de .net standard 2.x i desteklemesi. Kisaca aciklamak gerekirse; .net standard, bir nevi üst catidir. Bilinildigi üzere .Net Core, cross platform icin olusturulmus bir cati türüdür ve sadece bir kac tane platformu desteklemektedir (ASP.NET Core, Cloud, Console ve UWP). Ve maalesef diger platform destekleri yok. O sebeple .net standard olarak yeni bir cati sürüm ortaya cikti. Suan 2.x versiyonu uygun. .Net standard ile yazilmis libraryler A dan Z ye tüm platformlarda kullanilabilir (aslinda kullanilabilecek). Hala gelisme asamasinda olmasina ragmen, biz suanki xamarin.forms projemizi .net standard kullanarak gelistirmekteyiz. Asagidaki resim güzel bir özet aslinda

     

     

    Henüz tam fonksiyonel olarak desteklenmiyor resimdeki gibi ancak zamanla daha cok sey desteklenecek. Mesela son sürümde hala WPF destegi cok zayif ancak UWP ve Xamarin destegi iyi. Diger platformlar icin henüz deneme sansim olmadi.

     

    3- Xamarin Test Cloud

     

    Maalesef artik Xamarin Test Cloud isimli bir sey kalmadi. Microsoft’un Xamarin’i satin almasindan dolayi bunun ismini de degistirdi ve bir kac yenilikle ismine App Center adini verdi. Suan bir kisim hizmetleri ücretsiz ancak ücretli olan servisleri de var. Henüz deneme sansim olmadi. Benim bilgim Xamarin Test Cloud ile ilgili. Kisaca deginirsem; yazdiginiz mobil uygulamayi gercek zamanli olarak gercek cihazlarda test edebiliyorsunuz. Yüzlerce/binlerce gercek ve farkli telefon ve tablet modellerinin oldugu bir ortamda uygulamaniz farkli mobil versiyonlariyla test ediliyor ve var olan hatalarin raporlarini alabiliyorsunuz. Detayli bilgi icin buraya ve buraya bakabilirsiniz.



    4- Sonuc

    Kisa olarak Xamarin’in genel isleyisine deginmeye calistim. Xamarin’i artik biraz tanidiginizi düsünüyorum. Nereden baslamak lazim diye soran arkadaslara tavsiyem ise, eger cidden cross platform uygulamalar yapma niyetindeyseniz ve cok fazla zaman kaybetmek istemiyorsaniz ve cok cok karmasik bir proje ile ugrasmayacaksaniz, Xamarin.Forms’u avantajlarindan dolayi tavsiye edebilirim. Ozellikle MVVM uygularsaniz her seyin daha kolay oldugunu göreceksiniz. Elbette kisitlamalar ve sikintilar olacak. Ornegin labellar da underline özelligi yok, ama bu özelligi isterseniz de custom UI elementler olusturabilme sansiniz mevcut. Ben acikcasi Xamarin.Forms a karsi cok önyargiliydim ancak suan bana cok mantikli geliyor. Hele .net standard kullanabilme sansim oldugu icin bundan sonraki mobil projelerde genel olarak Xamarin.Forms üzerinden gitmeyi düsünüyorum.

     

    Döküman ile ilgili ise; fikir sahibi olmaniz adina cok fazla detaya girmeden, yüzeysel olarak Xamarin ve Xamarin ile yapilabilecek seylerden bahsettim. Umarim yeteri kadar anlasilir olabilmisimdir. Biraz da olsa gideceginiz yolu aydinlatabilecek bir döküman oldugunu düsünüyorum. Cok daha uzun yazmak isterdim ancak vakit problemi yüzünden pek ugrasmak mümkün olmuyor. Bahsettigim bircok sey ile ilgili internette cok fazla döküman bulabilirsiniz. Daha önce Xamarin ile ilgili bir döküman yazacagimi söyledigim icin bunu tamamlamak istedim. Baya bir gec oldu ama sonunda bitirebildim. Bu dökümani tahribat.com icin yazdim. Herkes diledigi gibi kullanabilir. Umarim ilgili arkadaslara faydasi olur. Saygilarimla.

     

    Dipnot ; Döküman Unbalanced adlı müride aittir. Kendisi benden paylaşmamı rica etti bende paylaştım. Detaylar hakkında bilgim yok.

    MhmdAlmz tarafından 20/Kas/18 14:07 tarihinde düzenlenmiştir

    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RimPalace
    RimPalace's avatar
    Banlanmış Üye
    Kayıt Tarihi: 23/Şubat/2016
    Erkek

    Ellerine sağlık Mert abinin.


    Cumhuriyet rejimi için en ufak rahatımı bile feda etmem.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 06/Nisan/2007
    Homo

    öncelikle eline sağlık hocam

    bir ay kadar xamarin ile uğraştım, sonrasında redditte insanlarla konuştum ve kullanılmayacak kadar sorunlu olduğuna karar verdim. bir çok insan da benim gibi düşünüyor sanırım.

    projeniz durduk yere çalışmaktan vazgeçebiliyor, araştırdığınızda bakıyosunuz insanlar bir şekilde çözüm bulmuş ama buldukları çözüm hem xamarini hem de android/ios her neyde sorun yaşıyorsanız onu oldukça iyi bilmeyi gerektiriyor. ufak tefek uygulamalar dışında ilerde büyümesini düşündüğünüz bir projeyi xamarinle yazmadan önce biraz daha arge yapmanızı öneririm. 

    yaşadığım sorunlar benim noobluğum olabilir tabi ama bu sorunları native yazarken yaşamıyorum

     


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek
    yolbulucu bunu yazdı

    öncelikle eline sağlık hocam

    bir ay kadar xamarin ile uğraştım, sonrasında redditte insanlarla konuştum ve kullanılmayacak kadar sorunlu olduğuna karar verdim. bir çok insan da benim gibi düşünüyor sanırım.

    projeniz durduk yere çalışmaktan vazgeçebiliyor, araştırdığınızda bakıyosunuz insanlar bir şekilde çözüm bulmuş ama buldukları çözüm hem xamarini hem de android/ios her neyde sorun yaşıyorsanız onu oldukça iyi bilmeyi gerektiriyor. ufak tefek uygulamalar dışında ilerde büyümesini düşündüğünüz bir projeyi xamarinle yazmadan önce biraz daha arge yapmanızı öneririm. 

    yaşadığım sorunlar benim noobluğum olabilir tabi ama bu sorunları native yazarken yaşamıyorum

     

    Hocam bir örnek verir misiniz merak ettim ?


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 06/Nisan/2007
    Homo
    MhmdAlmz bunu yazdı
    yolbulucu bunu yazdı

    öncelikle eline sağlık hocam

    bir ay kadar xamarin ile uğraştım, sonrasında redditte insanlarla konuştum ve kullanılmayacak kadar sorunlu olduğuna karar verdim. bir çok insan da benim gibi düşünüyor sanırım.

    projeniz durduk yere çalışmaktan vazgeçebiliyor, araştırdığınızda bakıyosunuz insanlar bir şekilde çözüm bulmuş ama buldukları çözüm hem xamarini hem de android/ios her neyde sorun yaşıyorsanız onu oldukça iyi bilmeyi gerektiriyor. ufak tefek uygulamalar dışında ilerde büyümesini düşündüğünüz bir projeyi xamarinle yazmadan önce biraz daha arge yapmanızı öneririm. 

    yaşadığım sorunlar benim noobluğum olabilir tabi ama bu sorunları native yazarken yaşamıyorum

     

    Hocam bir örnek verir misiniz merak ettim ?

    projenin durduk yere çalışmaması başıma çok geldi hocam, mesela bişey yapıyorum deniyorum çalışıyor. ertesi gün tekrar açıp çalıştırıyorum bir sürü abuk subuk hata veriyor. ilk başlarda nuget update yapınca düzeldi bunlar (şu konuda da bahsetmiştim : https://www.tahribat.com/forum/xamarin-visual-studio-ve-nuget-sorunu-235929 ). 

    bunun haricinde random reference errorlar çıkıyordu sürekli, "vs 2017 sorunlu, 2015 kur" dediler. tamam dedim kurdum bir şey değişmedi. arada bir kafasına göre kapatıp açınca falan bu reference errorlar gidiyodu ama bir süre sonra uygulama direkt crash olmaya başladı. telefonu emülatör olarak kullanıyordum, run dediğimde telefonda hiç açılmıyodu. hadi benim telefon sorunlu dedim pc deki android emülatörde aynısını yapmaya başladı. "kötü kod yazdım" diye yeni bi proje açıp kodları tek tek oraya taşıyıp denedim o proje gayet compile olup çalıştı emülatörde ve telefonda. bu olunca projenin içinde compile ettiği dosyaları silip denedim yine olmadı ben de sikerler deyip bıraktım.

    bu dediklerim bu yazın oldu (mayıs haziran falandı). son 7-8 ayda adamlar mucizevi şekilde bi ilerleme kaydetmediyse bence hala kullanılabilecek seviyede değildir.

    tabiki ben bu konuda otorite değilim, yaşadıklarımı anlatıyorum


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    @yolbulucu , Bende JAVA / Android yazıyorum. Bahsettiğin sorunların hiçbirini bu zamana kadar duymadım. bana da garip geldi...

     

    JAVA / Androidde bu bahsettiğin sorunların 15-20 katı var.

    @saybirs , i konuya davet ediyorum. Bu arkadaş yeni bir arkadaş ve artık komple Androidden soğumuş durumda. 

    Mobil programlamanın garezi bu , ben bir grandle compile ettiğimde sorunsuz çalışan kod. Proje bir seviyeye geldiğinde APK çıktısı alırken patlıyor çatlıyor yamuluyor . Ertesi gün açıyorum kodu render error veriyor. 

    Android 6 da çalışan kod 5 de çalışmıyor. Grandle versiyon değiştiriyorsun proje komple çöp. Multidex yapıyorsun bu seferde Android ProGuard patlıyor ağlıyor sızlıyor..

    O yüzden senin sorununun Xamarin ile değil de android ile alakalı olduğunu düşünüyorum.

    Tabi bu da sadece benim düşüncem.


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 06/Nisan/2007
    Homo
    MhmdAlmz bunu yazdı

    @yolbulucu , Bende JAVA / Android yazıyorum. Bahsettiğin sorunların hiçbirini bu zamana kadar duymadım. bana da garip geldi...

     

    JAVA / Androidde bu bahsettiğin sorunların 15-20 katı var.

    @saybirs , i konuya davet ediyorum. Bu arkadaş yeni bir arkadaş ve artık komple Androidden soğumuş durumda. 

    Mobil programlamanın garezi bu , ben bir grandle compile ettiğimde sorunsuz çalışan kod. Proje bir seviyeye geldiğinde APK çıktısı alırken patlıyor çatlıyor yamuluyor . Ertesi gün açıyorum kodu render error veriyor. 

    Android 6 da çalışan kod 5 de çalışmıyor. Grandle versiyon değiştiriyorsun proje komple çöp. Multidex yapıyorsun bu seferde Android ProGuard patlıyor ağlıyor sızlıyor..

    O yüzden senin sorununun Xamarin ile değil de android ile alakalı olduğunu düşünüyorum.

    Tabi bu da sadece benim düşüncem.

    android studio/java da yazarken ben de sorun yaşamadım

    ama dediğim gibi, androidi çok iyi bilsem her sorunda "yaa şurdandır, şunu yapıyorum şu oluyodur" diye düşünür çözerim bi şekilde. ama zaten xamarin öğrenme amacım android öğrenmekten yırtmaktı böyle olunca bir anlamı kalmıyor benim için.

     


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek

    Flutter cok guzel gelsenize... :)


    There are 10 types of people in the world. Those who knows binary and those who dont...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nickalti
    Lightsaber
    Lightsaber's avatar
    Kayıt Tarihi: 29/Ağustos/2012
    Erkek

    başlık kafamı karıştırdı. dökümanı unbalanced mı yazdı? eğer o yazdıysa niye sen paylaştın kendi niye paylaşmadı? başka yerde yazdı da sen mi oradan alıntıladın?


    İnsan; insan olsaydı,insan olmazdı..
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RimPalace
    RimPalace's avatar
    Banlanmış Üye
    Kayıt Tarihi: 23/Şubat/2016
    Erkek
    Lightsaber bunu yazdı

    başlık kafamı karıştırdı. dökümanı unbalanced mı yazdı? eğer o yazdıysa niye sen paylaştın kendi niye paylaşmadı? başka yerde yazdı da sen mi oradan alıntıladın?

    unbalanced yazmış, mhmdalmz paylaşmış

     

     


    Cumhuriyet rejimi için en ufak rahatımı bile feda etmem.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Atlas
    Atlas's avatar
    Kayıt Tarihi: 14/Ağustos/2012
    Erkek

    Böyle değerli bir insanın forumdan uzaklaşması ne kadar kötü çok faydalı bilgiler veriyordu


    -
Toplam Hit: 8341 Toplam Mesaj: 28
xamarin unbalanced xamarinnedir