{"id":35709,"date":"2025-12-03T01:31:29","date_gmt":"2025-12-02T22:31:29","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/"},"modified":"2025-12-03T01:31:29","modified_gmt":"2025-12-02T22:31:29","slug":"wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/","title":{"rendered":"WSL2&#8217;de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme"},"content":{"rendered":"<p><body><\/p>\n<p>Android Studio&#8217;nun a\u011f\u0131r y\u00fck\u00fc veya Expo&#8217;nun EAS Build kredileri olmadan, WSL2 \u00fczerinde verimli bir Expo build ortam\u0131 kurarak mobil uygulama geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131n. Bu ad\u0131m ad\u0131m rehber, ba\u015flang\u0131\u00e7tan ileri seviye konfig\u00fcrasyonlara kadar her \u015feyi kaps\u0131yor ve s\u0131f\u0131rdan ba\u011f\u0131ms\u0131z uygulama derleme yetene\u011finizi in\u015fa etmenizi sa\u011fl\u0131yor.<\/p>\n<p>Mobil uygulama geli\u015ftirme s\u00fcreci, \u00f6zellikle yerel derlemeler (native builds) s\u00f6z konusu oldu\u011funda, genellikle karma\u015f\u0131k ve kaynak yo\u011fun bir g\u00f6rev olabilir. Bir mobil uygulamay\u0131 yay\u0131nlamaya haz\u0131r hale getirmek, yani bir .apk veya .aab (Android i\u00e7in) ya da .ipa (iOS i\u00e7in) dosyas\u0131 olu\u015fturmak, genellikle birden fazla ara\u00e7, SDK ve ortam de\u011fi\u015fkeninin do\u011fru bir \u015fekilde yap\u0131land\u0131r\u0131lmas\u0131n\u0131 gerektirir. Geleneksel olarak, bu s\u00fcre\u00e7 Windows kullan\u0131c\u0131lar\u0131 i\u00e7in Android Studio, macOS kullan\u0131c\u0131lar\u0131 i\u00e7in Xcode gibi a\u011f\u0131r IDE&#8217;lerin kurulumunu ve y\u00f6netimini gerektirir. Bu IDE&#8217;ler, disk alan\u0131nda ciddi yer kaplar, sistem kaynaklar\u0131n\u0131 t\u00fcketir ve \u00f6zellikle daha d\u00fc\u015f\u00fck \u00f6zellikli bilgisayarlarda geli\u015ftirme deneyimini yava\u015flatabilir.<\/p>\n<p>Bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in Expo gibi platformlar ortaya \u00e7\u0131km\u0131\u015ft\u0131r. Expo, React Native \u00fczerinde geli\u015ftirme yapmay\u0131 basitle\u015ftiren g\u00fc\u00e7l\u00fc bir ara\u00e7 tak\u0131m\u0131 sunar. Ba\u015flang\u0131\u00e7ta, geli\u015ftiricilerin uygulamalar\u0131n\u0131 bir &#8220;managed workflow&#8221; i\u00e7inde Expo Go uygulamas\u0131 arac\u0131l\u0131\u011f\u0131yla test etmelerine olanak tan\u0131r ve hatta Expo&#8217;nun bulut hizmetleri (EAS Build) \u00fczerinden ba\u011f\u0131ms\u0131z derlemeler yapmalar\u0131na imkan tan\u0131r. Ancak, bu bulut hizmetleri genellikle belirli bir kullan\u0131m limitinden sonra \u00f6deme gerektirir ve projeniz \u00fczerinde tam kontrol sahibi olmak istedi\u011finizde k\u0131s\u0131tlay\u0131c\u0131 olabilir. \u0130\u015fte tam bu noktada, Expo&#8217;nun &#8220;bare workflow&#8221; \u00f6zelli\u011fi ve Windows Subsystem for Linux 2 (WSL2) devreye giriyor.<\/p>\n<p>WSL2, Windows kullan\u0131c\u0131lar\u0131na tam te\u015fekk\u00fcll\u00fc bir Linux da\u011f\u0131t\u0131m\u0131n\u0131 Windows i\u00e7inde \u00e7al\u0131\u015ft\u0131rma yetene\u011fi sunarak, Linux tabanl\u0131 geli\u015ftirme ara\u00e7lar\u0131na sorunsuz eri\u015fim sa\u011flar. Bu, Android SDK&#8217;s\u0131n\u0131 ve di\u011fer gerekli ara\u00e7lar\u0131 Linux ortam\u0131nda kurarak, Windows&#8217;un kendi ortam\u0131ndaki potansiyel uyumluluk veya performans sorunlar\u0131ndan ka\u00e7\u0131nmak anlam\u0131na gelir. \u00dcstelik, a\u011f\u0131r bir IDE olan Android Studio&#8217;yu kurmak zorunda kalmadan, komut sat\u0131r\u0131 \u00fczerinden t\u00fcm derleme i\u015flemlerini ger\u00e7ekle\u015ftirebilirsiniz. Bu yakla\u015f\u0131m, sadece sistem kaynaklar\u0131n\u0131 serbest b\u0131rakmakla kalmaz, ayn\u0131 zamanda geli\u015ftirme ortam\u0131n\u0131z \u00fczerinde size daha fazla kontrol sa\u011flar ve maliyetleri \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcr\u00fcr.<\/p>\n<p>Bu makalede amac\u0131m\u0131z, tam da bu serbestli\u011fi ve verimlili\u011fi sa\u011flamak. Expo ile geli\u015ftirdi\u011finiz uygulamalar\u0131n\u0131z\u0131, herhangi bir Expo kredisi \u00f6demeden veya Android Studio&#8217;nun karma\u015f\u0131k kurulumlar\u0131yla u\u011fra\u015fmadan, WSL2 \u00fczerinde nas\u0131l ba\u011f\u0131ms\u0131z bir \u015fekilde derleyebilece\u011finizi ad\u0131m ad\u0131m g\u00f6sterece\u011fiz. Bu sayede, hem geli\u015ftirme maliyetlerinizi d\u00fc\u015f\u00fcrecek hem de derleme s\u00fcre\u00e7lerinizde tam kontrol sahibi olarak daha esnek bir \u00e7al\u0131\u015fma ortam\u0131na kavu\u015facaks\u0131n\u0131z. Geli\u015ftirme s\u00fcre\u00e7lerinizi optimize etmenin ve mobil uygulama projelerinizde tam ba\u011f\u0131ms\u0131zl\u0131k kazanman\u0131n zaman\u0131 geldi. Bu k\u0131lavuz ile, Windows&#8217;ta \u00e7al\u0131\u015f\u0131rken bile g\u00fc\u00e7l\u00fc ve \u00f6zg\u00fcr bir Linux tabanl\u0131 mobil geli\u015ftirme ortam\u0131na sahip olacaks\u0131n\u0131z.<\/p>\n<h2>Temel Kavramlar: Expo, WSL2 ve Ba\u011f\u0131ms\u0131z Derleme Nedir?<\/h2>\n<p>Mobil uygulama geli\u015ftirme d\u00fcnyas\u0131na ad\u0131m atarken veya mevcut bilginizi tazelerken, baz\u0131 temel kavramlar\u0131 netle\u015ftirmek kritik \u00f6neme sahiptir. Bu b\u00f6l\u00fcmde, rehberimizin temelini olu\u015fturan Expo, WSL2 ve ba\u011f\u0131ms\u0131z derleme (standalone build) terimlerini derinlemesine inceleyece\u011fiz, b\u00f6ylece neden bu yola \u00e7\u0131kt\u0131\u011f\u0131m\u0131z\u0131 ve bize ne gibi faydalar sa\u011flayaca\u011f\u0131n\u0131 tam olarak anlayabileceksiniz.<\/p>\n<h3>Expo Nedir ve Mobil Geli\u015ftirmedeki Rol\u00fc Nelerdir?<\/h3>\n<p>Expo, React Native ekosistemi \u00fczerine in\u015fa edilmi\u015f a\u00e7\u0131k kaynakl\u0131 bir \u00e7er\u00e7eve ve platformdur. Temel amac\u0131, mobil uygulama geli\u015ftirmeyi basitle\u015ftirmek ve h\u0131zland\u0131rmakt\u0131r. React Native ile s\u0131f\u0131rdan bir proje ba\u015flatmak, bir\u00e7ok yerel yap\u0131land\u0131rma (native configuration) gerektirebilirken, Expo bu s\u00fcreci soyutlayarak geli\u015ftiricilerin yaln\u0131zca JavaScript\/TypeScript koduna odaklanmas\u0131n\u0131 sa\u011flar. Expo, geli\u015ftirmeyi kolayla\u015ft\u0131ran bir\u00e7ok API (kamera, bildirimler, konum vb.) ve bile\u015fenle birlikte gelir. Ba\u015flang\u0131\u00e7ta, Expo &#8220;managed workflow&#8221; ad\u0131 verilen bir yakla\u015f\u0131mla geli\u015ftiricilere h\u0131zl\u0131 prototipleme ve test imkanlar\u0131 sunar. Bu workflow&#8217;da, uygulaman\u0131z\u0131 Expo Go mobil uygulamas\u0131 \u00fczerinden an\u0131nda test edebilir, de\u011fi\u015fiklikleri anl\u0131k olarak g\u00f6rebilirsiniz. Ancak, bu y\u00f6netilen ortam baz\u0131 k\u0131s\u0131tlamalara sahiptir ve projeniz \u00f6zel yerel mod\u00fcller gerektirdi\u011finde veya tamamen ba\u011f\u0131ms\u0131z bir derlemeye ihtiya\u00e7 duydu\u011funuzda, &#8220;bare workflow&#8221;a ge\u00e7meniz gerekebilir. Bu makalede tam da bu ge\u00e7i\u015fi ve sonras\u0131 i\u00e7in yerel derleme yeteneklerini kazanmay\u0131 hedefliyoruz.<\/p>\n<h3>WSL2 (Windows Subsystem for Linux 2) Ne Anlama Geliyor?<\/h3>\n<p>WSL2, Microsoft&#8217;un Windows 10 ve 11 i\u015fletim sistemlerine entegre etti\u011fi devrim niteli\u011finde bir \u00f6zelliktir. Windows kullan\u0131c\u0131lar\u0131n\u0131n, Windows makinalar\u0131 \u00fczerinde tam te\u015fekk\u00fcll\u00fc bir Linux \u00e7ekirde\u011fini \u00e7al\u0131\u015ft\u0131rmas\u0131na olanak tan\u0131r. \u00d6nceki s\u00fcr\u00fcm olan WSL1&#8217;den farkl\u0131 olarak, WSL2 hafif bir sanal makine (VM) teknolojisi kullan\u0131r ve ger\u00e7ek bir Linux \u00e7ekirde\u011fi i\u00e7erir. Bu, Linux uygulamalar\u0131n\u0131n ve ara\u00e7lar\u0131n\u0131n Windows \u00fczerinde neredeyse yerel performansta \u00e7al\u0131\u015fabilece\u011fi anlam\u0131na gelir. \u00d6zellikle dosya sistemi performans\u0131 ve a\u011f ileti\u015fimi konular\u0131nda WSL1&#8217;e g\u00f6re \u00f6nemli iyile\u015ftirmeler sunar. Mobil uygulama geli\u015ftirme ba\u011flam\u0131nda, WSL2 bize Android SDK&#8217;s\u0131, Node.js, Java Development Kit (JDK) ve di\u011fer Linux tabanl\u0131 geli\u015ftirme ara\u00e7lar\u0131n\u0131 tamamen izole ve optimize edilmi\u015f bir ortamda kurma imkan\u0131 verir. B\u00f6ylece, Windows sisteminin potansiyel karma\u015f\u0131kl\u0131\u011f\u0131ndan ka\u00e7\u0131narak, kararl\u0131 ve g\u00fc\u00e7l\u00fc bir geli\u015ftirme ortam\u0131 olu\u015fturabiliriz.<\/p>\n<h3>Ba\u011f\u0131ms\u0131z Derleme (Standalone Build) Neden \u00d6nemli?<\/h3>\n<p>Ba\u011f\u0131ms\u0131z derleme, bir mobil uygulamay\u0131 da\u011f\u0131t\u0131m ma\u011fazalar\u0131na (Google Play Store veya Apple App Store) y\u00fcklemeye haz\u0131r hale getirme i\u015flemidir. Expo Go uygulamas\u0131 i\u00e7inde \u00e7al\u0131\u015fan geli\u015ftirme s\u00fcr\u00fcm\u00fcnden farkl\u0131 olarak, ba\u011f\u0131ms\u0131z derleme sonucunda ortaya \u00e7\u0131kan dosya (.apk, .aab veya .ipa), uygulaman\u0131n t\u00fcm yerel ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131, kaynaklar\u0131n\u0131 ve kodunu i\u00e7eren tek ba\u015f\u0131na \u00e7al\u0131\u015fabilen bir pakettir. Bu paket, son kullan\u0131c\u0131n\u0131n cihaz\u0131na kurulabilir ve Expo Go uygulamas\u0131n\u0131n kurulu olmas\u0131na ihtiya\u00e7 duymaz. Bu, uygulaman\u0131z\u0131n ger\u00e7ek d\u00fcnya performans\u0131, boyutu ve da\u011f\u0131t\u0131labilirli\u011fi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Ba\u011f\u0131ms\u0131z derleme s\u00fcreci, uygulaman\u0131n imzalanmas\u0131n\u0131 (signing), kodun optimize edilmesini ve s\u00fcr\u00fcm bilgilerinin do\u011fru bir \u015fekilde ayarlanmas\u0131n\u0131 i\u00e7erir. Geli\u015ftiriciler i\u00e7in bu, uygulamalar\u0131 \u00fczerinde tam kontrol sahibi olman\u0131n ve onlar\u0131 k\u00fcresel kitlelere ula\u015ft\u0131rman\u0131n tek yoludur. EAS Build gibi \u00fccretli hizmetlere ba\u011f\u0131ml\u0131 kalmadan bu s\u00fcreci kendi kontrol\u00fcn\u00fczde ger\u00e7ekle\u015ftirmek, uzun vadede hem maliyet a\u00e7\u0131s\u0131ndan hem de projenin esnekli\u011fi a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck avantajlar sa\u011flar.<\/p>\n<p>Bu temel kavramlar\u0131 anlad\u0131ktan sonra, bir sonraki ad\u0131mlar\u0131m\u0131zda WSL2 ortam\u0131m\u0131z\u0131 kurmaya ve Expo projemizi ba\u011f\u0131ms\u0131z derlemeler i\u00e7in haz\u0131rlamaya ba\u015flayabiliriz. Her bir kavram\u0131n, bir araya geldi\u011finde nas\u0131l g\u00fc\u00e7l\u00fc ve verimli bir mobil geli\u015ftirme ekosistemi olu\u015fturdu\u011funu g\u00f6receksiniz. Bu bilgiler \u0131\u015f\u0131\u011f\u0131nda, teknik kurulum ad\u0131mlar\u0131na ge\u00e7meye haz\u0131r\u0131z.<\/p>\n<h2>WSL2 \u00dczerinde Geli\u015ftirme Ortam\u0131 Nas\u0131l Kurulur?<\/h2>\n<p>\u015eimdi s\u0131ra geldi, mobil geli\u015ftirme yolculu\u011fumuzun ilk ve en temel ad\u0131m\u0131 olan WSL2 \u00fczerinde gerekli t\u00fcm ara\u00e7lar\u0131 kurmaya. Bu b\u00f6l\u00fcm, s\u0131f\u0131rdan bir Linux ortam\u0131 olu\u015fturarak Expo uygulamalar\u0131n\u0131z\u0131 ba\u011f\u0131ms\u0131z olarak derlemek i\u00e7in gereken t\u00fcm yaz\u0131l\u0131mlar\u0131 ve konfig\u00fcrasyonlar\u0131 ad\u0131m ad\u0131m ele alacak. Unutmay\u0131n, bu ad\u0131mlar\u0131 do\u011fru bir \u015fekilde takip etmek, gelecekteki olas\u0131 uyumluluk sorunlar\u0131n\u0131n \u00f6n\u00fcne ge\u00e7ecektir.<\/p>\n<h3>1. WSL2 Kurulumu ve Ubuntu Da\u011f\u0131t\u0131m\u0131<\/h3>\n<p>\u00d6ncelikle, bilgisayar\u0131n\u0131zda WSL2&#8217;nin etkinle\u015ftirildi\u011finden ve bir Linux da\u011f\u0131t\u0131m\u0131n\u0131n (tercihen Ubuntu) kurulu oldu\u011fundan emin olmal\u0131s\u0131n\u0131z. E\u011fer hen\u00fcz kurmad\u0131ysan\u0131z:<\/p>\n<ol>\n<li>Windows PowerShell&#8217;i y\u00f6netici olarak a\u00e7\u0131n.<\/li>\n<li>\u015eu komutu \u00e7al\u0131\u015ft\u0131r\u0131n:\n<pre><code class=\"language-bash\">wsl --install<\/pre>\n<p><\/code> Bu komut, WSL'yi etkinle\u015ftirecek ve varsay\u0131lan olarak Ubuntu'yu kuracakt\u0131r.<\/li>\n<li>E\u011fer zaten kuruluysa veya farkl\u0131 bir da\u011f\u0131t\u0131m kurmak isterseniz, <code>wsl --list --online<\/code> ile mevcut da\u011f\u0131t\u0131mlar\u0131 g\u00f6rebilir, <code>wsl --install -d <Da\u011f\u0131t\u0131mAd\u0131><\/code> ile kurabilirsiniz.<\/li>\n<li>Kurulum tamamland\u0131\u011f\u0131nda, Ubuntu otomatik olarak a\u00e7\u0131l\u0131r ve bir kullan\u0131c\u0131 ad\u0131 ile parola olu\u015fturman\u0131z istenir. Bu bilgileri not al\u0131n.<\/li>\n<li>WSL2'nin varsay\u0131lan s\u00fcr\u00fcm olarak ayarland\u0131\u011f\u0131ndan emin olmak i\u00e7in:\n<pre><code class=\"language-bash\">wsl --set-default-version 2<\/pre>\n<p><\/code><\/li>\n<li>Ubuntu'yu a\u00e7\u0131n ve ilk g\u00fcncelle\u015ftirmeleri yap\u0131n:\n<pre><code class=\"language-bash\">sudo apt update && sudo apt upgrade -y<\/pre>\n<p><\/code> Bu komutlar, sistemdeki paket listelerini g\u00fcnceller ve kurulu t\u00fcm paketleri en son s\u00fcr\u00fcmlerine y\u00fckseltir.<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar, Linux tabanl\u0131 geli\u015ftirme ortam\u0131m\u0131z\u0131n temelini olu\u015fturacakt\u0131r. Unutmay\u0131n, t\u00fcm geli\u015ftirme dosyalar\u0131n\u0131z\u0131 ve projelerinizi WSL2 i\u00e7inde, yani Linux dosya sisteminde (\u00f6rne\u011fin, <code>\/home\/kullan\u0131c\u0131ad\u0131n\u0131z\/projeler<\/code>) tutman\u0131z, performans a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Windows dosya sisteminden (\u00f6rne\u011fin, <code>\/mnt\/c\/Users\/kullan\u0131c\u0131ad\u0131n\u0131z\/projeler<\/code>) eri\u015fim, WSL2'nin sanalla\u015ft\u0131rma katman\u0131 nedeniyle performans\u0131 d\u00fc\u015f\u00fcrebilir.<\/p>\n<h3>2. Node.js ve Yarn Kurulumu<\/h3>\n<p>Expo ve React Native projeleri i\u00e7in Node.js ve bir paket y\u00f6neticisi (npm veya Yarn) olmazsa olmazd\u0131r. Biz daha h\u0131zl\u0131 ve kararl\u0131 oldu\u011fu i\u00e7in Yarn'\u0131 tercih edece\u011fiz.<\/p>\n<ol>\n<li>Node.js'i NVM (Node Version Manager) kullanarak kurmak en iyi y\u00f6ntemdir, \u00e7\u00fcnk\u00fc farkl\u0131 Node.js versiyonlar\u0131 aras\u0131nda ge\u00e7i\u015f yapma esnekli\u011fi sa\u011flar.\n<pre><code class=\"language-bash\">curl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.39.1\/install.sh | bash\nsource ~\/.bashrc # veya ~\/.zshrc e\u011fer zsh kullan\u0131yorsan\u0131z<\/pre>\n<p><\/code>\n    <\/li>\n<li>NVM'yi kurduktan sonra terminali kapat\u0131p tekrar a\u00e7\u0131n. Ard\u0131ndan Node.js'in en son LTS (Long Term Support) s\u00fcr\u00fcm\u00fcn\u00fc kurun:\n<pre><code class=\"language-bash\">nvm install --lts\nnvm use --lts\nnode -v && npm -v # Kurulumu do\u011frulay\u0131n<\/pre>\n<p><\/code>\n    <\/li>\n<li>\u015eimdi de Yarn'\u0131 kural\u0131m:\n<pre><code class=\"language-bash\">npm install -g yarn\nyarn -v # Kurulumu do\u011frulay\u0131n<\/pre>\n<p><\/code>\n    <\/li>\n<\/ol>\n<p>Bu ad\u0131mlar, Expo CLI ve di\u011fer JavaScript tabanl\u0131 ara\u00e7lar\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli olan Node.js ve Yarn ortam\u0131n\u0131 kurar. <code>nvm use --lts<\/code> komutu, her terminal oturumunda Node.js'in belirtilen s\u00fcr\u00fcm\u00fcn\u00fc kullanman\u0131z\u0131 sa\u011flar. Kal\u0131c\u0131 yapmak i\u00e7in <a href=\"https:\/\/github.com\/nvm-sh\/nvm#usage\">nvm belgelerine<\/a> bakabilirsiniz.<\/p>\n<h3>3. Java Development Kit (JDK) Kurulumu<\/h3>\n<p>Android uygulamalar\u0131n\u0131 derlemek i\u00e7in bir Java Development Kit (JDK) gereklidir. Android Gradle eklentisi genellikle OpenJDK'nin belirli bir s\u00fcr\u00fcm\u00fcn\u00fc tercih eder.<\/p>\n<pre><code class=\"language-bash\">sudo apt install openjdk-11-jdk -y # Genellikle Android 12 ve alt\u0131 i\u00e7in JDK 11 uygundur.\njava -version # Kurulumu do\u011frulay\u0131n<\/pre>\n<p><\/code><\/p>\n<p>Baz\u0131 durumlarda Android projeleri JDK 17 veya daha y\u00fcksek s\u00fcr\u00fcmler isteyebilir. Hata al\u0131rsan\u0131z, <code>openjdk-17-jdk<\/code> kurmay\u0131 deneyebilirsiniz. Birden fazla JDK s\u00fcr\u00fcm\u00fcn\u00fc y\u00f6netmek i\u00e7in <code>update-alternatives<\/code> kullanabilirsiniz, ancak bu makalenin kapsam\u0131n\u0131n d\u0131\u015f\u0131ndad\u0131r.<\/p>\n<h3>4. Android SDK Kurulumu (Komut Sat\u0131r\u0131 Ara\u00e7lar\u0131)<\/h3>\n<p>Android Studio kurmadan Android uygulamalar\u0131n\u0131 derlemek i\u00e7in sadece komut sat\u0131r\u0131 Android SDK ara\u00e7lar\u0131na ihtiyac\u0131m\u0131z var.<\/p>\n<ol>\n<li>Gerekli dizinleri olu\u015fturun:\n<pre><code class=\"language-bash\">mkdir -p ~\/.android\/sdk\ncd ~\/.android\/sdk<\/pre>\n<p><\/code>\n    <\/li>\n<li>Android SDK komut sat\u0131r\u0131 ara\u00e7lar\u0131n\u0131 indirin. En g\u00fcncel s\u00fcr\u00fcm\u00fc <a href=\"https:\/\/developer.android.com\/studio\/index.html#command-tools\">Android geli\u015ftirici web sitesinden<\/a> alabilirsiniz. \u00d6rne\u011fin, <code>commandlinetools-linux-*.zip<\/code> dosyas\u0131n\u0131 indirin. WSL2'ye indirmek i\u00e7in <code>wget<\/code> kullanabilirsiniz:\n<pre><code class=\"language-bash\">wget https:\/\/dl.google.com\/android\/repository\/commandlinetools-linux-9477386_latest.zip<\/pre>\n<p><\/code><\/p>\n<div class=\"uzman-ipucu\">\n        Uzman \u0130pucu: Her zaman en g\u00fcncel linki kullan\u0131n. Google'\u0131n web sitesini ziyaret ederek indirme linkini kopyalayabilirsiniz.\n      <\/div>\n<\/li>\n<li>\u0130ndirilen zip dosyas\u0131n\u0131 a\u00e7\u0131n:\n<pre><code class=\"language-bash\">unzip commandlinetools-linux-*.zip\nmv cmdline-tools latest<\/pre>\n<p><\/code><\/p>\n<p>Bu i\u015flem, <code>latest<\/code> adl\u0131 bir dizin olu\u015fturacak ve SDK ara\u00e7lar\u0131n\u0131 i\u00e7ine ta\u015f\u0131yacakt\u0131r. SDK yap\u0131s\u0131 \u015fu \u015fekilde olmal\u0131d\u0131r: <code>~\/.android\/sdk\/latest\/bin\/sdkmanager<\/code>.<\/p>\n<\/li>\n<li>Gerekli platform ara\u00e7lar\u0131n\u0131 ve derleme ara\u00e7lar\u0131n\u0131 indirin:\n<pre><code class=\"language-bash\">latest\/bin\/sdkmanager \"platform-tools\" \"platforms;android-33\" \"build-tools;33.0.0\"<\/pre>\n<p><\/code><\/p>\n<p><code>platforms;android-33<\/code> ve <code>build-tools;33.0.0<\/code> k\u0131sm\u0131n\u0131 projenizin gerektirdi\u011fi Android API seviyesine g\u00f6re ayarlayabilirsiniz. Genellikle en son stabil s\u00fcr\u00fcm \u00f6nerilir.<\/p>\n<\/li>\n<li>Android SDK lisanslar\u0131n\u0131 kabul edin:\n<pre><code class=\"language-bash\">latest\/bin\/sdkmanager --licenses<\/pre>\n<p><\/code><\/p>\n<p>Lisanslar\u0131 okuyun ve her biri i\u00e7in 'y' tu\u015funa basarak kabul edin.<\/p>\n<\/li>\n<\/ol>\n<h3>5. Ortam De\u011fi\u015fkenleri Ayarlar\u0131<\/h3>\n<p>Android SDK's\u0131n\u0131n do\u011fru \u00e7al\u0131\u015fmas\u0131 i\u00e7in ortam de\u011fi\u015fkenlerini ayarlamam\u0131z gerekiyor. Bu de\u011fi\u015fkenler genellikle <code>~\/.bashrc<\/code> veya <code>~\/.zshrc<\/code> dosyas\u0131na eklenir.<\/p>\n<pre><code class=\"language-bash\">echo 'export ANDROID_HOME=$HOME\/.android\/sdk' >> ~\/.bashrc\necho 'export PATH=$PATH:$ANDROID_HOME\/latest\/bin' >> ~\/.bashrc\necho 'export PATH=$PATH:$ANDROID_HOME\/platform-tools' >> ~\/.bashrc\necho 'export PATH=$PATH:$ANDROID_HOME\/build-tools\/33.0.0' >> ~\/.bashrc # Kendi build-tools versiyonunuzu kullan\u0131n\nsource ~\/.bashrc # De\u011fi\u015fiklikleri uygulamak i\u00e7in<\/pre>\n<p><\/code><\/p>\n<p>Bu ayarlar, sisteminizin <code>sdkmanager<\/code>, <code>adb<\/code> (Android Debug Bridge) ve <code>aapt<\/code> gibi \u00f6nemli komutlara do\u011frudan eri\u015fmesini sa\u011flayacakt\u0131r. Her terminal oturumunda bu de\u011fi\u015fkenlerin y\u00fcklendi\u011finden emin olmak i\u00e7in <code>source ~\/.bashrc<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z veya yeni bir terminal a\u00e7man\u0131z gerekebilir. <code>adb version<\/code> ve <code>java -version<\/code> gibi komutlarla kurulumunuzu do\u011frulayarak her \u015feyin yolunda gitti\u011finden emin olun. Bu karma\u015f\u0131k ancak kritik kurulum ad\u0131mlar\u0131n\u0131 tamamlad\u0131\u011f\u0131n\u0131zda, art\u0131k Expo projenizi ba\u011f\u0131ms\u0131z derlemeler i\u00e7in haz\u0131rlamaya haz\u0131rs\u0131n\u0131z.<\/p>\n<div class=\"uzman-ipucu\">\n    Mobil Uyumluluk Notu: Web sitelerinde mobil uyumlulu\u011fu sa\u011flamak i\u00e7in medya sorgular\u0131 kritik \u00f6neme sahiptir. CSS i\u00e7inde a\u015fa\u011f\u0131daki gibi bir yap\u0131 kullanarak farkl\u0131 ekran boyutlar\u0131na g\u00f6re stilleri ayarlayabilirsiniz. \u00d6rne\u011fin, k\u00fc\u00e7\u00fck ekranlar i\u00e7in yaz\u0131 boyutunu k\u00fc\u00e7\u00fcltmek:<\/p>\n<pre><code class=\"language-css\">@media screen and (max-width: 600px) {\n  body {\n    font-size: 14px;\n  }\n  .container {\n    padding: 10px;\n  }\n}<\/pre>\n<p><\/code><br \/>\n    Bu, mobil cihazlarda okunabilirli\u011fi ve kullan\u0131labilirli\u011fi art\u0131r\u0131r.\n  <\/div>\n<h2>Expo Projenizi Bare Workflow'a Ta\u015f\u0131ma ve Yap\u0131land\u0131rma Ad\u0131mlar\u0131 Nelerdir?<\/h2>\n<p>Expo'nun managed workflow'u, h\u0131zl\u0131 prototipleme ve geli\u015ftirme i\u00e7in harikad\u0131r, ancak ba\u011f\u0131ms\u0131z bir Android uygulamas\u0131n\u0131 derlemek veya projenize \u00f6zel yerel mod\u00fcller eklemek istedi\u011finizde s\u0131n\u0131rlar\u0131na ula\u015f\u0131r. \u0130\u015fte bu noktada, projenizi \"bare workflow\"a ge\u00e7irmeniz gerekir. Bu ge\u00e7i\u015f, uygulaman\u0131z\u0131n yerel (native) kod taban\u0131na eri\u015fim sa\u011flayarak size tam kontrol imkan\u0131 sunar. Bu b\u00f6l\u00fcmde, mevcut bir Expo projesini bare workflow'a nas\u0131l ta\u015f\u0131yaca\u011f\u0131m\u0131z\u0131 ve ba\u011f\u0131ms\u0131z derlemeler i\u00e7in temel yap\u0131land\u0131rmalar\u0131 nas\u0131l yapaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<h3>1. Yeni Bir Expo Projesi Olu\u015fturma veya Mevcut Projeyi Haz\u0131rlama<\/h3>\n<p>E\u011fer yeni bir proje ba\u015flat\u0131yorsan\u0131z, Expo CLI'yi kullanarak direkt olarak bo\u015f bir proje olu\u015fturabiliriz. <code>npx create-expo-app<\/code> komutu, <code>expo-cli<\/code>'yi ge\u00e7ici olarak indirir ve kullan\u0131r, bu da global kurulum yapma zorunlulu\u011funu ortadan kald\u0131r\u0131r:<\/p>\n<pre><code class=\"language-bash\">npx create-expo-app MyAwesomeApp --template blank --no-install\ncd MyAwesomeApp\nyarn install # Ba\u011f\u0131ml\u0131l\u0131klar\u0131 manuel olarak kurun<\/pre>\n<p><\/code><\/p>\n<p>Bu, <code>MyAwesomeApp<\/code> ad\u0131nda bo\u015f bir Expo projesi olu\u015fturur. <code>--no-install<\/code> parametresi, ba\u011f\u0131ml\u0131l\u0131klar\u0131n otomatik olarak kurulmas\u0131n\u0131 engeller, b\u00f6ylece biz <code>yarn install<\/code> ile kontrol\u00fc elimize al\u0131r\u0131z. E\u011fer mevcut bir projeniz varsa, do\u011frudan projenizin k\u00f6k dizinine ge\u00e7ebilirsiniz. Mevcut projenizin t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n g\u00fcncel oldu\u011fundan emin olun.<\/p>\n<h3>2. Projeyi Bare Workflow'a Ta\u015f\u0131ma: <code>expo prebuild<\/code> Komutu<\/h3>\n<p>Bare workflow'a ge\u00e7i\u015fin kalbi, <code>expo prebuild<\/code> komutudur. Bu komut, Expo'nun y\u00f6netilen ortam\u0131ndan s\u0131yr\u0131larak projenize yerel <code>android<\/code> ve <code>ios<\/code> dizinlerini ekler:<\/p>\n<pre><code class=\"language-bash\">expo prebuild --platform android # Veya sadece 'expo prebuild' her ikisini de olu\u015fturur<\/pre>\n<p><\/code><\/p>\n<p>Bu komut \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, Expo CLI projenizi inceler, <code>app.json<\/code> dosyas\u0131ndaki yap\u0131land\u0131rmalara g\u00f6re gerekli yerel kodlar\u0131 (AndroidManifest.xml, build.gradle vb.) olu\u015fturur ve bunlar\u0131 <code>android<\/code> (ve\/veya <code>ios<\/code>) dizinlerine yerle\u015ftirir. Bu dizinler, art\u0131k Android Studio veya Xcode gibi yerel geli\u015ftirme ara\u00e7lar\u0131yla do\u011frudan a\u00e7\u0131labilir ve \u00fczerinde \u00e7al\u0131\u015f\u0131labilir. <code>expo prebuild<\/code> komutunun ne yapt\u0131\u011f\u0131na dair detaylar \u015funlard\u0131r:<\/p>\n<ul>\n<li><code>android\/<\/code> dizinini olu\u015fturur: Bu dizin, Android projenizin t\u00fcm yerel Gradle yap\u0131land\u0131rmas\u0131n\u0131, kaynak dosyalar\u0131n\u0131 ve kodunu i\u00e7erir.<\/li>\n<li><code>ios\/<\/code> dizinini olu\u015fturur (e\u011fer <code>--platform ios<\/code> belirtilmi\u015fse): Bu dizin, iOS projenizin t\u00fcm Xcode yap\u0131land\u0131rmas\u0131n\u0131, Podfile'\u0131n\u0131 ve yerel kodunu i\u00e7erir.<\/li>\n<li><code>app.json<\/code> dosyas\u0131ndaki baz\u0131 ayarlar\u0131 yerel dosyalara \u00e7evirir: \u00d6rne\u011fin, uygulaman\u0131n paket ad\u0131 (<code>android.package<\/code>), versiyon kodu (<code>android.versionCode<\/code>) gibi ayarlar <code>AndroidManifest.xml<\/code> ve <code>build.gradle<\/code> dosyalar\u0131na yans\u0131t\u0131l\u0131r.<\/li>\n<li><code>react-native-unimodules<\/code> gibi Expo'nun kendi yerel mod\u00fcllerini entegre eder: Bu, \u00f6nceden kulland\u0131\u011f\u0131n\u0131z Expo API'lerinin (kamera, bildirimler vb.) yerel ortamda da \u00e7al\u0131\u015fmaya devam etmesini sa\u011flar.<\/li>\n<\/ul>\n<p>Bu i\u015flem, projenizin art\u0131k bir React Native CLI projesi gibi davranmas\u0131n\u0131 sa\u011flar, ancak yine de bir\u00e7ok Expo k\u00fct\u00fcphanesi ve arac\u0131yla uyumlulu\u011funu korur. Bu, Expo'nun en b\u00fcy\u00fck avantajlar\u0131ndan biridir: \u0130htiya\u00e7 duydu\u011funuzda yerel kontrole ge\u00e7ebilirken, Expo'nun sundu\u011fu kolayl\u0131klardan tamamen vazge\u00e7mek zorunda kalmazs\u0131n\u0131z.<\/p>\n<h3>3. <code>app.json<\/code> ve <code>package.json<\/code> Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Bare workflow'a ge\u00e7i\u015f yapt\u0131ktan sonra, <code>app.json<\/code> ve <code>package.json<\/code> dosyalar\u0131n\u0131zda baz\u0131 ayarlar\u0131 g\u00f6zden ge\u00e7irmek ve gerekirse g\u00fcncellemek \u00f6nemlidir.<\/p>\n<h4><code>app.json<\/code> G\u00fcncellemeleri:<\/h4>\n<p>Ba\u011f\u0131ms\u0131z derlemeler i\u00e7in en kritik ayarlar <code>app.json<\/code> i\u00e7inde yer al\u0131r:<\/p>\n<pre><code class=\"language-json\">{\n  \"expo\": {\n    \"name\": \"My Awesome App\",\n    \"slug\": \"my-awesome-app\",\n    \"version\": \"1.0.0\",\n    \"orientation\": \"portrait\",\n    \"icon\": \".\/assets\/icon.png\",\n    \"userInterfaceStyle\": \"light\",\n    \"splash\": {\n      \"image\": \".\/assets\/splash.png\",\n      \"resizeMode\": \"contain\",\n      \"backgroundColor\": \"#ffffff\"\n    },\n    \"assetBundlePatterns\": [\n      \"**\/*\"\n    ],\n    \"ios\": {\n      \"supportsTablet\": true,\n      \"bundleIdentifier\": \"com.yourcompany.myawesomeapp\"\n    },\n    \"android\": {\n      \"adaptiveIcon\": {\n        \"foregroundImage\": \".\/assets\/adaptive-icon.png\",\n        \"backgroundColor\": \"#ffffff\"\n      },\n      \"package\": \"com.yourcompany.myawesomeapp\",\n      \"versionCode\": 1,\n      \"permissions\": [\n        \"CAMERA\",\n        \"ACCESS_FINE_LOCATION\"\n      ]\n    },\n    \"web\": {\n      \"favicon\": \".\/assets\/favicon.png\"\n    },\n    \"plugins\": [\n      \/\/ Burada \u00f6zel Expo config eklentileri yer alabilir\n    ]\n  }\n}<\/pre>\n<p><\/code><\/p>\n<ul>\n<li><code>android.package<\/code>: Bu, uygulaman\u0131z\u0131n benzersiz paket ad\u0131d\u0131r (Android'de uygulama kimli\u011fi). Genellikle ters alan ad\u0131 notasyonu kullan\u0131l\u0131r (\u00f6rn. <code>com.yourcompany.appname<\/code>). Google Play Store'da uygulaman\u0131z\u0131 tan\u0131mlayan kritik bir de\u011ferdir ve derlemeden \u00f6nce kesinlikle ayarlanmal\u0131d\u0131r.<\/li>\n<li><code>android.versionCode<\/code>: Uygulaman\u0131z\u0131n versiyon kodudur. Google Play Store'a her yeni s\u00fcr\u00fcm y\u00fckledi\u011finizde bu de\u011feri art\u0131rman\u0131z gerekir. Tam say\u0131 olmal\u0131d\u0131r.<\/li>\n<li><code>android.permissions<\/code>: Uygulaman\u0131z\u0131n ihtiya\u00e7 duydu\u011fu Android izinlerini listeler. E\u011fer daha \u00f6nce Expo'nun managed workflow'unda otomatik olarak eklenen izinleriniz varsa, bu k\u0131s\u0131mda belirtmeniz gerekebilir.<\/li>\n<li><code>ios.bundleIdentifier<\/code>: iOS i\u00e7in uygulaman\u0131z\u0131n benzersiz kimli\u011fidir. Apple App Store'a y\u00fckleme yaparken gereklidir.<\/li>\n<\/ul>\n<h4><code>package.json<\/code> G\u00fcncellemeleri:<\/h4>\n<p><code>package.json<\/code> dosyas\u0131nda, \u00f6zellikle <code>scripts<\/code> b\u00f6l\u00fcm\u00fcne baz\u0131 yerel derleme komutlar\u0131n\u0131 eklemek faydal\u0131 olabilir. Bu, derleme s\u00fcrecini otomatikle\u015ftirmek ve standartla\u015ft\u0131rmak i\u00e7in iyi bir uygulamad\u0131r:<\/p>\n<pre><code class=\"language-json\">{\n  \"name\": \"MyAwesomeApp\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"expo start\",\n    \"android\": \"expo run:android\",\n    \"ios\": \"expo run:ios\",\n    \"web\": \"expo start --web\",\n    \"build:android\": \"cd android && .\/gradlew assembleRelease\",\n    \"bundle:android\": \"cd android && .\/gradlew bundleRelease\"\n  },\n  \"dependencies\": {\n    \/\/ ...\n  },\n  \"devDependencies\": {\n    \/\/ ...\n  }\n}<\/pre>\n<p><\/code><\/p>\n<p><code>expo run:android<\/code> ve <code>expo run:ios<\/code> komutlar\u0131, Expo CLI'n\u0131n projenizi yerel derleme ara\u00e7lar\u0131yla (Android Studio\/Xcode) derleyip bir cihaza veya em\u00fclat\u00f6re y\u00fcklemesini sa\u011flar. <code>build:android<\/code> ve <code>bundle:android<\/code> ise do\u011frudan Gradle komutlar\u0131n\u0131 kullanarak ba\u011f\u0131ms\u0131z derlemeler yapman\u0131z\u0131 sa\u011flar. Bu komutlar, bir sonraki b\u00f6l\u00fcmde daha detayl\u0131 ele al\u0131nacak.<\/p>\n<p>Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, projeniz art\u0131k tamamen bare workflow'a ge\u00e7mi\u015f ve yerel Android derleme s\u00fcrecine haz\u0131rd\u0131r. Bu ge\u00e7i\u015f, uygulaman\u0131z \u00fczerinde derinlemesine kontrol sahibi olman\u0131z\u0131 ve \u00f6zel ihtiya\u00e7lar\u0131n\u0131za g\u00f6re yap\u0131land\u0131rma yapman\u0131z\u0131 sa\u011flar, b\u00f6ylece herhangi bir k\u0131s\u0131tlama olmadan mobil uygulama geli\u015ftirme potansiyelinizi sonuna kadar kullanabilirsiniz.<\/p>\n<h2>Yerel Android Uygulama Derleme S\u00fcreci: WSL2'den <code>.apk<\/code> ve <code>.aab<\/code> Olu\u015fturma<\/h2>\n<p>Bare workflow'a ge\u00e7i\u015fin ard\u0131ndan, art\u0131k uygulamam\u0131z\u0131 WSL2 ortam\u0131m\u0131zda ba\u011f\u0131ms\u0131z bir Android paketi olarak derlemeye haz\u0131r\u0131z. Bu, Google Play Store'a y\u00fcklenecek bir <code>.apk<\/code> (Android Package Kit) veya tercih edilen <code>.aab<\/code> (Android App Bundle) dosyas\u0131 olu\u015fturmak anlam\u0131na gelir. Bu s\u00fcre\u00e7, uygulaman\u0131z\u0131 imzalamay\u0131 (signing) ve Gradle ad\u0131 verilen bir derleme otomasyon arac\u0131n\u0131 kullanmay\u0131 i\u00e7erir. Bu b\u00f6l\u00fcmde, t\u00fcm ad\u0131mlar\u0131 detayl\u0131 bir \u015fekilde ele alarak, hatas\u0131z bir \u015fekilde ba\u011f\u0131ms\u0131z derlemelerinizi nas\u0131l ger\u00e7ekle\u015ftirebilece\u011finizi g\u00f6sterece\u011fiz.<\/p>\n<h3>1. Gradle ve Proje Yap\u0131s\u0131<\/h3>\n<p>Gradle, Android projelerinin derlenmesi, paketlenmesi ve test edilmesi gibi g\u00f6revleri otomatikle\u015ftiren g\u00fc\u00e7l\u00fc bir derleme sistemidir. Bare workflow'a ge\u00e7ti\u011finizde, <code>expo prebuild<\/code> komutu projenizin <code>android<\/code> dizini i\u00e7ine t\u00fcm gerekli Gradle dosyalar\u0131n\u0131 otomatik olarak olu\u015fturmu\u015ftur. Bu dizinde, uygulaman\u0131z\u0131n yerel Android projesi yer al\u0131r ve t\u00fcm derleme i\u015flemleri bu dizin i\u00e7inde y\u00fcr\u00fct\u00fcl\u00fcr.<\/p>\n<pre><code class=\"language-bash\">cd android<\/pre>\n<p><\/code><\/p>\n<p>Art\u0131k t\u00fcm Gradle komutlar\u0131n\u0131 bu dizin i\u00e7inden \u00e7al\u0131\u015ft\u0131raca\u011f\u0131z. \u0130lk olarak, Gradle sarmalay\u0131c\u0131s\u0131n\u0131n (<code>gradlew<\/code>) \u00e7al\u0131\u015ft\u0131r\u0131labilir oldu\u011fundan emin olal\u0131m:<\/p>\n<pre><code class=\"language-bash\">chmod +x gradlew<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Gradle sarmalay\u0131c\u0131 beti\u011fine \u00e7al\u0131\u015ft\u0131rma izni verir. Aksi takdirde, \"Permission denied\" hatalar\u0131 alabilirsiniz. Gradle sarmalay\u0131c\u0131s\u0131, Gradle'\u0131n do\u011fru s\u00fcr\u00fcm\u00fcn\u00fcn projeniz i\u00e7in indirilip kullan\u0131lmas\u0131n\u0131 sa\u011flar, b\u00f6ylece Gradle'\u0131 manuel olarak kurman\u0131z gerekmez.<\/p>\n<h3>2. Keystore Olu\u015fturma ve Uygulama \u0130mzalama (Signing)<\/h3>\n<p>Google Play Store'a bir Android uygulamas\u0131 y\u00fcklemek i\u00e7in uygulaman\u0131z\u0131n bir dijital sertifika ile imzalanmas\u0131 gerekir. Bu sertifika, bir keystore dosyas\u0131 i\u00e7inde saklan\u0131r ve uygulaman\u0131z\u0131n kimli\u011fini do\u011frular. Bu ad\u0131m\u0131 sadece bir kez yapman\u0131z yeterlidir, ancak keystore dosyan\u0131z\u0131 ve parolan\u0131z\u0131 kesinlikle kaybetmemelisiniz, aksi takdirde uygulaman\u0131z\u0131n g\u00fcncellemelerini yay\u0131nlayamazs\u0131n\u0131z!<\/p>\n<ol>\n<li>Keystore dosyas\u0131n\u0131 olu\u015fturun:\n<pre><code class=\"language-bash\">keytool -genkeypair -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000<\/pre>\n<p><\/code><\/p>\n<p>Bu komut \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, sizden bir dizi bilgi girmeniz istenecektir:<\/p>\n<ul>\n<li><code>Keystore parolas\u0131<\/code>: Keystore dosyas\u0131n\u0131 koruyan parola.<\/li>\n<li><code>Anahtar parolas\u0131<\/code>: Olu\u015fturdu\u011funuz anahtar\u0131 koruyan parola.<\/li>\n<li>Ad\u0131n\u0131z ve Soyad\u0131n\u0131z.<\/li>\n<li>Kurulu\u015funuzun ad\u0131, \u015fehri, eyaleti\/ili ve \u00fclke kodu.<\/li>\n<\/ul>\n<p>T\u00fcm bu bilgileri dikkatlice doldurun ve not al\u0131n. <code>my-upload-key.keystore<\/code> dosyas\u0131n\u0131n projenizin <code>android\/app<\/code> dizinine yerle\u015ftirilmesi yayg\u0131n bir uygulamad\u0131r.<\/p>\n<\/li>\n<li><code>android\/gradle.properties<\/code> dosyas\u0131n\u0131 d\u00fczenleyin:\n<p>Bu dosya, Gradle derleme s\u00fcre\u00e7leri i\u00e7in \u00f6zel de\u011fi\u015fkenler tan\u0131mlaman\u0131z\u0131 sa\u011flar. Keystore bilgilerimizi buraya ekleyece\u011fiz. E\u011fer dosya yoksa, olu\u015fturun.<\/p>\n<pre><code class=\"language-properties\"># Keystore bilgileri\nMYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore\nMYAPP_UPLOAD_KEY_ALIAS=my-key-alias\nMYAPP_UPLOAD_STORE_PASSWORD=your_keystore_password\nMYAPP_UPLOAD_KEY_PASSWORD=your_key_password<\/pre>\n<p><\/code><\/p>\n<div class=\"uzman-ipucu\">\n        G\u00fcvenlik Notu: Parolalar\u0131n\u0131z\u0131 bu dosyada a\u00e7\u0131k metin olarak tutmak, g\u00fcvenlik a\u00e7\u0131s\u0131ndan ideal de\u011fildir. CI\/CD ortamlar\u0131nda genellikle ortam de\u011fi\u015fkenleri veya g\u00fcvenli kasa \u00e7\u00f6z\u00fcmleri kullan\u0131l\u0131r. Ancak yerel geli\u015ftirme i\u00e7in bu y\u00f6ntem yayg\u0131n olarak kabul edilir.\n      <\/div>\n<\/li>\n<li><code>android\/app\/build.gradle<\/code> dosyas\u0131n\u0131 d\u00fczenleyin:\n<p>Bu dosyay\u0131 a\u00e7\u0131n ve <code>android { ... }<\/code> blo\u011funun i\u00e7ine signing config'inizi ve build tiplerinizi ekleyin. Mevcut <code>signingConfigs<\/code> blo\u011funu bulup a\u015fa\u011f\u0131daki gibi g\u00fcncelleyebilirsiniz, yoksa ekleyebilirsiniz:<\/p>\n<pre><code class=\"language-gradle\">android {\n    ...\n    defaultConfig {\n        ...\n    }\n    signingConfigs {\n        release {\n            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {\n                storeFile file(MYAPP_UPLOAD_STORE_FILE)\n                storePassword MYAPP_UPLOAD_STORE_PASSWORD\n                keyAlias MYAPP_UPLOAD_KEY_ALIAS\n                keyPassword MYAPP_UPLOAD_KEY_PASSWORD\n            }\n        }\n    }\n    buildTypes {\n        release {\n            \/\/ minify (k\u00fc\u00e7\u00fcltme) ve obfuscation (karartma) ayarlar\u0131n\u0131 genellikle burada yapars\u0131n\u0131z.\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n            signingConfig signingConfigs.release \/\/ Release build'lerde imzalamay\u0131 etkinle\u015ftir\n        }\n    }\n    ...\n}<\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rma, <code>release<\/code> build tipinin olu\u015fturdu\u011funuz keystore ile imzalanmas\u0131n\u0131 sa\u011flar. <code>enableProguardInReleaseBuilds<\/code> ve <code>proguardFiles<\/code> sat\u0131rlar\u0131, uygulama boyutunu k\u00fc\u00e7\u00fcltmek ve kodunuzu karartmak i\u00e7in ProGuard veya R8'i etkinle\u015ftirir. Bu, yay\u0131nlanacak uygulamalar i\u00e7in \u015fiddetle tavsiye edilir.<\/p>\n<\/li>\n<\/ol>\n<h3>3. Uygulamay\u0131 Derleme: <code>.apk<\/code> ve <code>.aab<\/code> Olu\u015fturma<\/h3>\n<p>T\u00fcm yap\u0131land\u0131rmalar\u0131 tamamlad\u0131\u011f\u0131m\u0131za g\u00f6re, art\u0131k uygulamam\u0131z\u0131 derleyebiliriz. Tekrar projenizin <code>android<\/code> dizininde oldu\u011funuzdan emin olun.<\/p>\n<ol>\n<li>Yay\u0131nlanacak bir <code>.apk<\/code> dosyas\u0131 olu\u015fturmak i\u00e7in:\n<pre><code class=\"language-bash\">.\/gradlew assembleRelease<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, projenizi derleyecek ve imzalanm\u0131\u015f bir <code>.apk<\/code> dosyas\u0131 olu\u015fturacakt\u0131r. \u00c7\u0131kt\u0131, genellikle <code>android\/app\/build\/outputs\/apk\/release\/app-release.apk<\/code> yolunda bulunur.<\/p>\n<\/li>\n<li>Google Play Store i\u00e7in tercih edilen <code>.aab<\/code> (Android App Bundle) dosyas\u0131n\u0131 olu\u015fturmak i\u00e7in:\n<pre><code class=\"language-bash\">.\/gradlew bundleRelease<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, projenizi derleyecek ve imzalanm\u0131\u015f bir <code>.aab<\/code> dosyas\u0131 olu\u015fturacakt\u0131r. Bu dosya, Google Play Console'a y\u00fcklemek i\u00e7in idealdir ve Google'\u0131n uygulama boyutunu optimize etmesine olanak tan\u0131r. \u00c7\u0131kt\u0131, genellikle <code>android\/app\/build\/outputs\/bundle\/release\/app-release.aab<\/code> yolunda bulunur.<\/p>\n<\/li>\n<\/ol>\n<h4>Ger\u00e7ek D\u00fcnya Senaryosu: \u0130lk Derleme ve Hata Ay\u0131klama<\/h4>\n<p>\u0130lk derlemenizi yaparken, ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131, JDK path hatalar\u0131 veya Gradle versiyon uyumsuzluklar\u0131 gibi \u00e7e\u015fitli hatalarla kar\u015f\u0131la\u015fman\u0131z olduk\u00e7a olas\u0131d\u0131r. \u00d6rne\u011fin, \"Could not find method 'X' on object of type 'Y'\" gibi bir hata al\u0131rsan\u0131z, bu genellikle Gradle veya eklenti versiyonlar\u0131n\u0131n projenizle uyumsuz oldu\u011fu anlam\u0131na gelir. Veya \"JDK Home is not set\" gibi bir hata al\u0131rsan\u0131z, ortam de\u011fi\u015fkenlerinizi kontrol etmeniz gerekir.<\/p>\n<ul>\n<li>\n<p><strong>Ba\u011f\u0131ml\u0131l\u0131k Sorunlar\u0131:<\/strong> E\u011fer <code>sync failed<\/code> gibi bir hata al\u0131rsan\u0131z, <code>android\/build.gradle<\/code> ve <code>android\/app\/build.gradle<\/code> dosyalar\u0131ndaki Gradle eklenti (<code>classpath<\/code>) ve SDK versiyonlar\u0131n\u0131 (<code>compileSdkVersion<\/code>, <code>targetSdkVersion<\/code>, <code>minSdkVersion<\/code>) kontrol edin. Bazen <code>node_modules<\/code> dizinini silip <code>yarn install<\/code> ve ard\u0131ndan <code>expo prebuild --clean<\/code> komutunu \u00e7al\u0131\u015ft\u0131rmak sorunlar\u0131 \u00e7\u00f6zebilir.<\/p>\n<\/li>\n<li>\n<p><strong>JDK Path Hatalar\u0131:<\/strong> Ortam de\u011fi\u015fkenlerinizde <code>ANDROID_HOME<\/code> ve <code>JAVA_HOME<\/code>'un do\u011fru ayarland\u0131\u011f\u0131ndan emin olun. <code>echo $ANDROID_HOME<\/code> ve <code>echo $JAVA_HOME<\/code> komutlar\u0131yla kontrol edebilirsiniz.<\/p>\n<\/li>\n<li>\n<p><strong>Bellek Yetmezli\u011fi:<\/strong> B\u00fcy\u00fck projelerde Gradle, daha fazla bellek isteyebilir. <code>gradle.properties<\/code> dosyas\u0131na <code>org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m<\/code> gibi sat\u0131rlar ekleyerek Gradle'a daha fazla bellek tahsis edebilirsiniz.<\/p>\n<\/li>\n<\/ul>\n<p>Herhangi bir hatayla kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda, hata mesaj\u0131n\u0131 dikkatlice okuyun ve internette arama yap\u0131n. Stack Overflow ve GitHub issue sayfalar\u0131, bu t\u00fcr sorunlar i\u00e7in harika kaynaklard\u0131r. WSL2'nin getirdi\u011fi g\u00fc\u00e7l\u00fc Linux ortam\u0131 sayesinde, bu sorunlar\u0131 daha kolay te\u015fhis edebilir ve \u00e7\u00f6zebilirsiniz. Bu kapsaml\u0131 derleme s\u00fcreci, size uygulaman\u0131z \u00fczerinde tam kontrol sa\u011flayarak, \u00fc\u00e7\u00fcnc\u00fc taraf hizmetlere ba\u011f\u0131ml\u0131l\u0131k duymadan mobil projelerinizi ba\u015far\u0131l\u0131 bir \u015fekilde yay\u0131nlaman\u0131za olanak tan\u0131r.<\/p>\n<h2>Performans ve Optimizasyon \u0130pu\u00e7lar\u0131: WSL2 Ortam\u0131n\u0131z\u0131 H\u0131zland\u0131rmak<\/h2>\n<p>WSL2, Windows \u00fczerinde Linux'u \u00e7al\u0131\u015ft\u0131rmak i\u00e7in harika bir k\u00f6pr\u00fc olsa da, baz\u0131 performans k\u0131s\u0131tlamalar\u0131 veya potansiyel darbo\u011fazlar i\u00e7erebilir. \u00d6zellikle mobil uygulama geli\u015ftirme gibi kaynak yo\u011fun i\u015flemler yaparken, ortam\u0131n\u0131z\u0131 optimize etmek, derleme s\u00fcrelerini k\u0131saltmak ve genel geli\u015ftirme deneyiminizi iyile\u015ftirmek kritik \u00f6neme sahiptir. \u0130\u015fte WSL2 ortam\u0131n\u0131z\u0131 daha verimli hale getirmek i\u00e7in uygulayabilece\u011finiz baz\u0131 ipu\u00e7lar\u0131 ve p\u00fcf noktalar\u0131:<\/p>\n<h3>1. Dosya Sistemi Performans\u0131: Projelerinizi Do\u011fru Yerde Tutun<\/h3>\n<p>WSL2'nin en b\u00fcy\u00fck performans farklar\u0131ndan biri, dosya sistemi giri\u015f\/\u00e7\u0131k\u0131\u015f (I\/O) h\u0131z\u0131ndad\u0131r. Linux dosya sistemi (Ext4) ile Windows dosya sistemi (NTFS) aras\u0131nda ge\u00e7i\u015f yap\u0131ld\u0131\u011f\u0131nda performans d\u00fc\u015f\u00fc\u015fleri ya\u015fan\u0131r. Bu nedenle:<\/p>\n<ul>\n<li>\n<p><strong>Projelerinizi WSL2 \u0130\u00e7inde Tutun:<\/strong> React Native veya Expo projelerinizin kaynak kodunu her zaman WSL2 i\u00e7indeki Linux dosya sisteminde (\u00f6rne\u011fin, <code>\/home\/kullan\u0131c\u0131ad\u0131n\u0131z\/projeler<\/code>) saklay\u0131n. Windows taraf\u0131ndaki bir dizine (\u00f6rne\u011fin, <code>\/mnt\/c\/Users\/kullan\u0131c\u0131ad\u0131n\u0131z\/projeler<\/code>) eri\u015fmek, performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcrecektir.<\/p>\n<\/li>\n<li>\n<p><strong>\u0130\u015flemleri Linux \u0130\u00e7inde Yap\u0131n:<\/strong> <code>npm install<\/code>, <code>yarn install<\/code>, <code>gradlew build<\/code> gibi t\u00fcm derleme ve paket y\u00f6netimi i\u015flemlerini Linux terminali i\u00e7inde ger\u00e7ekle\u015ftirin. Bu, dosya sistemi I\/O'sunu en aza indirerek h\u0131z\u0131 art\u0131r\u0131r.<\/p>\n<\/li>\n<\/ul>\n<p>Bu, en basit ama en etkili optimizasyonlardan biridir. Projelerinizi Windows taraf\u0131nda tutman\u0131z durumunda, \u00f6zellikle <code>node_modules<\/code> dizininin b\u00fcy\u00fck olmas\u0131 nedeniyle <code>yarn install<\/code> veya <code>npm install<\/code> gibi i\u015flemlerin \u00e7ok yava\u015f \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 fark edeceksiniz. Do\u011fru dizinde \u00e7al\u0131\u015fmak, bu t\u00fcr gecikmeleri ortadan kald\u0131r\u0131r.<\/p>\n<h3>2. Bellek ve \u0130\u015flemci Tahsisi (.wslconfig)<\/h3>\n<p>Varsay\u0131lan olarak, WSL2, sisteminizdeki kaynaklar\u0131n bir k\u0131sm\u0131n\u0131 otomatik olarak kullan\u0131r. Ancak, \u00f6zellikle b\u00fcy\u00fck projelerde veya birden fazla WSL2 da\u011f\u0131t\u0131m\u0131 \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z, bu kaynaklar\u0131 manuel olarak yap\u0131land\u0131rarak performans\u0131 art\u0131rabilirsiniz. Bunu yapmak i\u00e7in, Windows kullan\u0131c\u0131 profil dizininizde (<code>C:\\Users\\Kullan\u0131c\u0131Ad\u0131n\u0131z\\<\/code>) bir <code>.wslconfig<\/code> dosyas\u0131 olu\u015fturun veya mevcut dosyay\u0131 d\u00fczenleyin:<\/p>\n<pre><code class=\"language-ini\"># .wslconfig dosyas\u0131 \u00f6rne\u011fi\n[wsl2]\nmemory=8GB  # WSL2 VM'ine ayr\u0131lacak maksimum bellek\nprocessors=4 # WSL2 VM'ine ayr\u0131lacak maksimum i\u015flemci \u00e7ekirde\u011fi say\u0131s\u0131\nswap=2GB # Sanal bellek alan\u0131\nlocalhostForwarding=true # Yerel a\u011f \u00fczerinden port iletimini etkinle\u015ftirir<\/pre>\n<p><\/code><\/p>\n<p>Bu ayarlar\u0131 kaydettikten sonra, WSL2'yi yeniden ba\u015flatman\u0131z gerekir:<\/p>\n<pre><code class=\"language-powershell\">wsl --shutdown<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan Ubuntu'yu yeniden ba\u015flatarak de\u011fi\u015fikliklerin etkinle\u015fti\u011fini g\u00f6rebilirsiniz. Bu, \u00f6zellikle Gradle derlemeleri gibi bellek ve i\u015flemci yo\u011fun i\u015flemler i\u00e7in b\u00fcy\u00fck fark yaratabilir. Bellek miktar\u0131n\u0131 sisteminizdeki toplam belle\u011fin yakla\u015f\u0131k %50-75'i civar\u0131nda tutmak iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.<\/p>\n<h3>3. Yarn Kullan\u0131m\u0131 ve Paket Y\u00f6neticisi Optimizasyonu<\/h3>\n<p>Node.js projelerinde <code>npm<\/code> yerine <code>yarn<\/code> kullanmak, genellikle daha h\u0131zl\u0131 ve daha kararl\u0131 bir ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi sa\u011flar. Yarn, paketleri paralel olarak indirir ve \u00f6nbelle\u011fe al\u0131r, bu da \u00f6zellikle tekrarlayan <code>yarn install<\/code> i\u015flemlerinde zaman kazand\u0131r\u0131r.<\/p>\n<ul>\n<li>\n<p><strong>Yarn'\u0131 Global Olarak Kurun:<\/strong> Daha \u00f6nce yapt\u0131\u011f\u0131m\u0131z gibi, <code>npm install -g yarn<\/code> ile Yarn'\u0131 global olarak kurun.<\/p>\n<\/li>\n<li>\n<p><strong><code>yarn.lock<\/code> Dosyas\u0131n\u0131 Kullan\u0131n:<\/strong> <code>yarn.lock<\/code> dosyas\u0131, t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131n kesin s\u00fcr\u00fcmlerini kilitler. Bu, farkl\u0131 geli\u015ftiriciler veya CI\/CD ortamlar\u0131 aras\u0131nda tutarl\u0131 derlemeler yapman\u0131z\u0131 sa\u011flar.<\/p>\n<\/li>\n<\/ul>\n<p>Ek olarak, paket \u00f6nbelle\u011fini d\u00fczenli olarak temizlemek de yard\u0131mc\u0131 olabilir:<\/p>\n<pre><code class=\"language-bash\">yarn cache clean<\/pre>\n<p><\/code><\/p>\n<h3>4. VS Code Remote Development Uzant\u0131s\u0131<\/h3>\n<p>WSL2'de geli\u015ftirme yaparken en iyi deneyimi elde etmek i\u00e7in Visual Studio Code'un \"Remote Development\" uzant\u0131 paketini kullanman\u0131z \u015fiddetle tavsiye edilir. Bu uzant\u0131, VS Code'u Windows taraf\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131rken, projenizi ve t\u00fcm geli\u015ftirme ara\u00e7lar\u0131n\u0131z\u0131 (terminal, uzant\u0131lar, Git vb.) WSL2 i\u00e7inde \u00e7al\u0131\u015ft\u0131r\u0131r. Bu sayede, Windows'un kullan\u0131c\u0131 aray\u00fcz\u00fc ve performans\u0131 ile Linux'un geli\u015ftirme g\u00fcc\u00fcn\u00fc bir araya getirmi\u015f olursunuz.<\/p>\n<ul>\n<li><strong>Kurulum:<\/strong> VS Code'u a\u00e7\u0131n, Uzant\u0131lar sekmesine gidin ve \"Remote Development\" paketini aray\u0131p kurun.<\/li>\n<li><strong>Kullan\u0131m:<\/strong> WSL2'de projenizin oldu\u011fu dizinde <code>code .<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n. VS Code otomatik olarak uzak WSL ortam\u0131na ba\u011flanacak ve projenizi a\u00e7acakt\u0131r.<\/li>\n<\/ul>\n<p>Bu, dosya sistemi I\/O sorunlar\u0131n\u0131 ortadan kald\u0131r\u0131r ve geli\u015ftirme i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 \u00e7ok daha ak\u0131c\u0131 hale getirir.<\/p>\n<h3>5. Di\u011fer Genel Optimizasyon \u0130pu\u00e7lar\u0131<\/h3>\n<ul>\n<li>\n<p><strong>SSD Kullan\u0131m\u0131:<\/strong> E\u011fer m\u00fcmk\u00fcnse, hem Windows i\u015fletim sisteminizin hem de WSL2 da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n kurulu oldu\u011fu disk biriminin bir SSD (Solid State Drive) oldu\u011fundan emin olun. Bu, genel sistem performans\u0131n\u0131 ve dolay\u0131s\u0131yla derleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<\/li>\n<li>\n<p><strong>Gereksiz Arka Plan S\u00fcre\u00e7lerini Kapatma:<\/strong> Windows'ta ve WSL2'de \u00e7al\u0131\u015fan gereksiz arka plan uygulamalar\u0131n\u0131 ve servislerini kapatmak, daha fazla sistem kayna\u011f\u0131n\u0131 geli\u015ftirme ortam\u0131n\u0131za ay\u0131rman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<\/li>\n<li>\n<p><strong>Git LFS Kullan\u0131m\u0131:<\/strong> E\u011fer projenizde b\u00fcy\u00fck dosyalar (\u00f6rne\u011fin, y\u00fcksek \u00e7\u00f6z\u00fcn\u00fcrl\u00fckl\u00fc resimler, videolar) varsa, Git Large File Storage (LFS) kullanmak Git depolar\u0131n\u0131z\u0131n boyutunu k\u00fc\u00e7\u00fclt\u00fcr ve clone\/pull i\u015flemlerini h\u0131zland\u0131r\u0131r.<\/p>\n<\/li>\n<li>\n<p><strong>Otomatik G\u00fcncelle\u015ftirmeleri Kapatma:<\/strong> Windows ve di\u011fer uygulamalar\u0131n otomatik g\u00fcncellemelerini, geli\u015ftirme s\u0131ras\u0131nda kaynak t\u00fcketimini \u00f6nlemek i\u00e7in ge\u00e7ici olarak kapatabilirsiniz.<\/p>\n<\/li>\n<\/ul>\n<p>Bu optimizasyon ipu\u00e7lar\u0131, WSL2 \u00fczerindeki Expo geli\u015ftirme ortam\u0131n\u0131z\u0131 daha h\u0131zl\u0131, daha kararl\u0131 ve genel olarak daha verimli hale getirmenize yard\u0131mc\u0131 olacakt\u0131r. Her bir ipucunu uygulayarak, mobil uygulama geli\u015ftirme s\u00fcrecinizde ciddi iyile\u015ftirmeler fark edeceksiniz. Unutmay\u0131n, iyi optimize edilmi\u015f bir ortam, geli\u015ftiricinin \u00fcretkenli\u011fini do\u011frudan etkiler ve daha keyifli bir deneyim sunar.<\/p>\n<h2>\u0130leri D\u00fczey Kullan\u0131m Senaryolar\u0131: CI\/CD ve Fastlane ile Otomasyon<\/h2>\n<p>Manuel derleme s\u00fcre\u00e7leri, k\u00fc\u00e7\u00fck projeler veya ba\u015flang\u0131\u00e7 a\u015famalar\u0131 i\u00e7in uygun olabilirken, daha b\u00fcy\u00fck ekiplerde veya s\u00fcrekli entegrasyon (CI\/CD) gerektiren projelerde zamanla verimsiz hale gelir. Uygulama derlemelerini, testlerini ve da\u011f\u0131t\u0131mlar\u0131n\u0131 otomatikle\u015ftirmek, geli\u015ftirme d\u00f6ng\u00fcs\u00fcn\u00fc h\u0131zland\u0131r\u0131r, hatalar\u0131 azalt\u0131r ve ekiplerin daha s\u0131k ve g\u00fcvenilir bir \u015fekilde yay\u0131n yapmas\u0131na olanak tan\u0131r. Bu b\u00f6l\u00fcmde, Fastlane gibi ara\u00e7lar\u0131 kullanarak Expo projeleriniz i\u00e7in derleme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini nas\u0131l otomatikle\u015ftirebilece\u011finizi ve CI\/CD entegrasyonu i\u00e7in temel yakla\u015f\u0131mlar\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>1. Fastlane Nedir ve Neden Kullan\u0131lmal\u0131d\u0131r?<\/h3>\n<p>Fastlane, iOS ve Android uygulamalar\u0131 i\u00e7in a\u00e7\u0131k kaynakl\u0131 bir CI\/CD arac\u0131d\u0131r. Geli\u015ftirme i\u015f ak\u0131\u015f\u0131n\u0131n neredeyse her a\u015famas\u0131n\u0131 otomatikle\u015ftirebilir: kod imzalama, ekran g\u00f6r\u00fcnt\u00fcleri alma, beta da\u011f\u0131t\u0131m\u0131, uygulama ma\u011fazas\u0131na y\u00fckleme ve daha fazlas\u0131. Fastlane, geli\u015ftiricilerin tekrarlayan, manuel g\u00f6revleri otomatikle\u015ftirmesine olanak tan\u0131yarak zamandan tasarruf etmelerini ve daha \u00f6nemli i\u015flere odaklanmalar\u0131n\u0131 sa\u011flar.<\/p>\n<p>Fastlane kullanman\u0131n ba\u015fl\u0131ca nedenleri:<\/p>\n<ul>\n<li>\n<p><strong>Hata Azaltma:<\/strong> Manuel derleme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri hata yapmaya a\u00e7\u0131kt\u0131r. Otomasyon, insan hatalar\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<\/li>\n<li>\n<p><strong>Tutarl\u0131l\u0131k:<\/strong> Her derleme ve da\u011f\u0131t\u0131m s\u00fcreci, Fastlane tan\u0131mlamalar\u0131 (Fastfile) taraf\u0131ndan belirlenen ayn\u0131 ad\u0131mlar\u0131 takip eder, bu da tutarl\u0131l\u0131k sa\u011flar.<\/p>\n<\/li>\n<li>\n<p><strong>H\u0131z:<\/strong> Otomatik s\u00fcre\u00e7ler, manuel i\u015flemlere g\u00f6re \u00e7ok daha h\u0131zl\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n<p><strong>Ekip \u00dcretkenli\u011fi:<\/strong> Geli\u015ftiriciler, derleme ve da\u011f\u0131t\u0131m gibi rutin g\u00f6revlerle u\u011fra\u015fmak yerine kod yazmaya odaklanabilirler.<\/p>\n<\/li>\n<\/ul>\n<h3>2. Fastlane Kurulumu ve Temel Yap\u0131land\u0131rma<\/h3>\n<p>Fastlane, Ruby ile yaz\u0131lm\u0131\u015ft\u0131r, bu y\u00fczden WSL2 ortam\u0131n\u0131zda Ruby'nin kurulu olmas\u0131 gerekir. E\u011fer yoksa, rbenv veya rvm gibi bir ara\u00e7la kurabilirsiniz.<\/p>\n<ol>\n<li>Ruby Kurulumu (\u00f6rne\u011fin rbenv ile):\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libc6-dev libffi-dev libgdbm-dev libncurses5-dev\ncurl -fsSL https:\/\/github.com\/rbenv\/rbenv-installer\/raw\/HEAD\/bin\/rbenv-installer | bash\necho 'export PATH=\"$HOME\/.rbenv\/bin:$PATH\"' >> ~\/.bashrc\necho 'eval \"$(rbenv init -)\"' >> ~\/.bashrc\nsource ~\/.bashrc\nrbenv install 3.1.2 # Stabil bir Ruby s\u00fcr\u00fcm\u00fc kurun\nrbenv global 3.1.2\nruby -v # Do\u011frulay\u0131n<\/pre>\n<p><\/code>\n    <\/li>\n<li>Fastlane Kurulumu:\n<p>Projenizin k\u00f6k dizininde Fastlane'i ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">gem install fastlane -NV\ncd android # Android projesi dizinine ge\u00e7in\nfastlane init<\/pre>\n<p><\/code><\/p>\n<p><code>fastlane init<\/code> komutu, size uygulaman\u0131z\u0131n paket ad\u0131n\u0131 soracak ve ard\u0131ndan <code>Fastfile<\/code>, <code>Appfile<\/code> gibi dosyalar\u0131 i\u00e7eren bir <code>fastlane<\/code> dizini olu\u015fturacakt\u0131r. Uygulama da\u011f\u0131t\u0131m\u0131n\u0131 (\u00f6rne\u011fin Google Play'e) otomatikle\u015ftirmek isteyip istemedi\u011finiz soruldu\u011funda, <code>2: Automate beta deployments to Google Play<\/code> se\u00e7ene\u011fini se\u00e7ebilirsiniz. Bu, gerekli Fastlane eylemlerini yap\u0131land\u0131r\u0131r ve Google Play hizmet kimlik bilgilerini ayarlaman\u0131z\u0131 isteyebilir (<code>.json<\/code> anahtar dosyas\u0131).<\/p>\n<\/li>\n<\/ol>\n<h3>3. Fastfile \u00d6rnekleri: Android Derleme ve Da\u011f\u0131t\u0131m<\/h3>\n<p><code>fastlane\/Fastfile<\/code> dosyas\u0131, uygulaman\u0131z\u0131n otomasyon ad\u0131mlar\u0131n\u0131 tan\u0131mlad\u0131\u011f\u0131n\u0131z yerdir. \u0130\u015fte basit bir Android derleme ve da\u011f\u0131t\u0131m i\u015flemi i\u00e7in bir \u00f6rnek:<\/p>\n<pre><code class=\"language-ruby\"># fastlane\/Fastfile\nplatform :android do\n  desc \"Releases a new beta version to Google Play\"\n  lane :beta do\n    gradle(task: \"clean assembleRelease\") # Uygulamay\u0131 derleyin\n    upload_to_play_store(\n      track: \"beta\", # \"internal\", \"alpha\", \"beta\", \"production\"\n      json_key: \"path\/to\/your\/google-play-key.json\", # Google Play hizmet anahtar\u0131\n      package_name: \"com.yourcompany.myawesomeapp\"\n    )\n  end\n\n  desc \"Builds and uploads an AAB to Google Play production\"\n  lane :deploy do |options|\n    increment_version_code(\n      gradle_file_path: \"..\/app\/build.gradle\", # app\/build.gradle dosyas\u0131n\u0131n yolu\n      # version_code: options[:version_code] # Opsiyonel: CLI'dan version code ge\u00e7mek i\u00e7in\n    )\n    gradle(task: \"clean bundleRelease\") # AAB dosyas\u0131n\u0131 derleyin\n    upload_to_play_store(\n      track: \"production\",\n      json_key: \"path\/to\/your\/google-play-key.json\",\n      package_name: \"com.yourcompany.myawesomeapp\"\n    )\n    # slack(message: \"Successfully deployed a new version to Google Play!\") # Opsiyonel: Slack bildirimi\n  end\nend<\/pre>\n<p><\/code><\/p>\n<p>Bu <code>Fastfile<\/code>'da iki \u015ferit (lane) tan\u0131mlanm\u0131\u015ft\u0131r: <code>beta<\/code> ve <code>deploy<\/code>. <code>beta<\/code> \u015feridi, uygulamay\u0131 derler ve beta kanal\u0131na y\u00fcklerken, <code>deploy<\/code> \u015feridi <code>versionCode<\/code>u art\u0131r\u0131r, bir <code>.aab<\/code> derler ve \u00fcretim kanal\u0131na y\u00fckler. <code>gradle<\/code> eylemi, daha \u00f6nce manuel olarak kulland\u0131\u011f\u0131m\u0131z Gradle komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r. <code>upload_to_play_store<\/code> eylemi ise uygulaman\u0131z\u0131 Google Play Console'a y\u00fckler. <code>json_key<\/code> k\u0131sm\u0131na, Google Play Console'dan edindi\u011finiz hizmet hesab\u0131 anahtar\u0131n\u0131n yolunu girmelisiniz. Bu anahtar, Fastlane'in Google Play API'leriyle etkile\u015fim kurmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bu \u015feritleri \u00e7al\u0131\u015ft\u0131rmak i\u00e7in projenizin <code>android<\/code> dizininde a\u015fa\u011f\u0131daki komutlar\u0131 kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">fastlane beta\nfastlane deploy<\/pre>\n<p><\/code><\/p>\n<div class=\"uzman-ipucu\">\n    Uzman \u0130pucu: Fastlane ile <code>increment_version_code<\/code> eylemini kullanarak her derlemede <code>versionCode<\/code> otomatik olarak art\u0131rabilirsiniz. Bu, manuel hatalar\u0131 \u00f6nler. <code>match<\/code> gibi eylemlerle imzalama sertifikalar\u0131n\u0131 da otomatik y\u00f6netebilirsiniz.\n  <\/div>\n<h3>4. CI\/CD Entegrasyonu i\u00e7in Temel Yakla\u015f\u0131mlar<\/h3>\n<p>Fastlane, ba\u011f\u0131ms\u0131z bir ara\u00e7 olarak harika \u00e7al\u0131\u015fsa da, ger\u00e7ek g\u00fcc\u00fcn\u00fc bir CI\/CD sistemiyle birle\u015fti\u011finde g\u00f6sterir. GitHub Actions, GitLab CI, Jenkins veya Azure DevOps gibi platformlar, kod deponuzdaki de\u011fi\u015fiklikleri alg\u0131lad\u0131\u011f\u0131nda otomatik olarak derleme ve da\u011f\u0131t\u0131m i\u015flemlerini tetikleyebilir. WSL2 ortam\u0131n\u0131zda bu ad\u0131mlar\u0131 manuel olarak yap\u0131land\u0131rmak yerine, bir CI\/CD sunucusunun bunlar\u0131 otomatik olarak yapmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<ul>\n<li>\n<p><strong>WSL2 Runner Kullan\u0131m\u0131 (Lokal\/Hibrit CI):<\/strong> Baz\u0131 durumlarda, \u00f6zellikle \u00f6zel donan\u0131m gereksinimleri veya dahili a\u011f k\u0131s\u0131tlamalar\u0131 olan projelerde, bir Windows sunucusunda \u00e7al\u0131\u015fan bir WSL2 ortam\u0131n\u0131 CI\/CD runner olarak kullanabilirsiniz. \u00d6rne\u011fin, GitHub Actions i\u00e7in self-hosted runner'\u0131 Windows'a kurup, Fastlane komutlar\u0131n\u0131 WSL2 i\u00e7inde \u00e7al\u0131\u015facak \u015fekilde yap\u0131land\u0131rabilirsiniz.<\/p>\n<\/li>\n<li>\n<p><strong>Bulut Tabanl\u0131 CI\/CD:<\/strong> Daha yayg\u0131n olarak, GitHub Actions veya GitLab CI gibi bulut tabanl\u0131 CI\/CD platformlar\u0131 kullan\u0131l\u0131r. Bu platformlar genellikle Linux tabanl\u0131 VM'ler sa\u011flar. Fastlane komutlar\u0131n\u0131z\u0131 bu Linux VM'leri \u00fczerinde \u00e7al\u0131\u015facak \u015fekilde CI\/CD pipeline'\u0131n\u0131za entegre edersiniz. \u00d6rne\u011fin, bir <code>main<\/code> branch'e yap\u0131lan her push'ta uygulaman\u0131n derlenip test edilmesi ve ba\u015far\u0131l\u0131 olursa beta kanal\u0131na y\u00fcklenmesi gibi bir senaryo kurabilirsiniz.<\/p>\n<\/li>\n<\/ul>\n<p>Fastlane ve CI\/CD entegrasyonu, mobil geli\u015ftirme s\u00fcre\u00e7lerinizi tamamen d\u00f6n\u00fc\u015ft\u00fcrebilir. Uygulama da\u011f\u0131t\u0131mlar\u0131n\u0131z\u0131 otomatikle\u015ftirmek, geli\u015ftirme d\u00f6ng\u00fcn\u00fcz\u00fc h\u0131zland\u0131r\u0131rken ayn\u0131 zamanda geli\u015ftiricilerin manuel ve tekrarlayan g\u00f6revlerden kurtulmas\u0131n\u0131 sa\u011flar. WSL2 \u00fczerindeki bu g\u00fc\u00e7l\u00fc ortam, size bu otomasyonu ba\u015flatmak i\u00e7in sa\u011flam bir temel sunar.<\/p>\n<h2>Sonu\u00e7: Ba\u011f\u0131ms\u0131z Mobil Geli\u015ftirmenin Gelece\u011fi ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Android Studio'nun a\u011f\u0131r y\u00fck\u00fc veya Expo'nun \u00fccretli EAS Build hizmetleri olmadan, WSL2 \u00fczerinde Expo projelerinizi ba\u011f\u0131ms\u0131z bir \u015fekilde derleyebilece\u011finiz g\u00fc\u00e7l\u00fc ve verimli bir ortam\u0131 nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m ele ald\u0131k. Geli\u015ftirme ortam\u0131m\u0131z\u0131n temelini olu\u015fturan WSL2 kurulumundan, gerekli ara\u00e7lar\u0131n (Node.js, Yarn, JDK, Android SDK) konfig\u00fcrasyonuna, Expo projemizi bare workflow'a ta\u015f\u0131maya ve son olarak uygulaman\u0131n imzalanm\u0131\u015f <code>.apk<\/code> veya <code>.aab<\/code> paketini olu\u015fturmaya kadar her a\u015famay\u0131 detayland\u0131rd\u0131k. Ayr\u0131ca, geli\u015ftirme deneyiminizi h\u0131zland\u0131rmak i\u00e7in performans ipu\u00e7lar\u0131 ve s\u00fcre\u00e7leri otomatikle\u015ftirmek i\u00e7in Fastlane gibi ileri d\u00fczey ara\u00e7lar\u0131n kullan\u0131m\u0131na da de\u011findik.<\/p>\n<p>Bu yakla\u015f\u0131m, geli\u015ftiricilere mobil uygulama projeleri \u00fczerinde tam kontrol sa\u011flar. \u00d6zellikle b\u00fct\u00e7e k\u0131s\u0131tlamalar\u0131 olan veya bulut tabanl\u0131 hizmetlere ba\u011f\u0131ml\u0131 kalmak istemeyen geli\u015ftiriciler ve ekipler i\u00e7in paha bi\u00e7ilmez bir \u00e7\u00f6z\u00fcmd\u00fcr. WSL2'nin sundu\u011fu Linux \u00e7ekirde\u011fi entegrasyonu sayesinde, Windows kullan\u0131c\u0131lar\u0131 bile Linux'un avantajlar\u0131ndan tam anlam\u0131yla faydalanarak g\u00fc\u00e7l\u00fc ve kararl\u0131 bir mobil geli\u015ftirme ortam\u0131na sahip olabilirler. Bu sayede, daha h\u0131zl\u0131 derleme s\u00fcreleri, daha az hata ve daha esnek bir i\u015f ak\u0131\u015f\u0131 elde edersiniz.<\/p>\n<p>Ba\u011f\u0131ms\u0131z mobil geli\u015ftirme yetene\u011fi, sadece uygulaman\u0131z\u0131 yay\u0131nlamakla kalmaz, ayn\u0131 zamanda projenizin gelece\u011fi \u00fczerinde de size tam s\u00f6z hakk\u0131 verir. Kendi derleme sunucular\u0131n\u0131z\u0131 kurma, \u00f6zel entegrasyonlar yapma veya benzersiz da\u011f\u0131t\u0131m stratejileri geli\u015ftirme \u00f6zg\u00fcrl\u00fc\u011f\u00fcne sahip olursunuz. Mobil geli\u015ftirme d\u00fcnyas\u0131 s\u00fcrekli evriliyor ve bu t\u00fcr ba\u011f\u0131ms\u0131z \u00e7\u00f6z\u00fcmler, geli\u015ftiricilerin yenilik\u00e7i kalabilmeleri ve kendi ihtiya\u00e7lar\u0131na g\u00f6re ortamlar\u0131n\u0131 \u015fekillendirebilmeleri i\u00e7in giderek daha \u00f6nemli hale geliyor.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt>Q1: Expo Go ile geli\u015ftirme yaparken neden bare workflow'a ge\u00e7meliyim?<\/dt>\n<dd>A1: Expo Go, h\u0131zl\u0131 prototipleme ve test i\u00e7in harikad\u0131r, ancak baz\u0131 k\u0131s\u0131tlamalar\u0131 vard\u0131r. E\u011fer projeniz \u00f6zel yerel mod\u00fcller gerektiriyorsa (\u00f6rn. baz\u0131 Bluetooth k\u00fct\u00fcphaneleri), uygulaman\u0131z\u0131 Expo Go'dan ba\u011f\u0131ms\u0131z olarak Google Play Store'a y\u00fcklemek istiyorsan\u0131z veya daha derinlemesine yerel kontrol elde etmek istiyorsan\u0131z bare workflow'a ge\u00e7meniz gerekir. Bare workflow, size projenizin tam yerel kod taban\u0131na eri\u015fim sa\u011flar.<\/dd>\n<dt>Q2: WSL2 kullanmak yerine direkt Windows'ta derleme yapamaz m\u0131y\u0131m?<\/dt>\n<dd>A2: Evet, Windows \u00fczerinde de Android Studio kurarak veya komut sat\u0131r\u0131 ara\u00e7lar\u0131n\u0131 manuel olarak ayarlayarak derleme yapabilirsiniz. Ancak WSL2 kullanman\u0131n avantajlar\u0131 vard\u0131r: daha kararl\u0131 bir Linux tabanl\u0131 ortam, dosya sistemi performans\u0131n\u0131n optimizasyonu (e\u011fer projeler Linux taraf\u0131nda tutulursa), Windows'un potansiyel uyumluluk sorunlar\u0131ndan ka\u00e7\u0131nma ve genel olarak daha h\u0131zl\u0131 bir geli\u015ftirme deneyimi sunmas\u0131d\u0131r. Ayr\u0131ca Android Studio'nun sistem kaynaklar\u0131n\u0131 t\u00fcketmesini engeller.<\/dd>\n<dt>Q3: iOS uygulamalar\u0131n\u0131 WSL2 \u00fczerinde derleyebilir miyim?<\/dt>\n<dd>A3: Hay\u0131r, iOS uygulamalar\u0131n\u0131 derlemek i\u00e7in Apple'\u0131n Xcode IDE'si ve bir macOS i\u015fletim sistemi gereklidir. WSL2, iOS derlemesi i\u00e7in gerekli olan macOS ortam\u0131n\u0131 sa\u011flayamaz. Bu rehber sadece Android uygulamalar\u0131n\u0131n ba\u011f\u0131ms\u0131z derlenmesine odaklanm\u0131\u015ft\u0131r. iOS i\u00e7in ya bir macOS cihaz\u0131 kullanmal\u0131 ya da bulut tabanl\u0131 bir macOS derleme hizmetinden yararlanmal\u0131s\u0131n\u0131z.<\/dd>\n<dt>Q4: Uygulamam\u0131 Google Play Store'a nas\u0131l y\u00fcklerim?<\/dt>\n<dd>A4: Uygulaman\u0131z\u0131 derledikten ve bir <code>.aab<\/code> dosyas\u0131 olu\u015fturduktan sonra, bir Google Play Geli\u015ftirici Hesab\u0131na (tek seferlik \u00fccretli) ihtiyac\u0131n\u0131z vard\u0131r. Hesab\u0131n\u0131z olduktan sonra Google Play Console'a giri\u015f yaparak yeni bir uygulama olu\u015fturabilir ve <code>.aab<\/code> dosyan\u0131z\u0131 \"App bundles\" k\u0131sm\u0131na y\u00fckleyebilirsiniz. Uygulama bilgilerini, ekran g\u00f6r\u00fcnt\u00fclerini ve di\u011fer detaylar\u0131 tamamlad\u0131ktan sonra uygulaman\u0131z\u0131 yay\u0131nlayabilirsiniz.<\/dd>\n<dt>Q5: Expo'nun EAS Build hizmeti ile bu y\u00f6ntem aras\u0131ndaki temel fark nedir?<\/dt>\n<dd>A5: EAS Build, Expo'nun bulut tabanl\u0131 derleme hizmetidir. Sizden kaynak kodu al\u0131r ve bulutta sizin i\u00e7in ba\u011f\u0131ms\u0131z derlemeler (.apk, .aab, .ipa) olu\u015fturur. Bu, kendi yerel ortam\u0131n\u0131zda SDK'lar\u0131 kurma ve bak\u0131m\u0131n\u0131 yapma zorunlulu\u011funu ortadan kald\u0131r\u0131r. Ancak genellikle belirli bir kullan\u0131m limitinden sonra \u00fccretlidir ve derleme s\u00fcreci \u00fczerinde daha az do\u011frudan kontrol\u00fcn\u00fcz vard\u0131r. Bu rehberdeki y\u00f6ntem ise, t\u00fcm derleme s\u00fcrecini kendi WSL2 ortam\u0131n\u0131zda, tamamen \u00fccretsiz ve tam kontrolle ger\u00e7ekle\u015ftirmenizi sa\u011flar.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Android Studio&#8217;nun a\u011f\u0131r y\u00fck\u00fc veya Expo&#8217;nun EAS Build kredileri olmadan, WSL2 \u00fczerinde verimli bir Expo build ortam\u0131 kurarak&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-35709","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WSL2&#039;de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme<\/title>\n<meta name=\"description\" content=\"Android Studio&#039;nun a\u011f\u0131r y\u00fck\u00fc veya Expo&#039;nun EAS Build kredileri olmadan, WSL2 \u00fczerinde verimli bir Expo build ortam\u0131 kurarak mobil uygulama geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131n. Bu ad\u0131m ad\u0131m rehber, ba\u015flang\u0131\u00e7tan ileri seviye konfig\u00fcrasyonlara kadar her \u015feyi kaps\u0131yor ve s\u0131f\u0131rdan ba\u011f\u0131ms\u0131z uygulama derleme yetene\u011finizi in\u015fa etmenizi sa\u011fl\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WSL2&#039;de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme\" \/>\n<meta property=\"og:description\" content=\"Android Studio&#039;nun a\u011f\u0131r y\u00fck\u00fc veya Expo&#039;nun EAS Build kredileri olmadan, WSL2 \u00fczerinde verimli bir Expo build ortam\u0131 kurarak mobil uygulama geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131n. Bu ad\u0131m ad\u0131m rehber, ba\u015flang\u0131\u00e7tan ileri seviye konfig\u00fcrasyonlara kadar her \u015feyi kaps\u0131yor ve s\u0131f\u0131rdan ba\u011f\u0131ms\u0131z uygulama derleme yetene\u011finizi in\u015fa etmenizi sa\u011fl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-02T22:31:29+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"37 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"WSL2&#8217;de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme\",\"datePublished\":\"2025-12-02T22:31:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/\"},\"wordCount\":6437,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/\",\"name\":\"WSL2'de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-02T22:31:29+00:00\",\"description\":\"Android Studio'nun a\u011f\u0131r y\u00fck\u00fc veya Expo'nun EAS Build kredileri olmadan, WSL2 \u00fczerinde verimli bir Expo build ortam\u0131 kurarak mobil uygulama geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131n. Bu ad\u0131m ad\u0131m rehber, ba\u015flang\u0131\u00e7tan ileri seviye konfig\u00fcrasyonlara kadar her \u015feyi kaps\u0131yor ve s\u0131f\u0131rdan ba\u011f\u0131ms\u0131z uygulama derleme yetene\u011finizi in\u015fa etmenizi sa\u011fl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WSL2&#8217;de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"WSL2'de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme","description":"Android Studio'nun a\u011f\u0131r y\u00fck\u00fc veya Expo'nun EAS Build kredileri olmadan, WSL2 \u00fczerinde verimli bir Expo build ortam\u0131 kurarak mobil uygulama geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131n. Bu ad\u0131m ad\u0131m rehber, ba\u015flang\u0131\u00e7tan ileri seviye konfig\u00fcrasyonlara kadar her \u015feyi kaps\u0131yor ve s\u0131f\u0131rdan ba\u011f\u0131ms\u0131z uygulama derleme yetene\u011finizi in\u015fa etmenizi sa\u011fl\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/","og_locale":"tr_TR","og_type":"article","og_title":"WSL2'de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme","og_description":"Android Studio'nun a\u011f\u0131r y\u00fck\u00fc veya Expo'nun EAS Build kredileri olmadan, WSL2 \u00fczerinde verimli bir Expo build ortam\u0131 kurarak mobil uygulama geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131n. Bu ad\u0131m ad\u0131m rehber, ba\u015flang\u0131\u00e7tan ileri seviye konfig\u00fcrasyonlara kadar her \u015feyi kaps\u0131yor ve s\u0131f\u0131rdan ba\u011f\u0131ms\u0131z uygulama derleme yetene\u011finizi in\u015fa etmenizi sa\u011fl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-02T22:31:29+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"37 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"WSL2&#8217;de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme","datePublished":"2025-12-02T22:31:29+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/"},"wordCount":6437,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/","url":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/","name":"WSL2'de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-02T22:31:29+00:00","description":"Android Studio'nun a\u011f\u0131r y\u00fck\u00fc veya Expo'nun EAS Build kredileri olmadan, WSL2 \u00fczerinde verimli bir Expo build ortam\u0131 kurarak mobil uygulama geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131n. Bu ad\u0131m ad\u0131m rehber, ba\u015flang\u0131\u00e7tan ileri seviye konfig\u00fcrasyonlara kadar her \u015feyi kaps\u0131yor ve s\u0131f\u0131rdan ba\u011f\u0131ms\u0131z uygulama derleme yetene\u011finizi in\u015fa etmenizi sa\u011fl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/wsl2de-expo-build-ortami-kurulumu-ucretsiz-ve-verimli-mobil-gelistirme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"WSL2&#8217;de Expo Build Ortam\u0131 Kurulumu: \u00dccretsiz ve Verimli Mobil Geli\u015ftirme"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35709"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35709\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}