{"id":37068,"date":"2025-12-27T01:00:39","date_gmt":"2025-12-26T22:00:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/"},"modified":"2025-12-27T01:00:39","modified_gmt":"2025-12-26T22:00:39","slug":"swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/","title":{"rendered":"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek"},"content":{"rendered":"<h2>SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek<\/h2>\n<p>SwiftUI, modern ve deklaratif bir UI framework&#8217;\u00fc olarak uygulama geli\u015ftirme s\u00fcre\u00e7lerini basitle\u015ftirirken, eri\u015filebilirlik konusunu da merkeze al\u0131r. Uygulamalar\u0131m\u0131z\u0131n herkes taraf\u0131ndan kullan\u0131labilir olmas\u0131, sadece etik bir sorumluluk de\u011fil, ayn\u0131 zamanda geni\u015f bir kullan\u0131c\u0131 kitlesine ula\u015fman\u0131n da anahtar\u0131d\u0131r. Bu makalede, SwiftUI&#8217;\u0131n eri\u015filebilirlik i\u00e7 yap\u0131lar\u0131n\u0131, temel prensiplerini ve bu g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak nas\u0131l daha kapsay\u0131c\u0131 uygulamalar geli\u015ftirebilece\u011fimizi detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Eri\u015filebilirlik modifiyerlerinden, VoiceOver entegrasyonuna, eri\u015filebilirlik a\u011fac\u0131n\u0131n derinliklerinden \u00f6zel eleman olu\u015fturmaya kadar bir\u00e7ok konuya de\u011finece\u011fiz.<\/p>\n<h3>1. Eri\u015filebilirli\u011fin Temelleri ve SwiftUI&#8217;daki Yeri<\/h3>\n<p>Eri\u015filebilirlik, bir \u00fcr\u00fcn\u00fcn, hizmetin veya ortam\u0131n engelli bireyler taraf\u0131ndan kolayca kullan\u0131labilmesini ifade eder. Mobil uygulamalar \u00f6zelinde, g\u00f6rme, i\u015fitme, motor veya bili\u015fsel engelleri olan kullan\u0131c\u0131lar\u0131n uygulamay\u0131 sorunsuz bir \u015fekilde deneyimleyebilmesi anlam\u0131na gelir. SwiftUI, bu konuda geli\u015ftiricilere \u00f6nemli kolayl\u0131klar sunar.<\/p>\n<h4>1.1. Neden Eri\u015filebilirlik \u00d6nemlidir?<\/h4>\n<p>Eri\u015filebilirlik, sadece yasal gereklilikleri yerine getirmekten \u00f6te, etik bir sorumluluktur. D\u00fcnya genelinde milyonlarca engelli birey bulunmaktad\u0131r ve bu ki\u015filerin dijital d\u00fcnyaya e\u015fit eri\u015fime sahip olmas\u0131 temel bir hakt\u0131r. Eri\u015filebilir uygulamalar, daha geni\u015f bir kullan\u0131c\u0131 taban\u0131na ula\u015fman\u0131z\u0131, marka itibar\u0131n\u0131z\u0131 g\u00fc\u00e7lendirmenizi ve sosyal sorumluluk bilinciyle hareket etmenizi sa\u011flar. Ayr\u0131ca, eri\u015filebilirlik uygulamalar\u0131 genellikle daha iyi bir kullan\u0131c\u0131 deneyimi sunar ve herkes i\u00e7in daha kolay kullan\u0131labilir hale gelir.<\/p>\n<h4>1.2. Engelli Kullan\u0131c\u0131 Gruplar\u0131<\/h4>\n<p>Eri\u015filebilirlik denince akla genellikle g\u00f6rme engelliler gelse de, farkl\u0131 engelli gruplar\u0131 i\u00e7in de optimizasyon yapmak gereklidir:<\/p>\n<ul>\n<li><b>G\u00f6rme Engelliler:<\/b> VoiceOver gibi ekran okuyucular, b\u00fcy\u00fck metinler, y\u00fcksek kontrast.<\/li>\n<li><b>\u0130\u015fitme Engelliler:<\/b> Altyaz\u0131lar, metin transkriptleri, g\u00f6rsel bildirimler.<\/li>\n<li><b>Motor Engelliler:<\/b> B\u00fcy\u00fck dokunma hedefleri, tek elle kullan\u0131m kolayl\u0131\u011f\u0131, klavye navigasyonu.<\/li>\n<li><b>Bili\u015fsel Engelliler:<\/b> Basit aray\u00fczler, anla\u015f\u0131l\u0131r dil, tekrarlayan desenler.<\/li>\n<\/ul>\n<h4>1.3. SwiftUI&#8217;\u0131n Eri\u015filebilirlik Felsefesi<\/h4>\n<p>SwiftUI, varsay\u0131lan olarak bir\u00e7ok eri\u015filebilirlik \u00f6zelli\u011fini b\u00fcnyesinde bar\u0131nd\u0131r\u0131r. \u00d6rne\u011fin, standart kontroller (Button, Text, Toggle vb.) otomatik olarak VoiceOver taraf\u0131ndan okunabilir ve etkile\u015fimli hale gelir. SwiftUI&#8217;\u0131n deklaratif yap\u0131s\u0131, eri\u015filebilirlik modifiyerlerinin kolayca uygulanmas\u0131na olanak tan\u0131r, b\u00f6ylece geli\u015ftiriciler UI&#8217;lar\u0131n\u0131 olu\u015ftururken ayn\u0131 zamanda eri\u015filebilirli\u011fi de d\u00fc\u015f\u00fcnebilirler. Bu entegrasyon, eri\u015filebilirli\u011fi geli\u015ftirme s\u00fcrecinin sonuna b\u0131rakmak yerine, ba\u015ftan itibaren bir par\u00e7as\u0131 haline getirir.<\/p>\n<h3>2. SwiftUI Eri\u015filebilirlik API&#8217;lar\u0131 ve Modifier&#8217;lar<\/h3>\n<p>SwiftUI, eri\u015filebilirli\u011fi \u00f6zelle\u015ftirmek ve iyile\u015ftirmek i\u00e7in zengin bir modifiyer seti sunar. Bu modifiyerler, VoiceOver gibi yard\u0131mc\u0131 teknolojilerin bir UI \u00f6\u011fesini nas\u0131l yorumlayaca\u011f\u0131n\u0131 belirlemenizi sa\u011flar.<\/p>\n<h4>2.1. <code>accessibilityLabel<\/code> ve <code>accessibilityValue<\/code><\/h4>\n<ul>\n<li><b><code>accessibilityLabel(_:)<\/code><\/b>: Bir \u00f6\u011feyi tan\u0131mlayan k\u0131sa, a\u00e7\u0131klay\u0131c\u0131 bir metin sa\u011flar. VoiceOver, kullan\u0131c\u0131 bir \u00f6\u011feye odakland\u0131\u011f\u0131nda bu etiketi okur. G\u00f6rsel olarak a\u00e7\u0131k olmayan veya sadece bir simgeyle temsil edilen \u00f6\u011feler i\u00e7in hayati \u00f6neme sahiptir.\n<pre><code>\nImage(systemName: \"heart.fill\")\n    .accessibilityLabel(\"Favorilere Ekle\")\n<\/pre>\n<p><\/code>\n    <\/li>\n<li><b><code>accessibilityValue(_:)<\/code><\/b>: Bir \u00f6\u011fenin mevcut durumunu veya de\u011ferini a\u00e7\u0131klar. \u00d6zellikle kayd\u0131r\u0131c\u0131lar, ilerleme g\u00f6stergeleri veya anahtarlar gibi dinamik de\u011ferlere sahip \u00f6\u011feler i\u00e7in kullan\u0131l\u0131r.\n<pre><code>\nSlider(value: $volume, in: 0...100)\n    .accessibilityLabel(\"Ses Seviyesi\")\n    .accessibilityValue(\"\\(Int(volume)) y\u00fczde\")\n<\/pre>\n<p><\/code>\n    <\/li>\n<\/ul>\n<h4>2.2. <code>accessibilityHint<\/code> ve <code>accessibilityAddTraits<\/code><\/h4>\n<ul>\n<li><b><code>accessibilityHint(_:)<\/code><\/b>: Bir \u00f6\u011fenin ne yapaca\u011f\u0131n\u0131 veya nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 a\u00e7\u0131klayan k\u0131sa bir ipucu sa\u011flar. Genellikle bir \u00f6\u011feye odaklan\u0131ld\u0131ktan sonra, etiketten sonra okunur.\n<pre><code>\nButton(\"G\u00f6nder\") { \/* action *\/ }\n    .accessibilityLabel(\"G\u00f6nder butonu\")\n    .accessibilityHint(\"Formdaki bilgileri sunucuya g\u00f6nderir.\")\n<\/pre>\n<p><\/code>\n    <\/li>\n<li><b><code>accessibilityAddTraits(_:)<\/code><\/b>: Bir \u00f6\u011fenin davran\u0131\u015f\u0131n\u0131 veya durumunu a\u00e7\u0131klayan bir veya daha fazla eri\u015filebilirlik \u00f6zelli\u011fi ekler. \u00d6rne\u011fin, bir d\u00fc\u011fmenin \"button\" \u00f6zelli\u011fi, bir metnin \"staticText\" \u00f6zelli\u011fi gibi.\n<pre><code>\nText(\"Yeni Mesaj\")\n    .accessibilityAddTraits(.isHeader) \/\/ Ba\u015fl\u0131k olarak i\u015faretler\n<\/pre>\n<p><\/code><br \/>\nYayg\u0131n \u00f6zellikler: <code>.isButton<\/code>, <code>.isSelected<\/code>, <code>.isAdjustable<\/code>, <code>.isHeader<\/code>, <code>.isImage<\/code>, <code>.playsSound<\/code>.<\/li>\n<\/ul>\n<h4>2.3. <code>accessibilityRemoveTraits<\/code> ve <code>accessibilityHidden<\/code><\/h4>\n<ul>\n<li><b><code>accessibilityRemoveTraits(_:)<\/code><\/b>: Bir \u00f6\u011feden varsay\u0131lan olarak atanm\u0131\u015f bir eri\u015filebilirlik \u00f6zelli\u011fini kald\u0131r\u0131r. Nadiren kullan\u0131l\u0131r, ancak bir \u00f6\u011fenin varsay\u0131lan davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirmek istedi\u011finizde faydal\u0131 olabilir.<\/li>\n<li><b><code>accessibilityHidden(_:)<\/code><\/b>: Bir \u00f6\u011feyi ve t\u00fcm alt \u00f6\u011felerini eri\u015filebilirlik a\u011fac\u0131ndan tamamen gizler. Bu, VoiceOver'\u0131n bu \u00f6\u011feyi g\u00f6rmesini ve okumas\u0131n\u0131 engeller. Sadece dekoratif veya tekrarlayan bilgiler i\u00e7in kullan\u0131lmal\u0131d\u0131r.\n<pre><code>\nImage(systemName: \"arrow.right\")\n    .accessibilityHidden(true) \/\/ Sadece g\u00f6rsel bir ok, a\u00e7\u0131klanmas\u0131na gerek yok\n<\/pre>\n<p><\/code>\n<\/li>\n<\/ul>\n<h3>3. Eri\u015filebilirlik A\u011fac\u0131<\/h3>\n<p>Eri\u015filebilirlik a\u011fac\u0131, VoiceOver ve di\u011fer yard\u0131mc\u0131 teknolojilerin bir uygulaman\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc anlamak i\u00e7in kulland\u0131\u011f\u0131 hiyerar\u015fik bir yap\u0131d\u0131r. Her bir eri\u015filebilir \u00f6\u011fe, bu a\u011fa\u00e7ta bir d\u00fc\u011f\u00fcm olarak temsil edilir ve label, value, hint, traits gibi \u00f6zelliklere sahiptir.<\/p>\n<h4>3.1. VoiceOver ve Eri\u015filebilirlik A\u011fac\u0131 \u0130li\u015fkisi<\/h4>\n<p>VoiceOver, kullan\u0131c\u0131n\u0131n parma\u011f\u0131n\u0131 ekranda gezdirdi\u011finde veya \u00f6\u011feler aras\u0131nda gezinmek i\u00e7in kayd\u0131rma hareketleri yapt\u0131\u011f\u0131nda, eri\u015filebilirlik a\u011fac\u0131ndaki \u00f6\u011feleri okur. A\u011fac\u0131n do\u011fru bir \u015fekilde yap\u0131land\u0131r\u0131lmas\u0131, VoiceOver kullan\u0131c\u0131lar\u0131n\u0131n uygulaman\u0131zda etkili bir \u015fekilde gezinmesini sa\u011flar. Bir \u00f6\u011fenin a\u011fa\u00e7ta nas\u0131l g\u00f6r\u00fcnece\u011fi, uygulad\u0131\u011f\u0131n\u0131z modifiyerlere ba\u011fl\u0131d\u0131r.<\/p>\n<h4>3.2. Otomatik Gruplama ve Manuel Gruplama<\/h4>\n<p>SwiftUI, genellikle ilgili \u00f6\u011feleri otomatik olarak grupland\u0131rarak VoiceOver'\u0131n daha anlaml\u0131 bir \u015fekilde okumas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, bir <code>VStack<\/code> i\u00e7indeki bir simge ve metin, genellikle tek bir eri\u015filebilir \u00f6\u011fe olarak okunur. Ancak bazen bu otomatik gruplama yeterli olmayabilir veya istedi\u011finiz gibi \u00e7al\u0131\u015fmayabilir.<\/p>\n<ul>\n<li><b>Otomatik Gruplama:<\/b>\n<pre><code>\nHStack {\n    Image(systemName: \"bell.fill\")\n    Text(\"Bildirimler\")\n} \/\/ VoiceOver muhtemelen \"Bildirimler\" olarak okur.\n<\/pre>\n<p><\/code>\n    <\/li>\n<li><b>Manuel Gruplama (<code>.accessibilityElement(children: .combine)<\/code>):<\/b> Birden fazla \u00f6\u011feyi tek bir eri\u015filebilir \u00f6\u011fe olarak birle\u015ftirmek istedi\u011finizde bu modifiyeri kullanabilirsiniz. Bu, VoiceOver'\u0131n daha az gezinme ad\u0131m\u0131yla daha fazla bilgi edinmesini sa\u011flar.\n<pre><code>\nHStack {\n    Image(systemName: \"bell.fill\")\n    Text(\"Bildirimler\")\n}\n.accessibilityElement(children: .combine)\n.accessibilityLabel(\"Bildirimler\")\n.accessibilityHint(\"Yeni bildirimleri g\u00f6sterir.\")\n<\/pre>\n<p><\/code>\n    <\/li>\n<li><b>Ayr\u0131 \u00d6\u011feler (<code>.accessibilityElement(children: .ignore)<\/code>):<\/b> Bazen bir grubun i\u00e7indeki her \u00f6\u011fenin ayr\u0131 ayr\u0131 eri\u015filebilir olmas\u0131 gerekebilir. Bu durumda, <code>.accessibilityElement(children: .ignore)<\/code> kullanarak otomatik gruplamay\u0131 devre d\u0131\u015f\u0131 b\u0131rakabilirsiniz. Bu, \u00f6zellikle karma\u015f\u0131k ve etkile\u015fimli bile\u015fenlerin birle\u015fiminde faydal\u0131d\u0131r.<\/li>\n<\/ul>\n<h4>3.3. Eri\u015filebilirlik \u00d6\u011felerinin S\u0131ras\u0131<\/h4>\n<p>VoiceOver, genellikle \u00f6\u011feleri ekrandaki g\u00f6rsel d\u00fczenlerine g\u00f6re soldan sa\u011fa, yukar\u0131dan a\u015fa\u011f\u0131ya do\u011fru okur. Ancak, \u00f6zel d\u00fczenler veya karma\u015f\u0131k hiyerar\u015filerde bu s\u0131ra bozulabilir. <code>accessibilitySortPriority(_:)<\/code> modifiyeri ile \u00f6\u011felerin okunma s\u0131ras\u0131n\u0131 manuel olarak ayarlayabilirsiniz. Daha y\u00fcksek \u00f6ncelik de\u011feri, \u00f6\u011fenin daha erken okunaca\u011f\u0131 anlam\u0131na gelir.<\/p>\n<pre><code>\nHStack {\n    Text(\"\u00d6nce okunacak\")\n        .accessibilitySortPriority(1)\n    Text(\"Sonra okunacak\")\n        .accessibilitySortPriority(0)\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>4. \u00d6zel Eri\u015filebilirlik \u00d6\u011feleri Olu\u015fturma<\/h3>\n<p>Bazen standart SwiftUI g\u00f6r\u00fcn\u00fcmleri ve modifiyerleri, karma\u015f\u0131k veya \u00f6zel tasarlanm\u0131\u015f UI bile\u015fenleri i\u00e7in yeterli olmayabilir. Bu durumlarda, <code>accessibilityRepresentation<\/code> gibi ara\u00e7larla kendi eri\u015filebilirlik \u00f6\u011felerinizi olu\u015fturabilirsiniz.<\/p>\n<h4>4.1. <code>accessibilityRepresentation<\/code> Kullan\u0131m\u0131<\/h4>\n<p><code>accessibilityRepresentation<\/code> modifiyeri, bir g\u00f6r\u00fcn\u00fcm\u00fcn eri\u015filebilirlik a\u011fac\u0131ndaki temsilini tamamen de\u011fi\u015ftirmenize olanak tan\u0131r. Bu, \u00f6zellikle bir g\u00f6r\u00fcn\u00fcm\u00fcn g\u00f6rsel olarak karma\u015f\u0131k oldu\u011fu ancak eri\u015filebilirlik a\u00e7\u0131s\u0131ndan daha basit bir \u015fekilde temsil edilmesi gerekti\u011fi durumlarda kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code>\nstruct CustomProgressView: View {\n    var progress: Double\n    var body: some View {\n        ZStack(alignment: .leading) {\n            Capsule()\n                .fill(Color.gray.opacity(0.3))\n                .frame(height: 20)\n            Capsule()\n                .fill(Color.blue)\n                .frame(width: CGFloat(progress) * 200, height: 20)\n        }\n        .accessibilityRepresentation {\n            Slider(value: .constant(progress), in: 0...1)\n                .accessibilityLabel(\"\u0130lerleme\")\n                .accessibilityValue(\"\\(Int(progress * 100))%\")\n        }\n    }\n}\n<\/pre>\n<p><\/code><br \/>\nBu \u00f6rnekte, \u00f6zel bir ilerleme \u00e7ubu\u011fu g\u00f6rsel olarak karma\u015f\u0131k olsa da, eri\u015filebilirlik a\u011fac\u0131nda basit bir kayd\u0131r\u0131c\u0131 (Slider) olarak temsil edilerek VoiceOver'\u0131n daha kolay anlamas\u0131 sa\u011flanm\u0131\u015ft\u0131r.<\/p>\n<h4>4.2. Karma\u015f\u0131k G\u00f6r\u00fcn\u00fcmler \u0130\u00e7in \u00c7\u00f6z\u00fcmler<\/h4>\n<p>Karma\u015f\u0131k g\u00f6r\u00fcn\u00fcmlerde, \u00f6rne\u011fin bir takvim g\u00f6r\u00fcn\u00fcm\u00fc veya \u00f6zel bir grafik bile\u015feni, her bir etkile\u015fimli par\u00e7ay\u0131 ayr\u0131 ayr\u0131 eri\u015filebilir hale getirmek \u00f6nemlidir. Her bir g\u00fcn h\u00fccresini veya grafik noktas\u0131n\u0131 kendi <code>accessibilityLabel<\/code>, <code>accessibilityValue<\/code> ve <code>accessibilityAddTraits<\/code> ile donatmak gerekebilir. Ayr\u0131ca, bu t\u00fcr durumlarda <code>accessibilityElement(children: .ignore)<\/code> kullanarak varsay\u0131lan gruplamay\u0131 devre d\u0131\u015f\u0131 b\u0131rak\u0131p her bir par\u00e7ay\u0131 manuel olarak y\u00f6netmek daha do\u011fru bir yakla\u015f\u0131m olabilir.<\/p>\n<h4>4.3. Eri\u015filebilirlik Odak Y\u00f6netimi<\/h4>\n<p>VoiceOver kullan\u0131c\u0131lar\u0131, genellikle ekranda gezinmek i\u00e7in kayd\u0131rma hareketleri kullan\u0131r. Ancak, belirli durumlarda, uygulaman\u0131n programatik olarak oda\u011f\u0131 belirli bir \u00f6\u011feye ta\u015f\u0131mas\u0131 gerekebilir. \u00d6rne\u011fin, bir hata mesaj\u0131 g\u00f6r\u00fcnt\u00fclendi\u011finde oda\u011f\u0131 hata mesaj\u0131na ta\u015f\u0131mak, kullan\u0131c\u0131n\u0131n hatay\u0131 hemen fark etmesini sa\u011flar. SwiftUI 5 ve \u00fczeri s\u00fcr\u00fcmlerde <code>AccessibilityFocusState<\/code> ve <code>focused(_:)<\/code> modifiyerleri ile odak y\u00f6netimi daha kolay hale gelmi\u015ftir.<\/p>\n<pre><code>\nenum FocusableField: Hashable {\n    case username, password\n}\n\nstruct LoginView: View {\n    @State private var username = \"\"\n    @State private var password = \"\"\n    @AccessibilityFocusState private var focusedField: FocusableField?\n\n    var body: some View {\n        VStack {\n            TextField(\"Kullan\u0131c\u0131 Ad\u0131\", text: $username)\n                .focused($focusedField, equals: .username)\n            SecureField(\"\u015eifre\", text: $password)\n                .focused($focusedField, equals: .password)\n            Button(\"Giri\u015f Yap\") {\n                \/\/ Giri\u015f mant\u0131\u011f\u0131\n                \/\/ E\u011fer hata olursa:\n                \/\/ focusedField = .username \/\/ Hata durumunda ilgili alana odaklan\n            }\n        }\n        .onAppear {\n            focusedField = .username \/\/ Sayfa a\u00e7\u0131ld\u0131\u011f\u0131nda kullan\u0131c\u0131 ad\u0131na odaklan\n        }\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>5. Eri\u015filebilirlik Eylemleri<\/h3>\n<p>Eri\u015filebilirlik eylemleri, VoiceOver kullan\u0131c\u0131lar\u0131n\u0131n bir \u00f6\u011fe \u00fczerinde ger\u00e7ekle\u015ftirebilece\u011fi \u00f6zel etkile\u015fimleri tan\u0131mlaman\u0131za olanak tan\u0131r. Bu, kullan\u0131c\u0131lara daha zengin ve ba\u011flamsal bir deneyim sunar.<\/p>\n<h4>5.1. <code>accessibilityAction<\/code> ile \u00d6zel Eylemler Tan\u0131mlama<\/h4>\n<p><code>accessibilityAction(_:handler:)<\/code> modifiyeri, bir \u00f6\u011fe i\u00e7in \u00f6zel eylemler eklemenizi sa\u011flar. VoiceOver kullan\u0131c\u0131s\u0131 bir \u00f6\u011feye odakland\u0131\u011f\u0131nda, parma\u011f\u0131n\u0131 yukar\u0131 veya a\u015fa\u011f\u0131 kayd\u0131rarak bu eylemleri ke\u015ffedebilir ve \u00e7ift dokunarak tetikleyebilir.<\/p>\n<pre><code>\nText(\"E-postay\u0131 Sil\")\n    .accessibilityAction(.delete) {\n        print(\"E-posta silindi!\")\n    }\n<\/pre>\n<p><\/code><br \/>\nYayg\u0131n eylem t\u00fcrleri: <code>.default<\/code>, <code>.delete<\/code>, <code>.magicTap<\/code>, <code>.escape<\/code>, <code>.activate<\/code>.<\/p>\n<h4>5.2. Ayarlanabilir De\u011ferler (<code>.accessibilityAdjustableAction<\/code>)<\/h4>\n<p><code>accessibilityAdjustableAction(from:to:by:onIncrement:onDecrement:)<\/code> modifiyeri, bir \u00f6\u011fenin de\u011ferini art\u0131rma veya azaltma eylemlerini tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r. Bu, kayd\u0131r\u0131c\u0131lar, ad\u0131m say\u0131c\u0131lar veya ses kontrolleri gibi ayarlanabilir \u00f6\u011feler i\u00e7in idealdir.<\/p>\n<pre><code>\n@State private var counter = 0\n\nText(\"Saya\u00e7: \\(counter)\")\n    .accessibilityLabel(\"Saya\u00e7\")\n    .accessibilityValue(\"\\(counter)\")\n    .accessibilityAdjustableAction { direction in\n        switch direction {\n        case .increment:\n            counter += 1\n        case .decrement:\n            counter -= 1\n        @unknown default:\n            break\n        }\n    }\n<\/pre>\n<p><\/code><br \/>\nVoiceOver kullan\u0131c\u0131s\u0131 bu \u00f6\u011feye odakland\u0131\u011f\u0131nda, yukar\u0131 ve a\u015fa\u011f\u0131 kayd\u0131rma hareketleriyle sayac\u0131 art\u0131r\u0131p azaltabilir.<\/p>\n<h4>5.3. Eylem \u00d6rnekleri ve Kullan\u0131m Senaryolar\u0131<\/h4>\n<table>\n<thead>\n<tr>\n<th>Senaryo<\/th>\n<th>Eri\u015filebilirlik Modifiyeri\/Eylemi<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Bir listedeki \u00f6\u011feyi silme<\/td>\n<td><code>.accessibilityAction(.delete) { ... }<\/code><\/td>\n<td>Kullan\u0131c\u0131ya \"Sil\" eylemini sunar.<\/td>\n<\/tr>\n<tr>\n<td>Bir \u00f6\u011feyi favorilere ekleme\/\u00e7\u0131karma<\/td>\n<td><code>.accessibilityAction(named: \"Favorilere Ekle\") { ... }<\/code><\/td>\n<td>\u00d6zel adland\u0131r\u0131lm\u0131\u015f bir eylem sunar.<\/td>\n<\/tr>\n<tr>\n<td>Bir videoyu oynatma\/durdurma<\/td>\n<td><code>.accessibilityAction(.magicTap) { ... }<\/code><\/td>\n<td>\u0130ki parmakla \u00e7ift dokunma hareketine yan\u0131t verir.<\/td>\n<\/tr>\n<tr>\n<td>Bir kayd\u0131r\u0131c\u0131n\u0131n de\u011ferini de\u011fi\u015ftirme<\/td>\n<td><code>.accessibilityAdjustableAction { ... }<\/code><\/td>\n<td>Yukar\u0131\/a\u015fa\u011f\u0131 kayd\u0131rma ile de\u011feri ayarlar.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>6. Test ve Hata Ay\u0131klama<\/h3>\n<p>Eri\u015filebilirli\u011fi sa\u011flamak sadece kod yazmakla bitmez; uygulaman\u0131n ger\u00e7ek kullan\u0131c\u0131lar taraf\u0131ndan nas\u0131l deneyimlenece\u011fini test etmek de kritik \u00f6neme sahiptir.<\/p>\n<h4>6.1. VoiceOver ile Test Etme<\/h4>\n<p>En etkili test y\u00f6ntemi, uygulaman\u0131z\u0131 VoiceOver a\u00e7\u0131kken kullanmakt\u0131r. Ayarlar > Eri\u015filebilirlik > VoiceOver yolunu izleyerek veya \u00fc\u00e7 kez Ana Ekran\/Yan d\u00fc\u011fmeye basarak VoiceOver'\u0131 a\u00e7\u0131p kapatabilirsiniz.<br \/>\nVoiceOver ile test ederken \u015funlara dikkat edin:<\/p>\n<ul>\n<li>Her \u00f6\u011fe do\u011fru \u015fekilde etiketlenmi\u015f mi?<\/li>\n<li>Etiketler ve ipu\u00e7lar\u0131 anla\u015f\u0131l\u0131r ve a\u00e7\u0131klay\u0131c\u0131 m\u0131?<\/li>\n<li>\u00d6\u011feler aras\u0131nda gezinme s\u0131ras\u0131 mant\u0131kl\u0131 m\u0131?<\/li>\n<li>Etkile\u015fimli \u00f6\u011feler (d\u00fc\u011fmeler, anahtarlar vb.) do\u011fru \u015fekilde \u00e7al\u0131\u015f\u0131yor mu?<\/li>\n<li>\u00d6zel eylemler do\u011fru \u015fekilde tetikleniyor mu?<\/li>\n<\/ul>\n<h4>6.2. Eri\u015filebilirlik Denet\u00e7isi (Accessibility Inspector)<\/h4>\n<p>Xcode ile birlikte gelen Eri\u015filebilirlik Denet\u00e7isi, uygulaman\u0131z\u0131n eri\u015filebilirlik a\u011fac\u0131n\u0131 g\u00f6rselle\u015ftirmek ve hata ay\u0131klamak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<ul>\n<li><b>A\u00e7ma:<\/b> Xcode > Open Developer Tool > Accessibility Inspector.<\/li>\n<li><b>Kullan\u0131m:<\/b> Uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n, Denet\u00e7i'de hedef uygulaman\u0131z\u0131 se\u00e7in ve fare imlecini UI \u00f6\u011felerinin \u00fczerine getirin. Denet\u00e7i, \u00f6\u011fenin <code>label<\/code>, <code>value<\/code>, <code>hint<\/code>, <code>traits<\/code> gibi t\u00fcm eri\u015filebilirlik \u00f6zelliklerini g\u00f6sterecektir.<\/li>\n<li><b>Faydalar\u0131:<\/b> Yanl\u0131\u015f etiketleri, eksik ipu\u00e7lar\u0131n\u0131, hatal\u0131 gruplamalar\u0131 ve eri\u015filebilirlik a\u011fac\u0131ndaki di\u011fer sorunlar\u0131 h\u0131zl\u0131ca tespit etmenizi sa\u011flar.<\/li>\n<\/ul>\n<h4>6.3. Kod Tabanl\u0131 Test Yakla\u015f\u0131mlar\u0131<\/h4>\n<p>Unit ve UI testleri, eri\u015filebilirlik \u00f6zelliklerinin do\u011fru \u015fekilde uyguland\u0131\u011f\u0131ndan emin olmak i\u00e7in kullan\u0131labilir. XCUITest framework'\u00fc, eri\u015filebilirlik \u00f6\u011felerini bulmak ve onlarla etkile\u015fim kurmak i\u00e7in API'lar sunar.<\/p>\n<pre><code>\nfunc testAccessibilityLabelForButton() throws {\n    let app = XCUIApplication()\n    app.launch()\n\n    let myButton = app.buttons[\"G\u00f6nder butonu\"] \/\/ accessibilityLabel ile bul\n    XCTAssertTrue(myButton.exists)\n    XCTAssertEqual(myButton.label, \"G\u00f6nder butonu\")\n}\n<\/pre>\n<p><\/code><br \/>\nBu t\u00fcr testler, regresyonlar\u0131 \u00f6nlemeye ve uygulaman\u0131z\u0131n eri\u015filebilirli\u011fini s\u00fcrekli olarak korumaya yard\u0131mc\u0131 olur.<\/p>\n<h3>7. En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>Eri\u015filebilirli\u011fi uygulaman\u0131za entegre ederken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken baz\u0131 en iyi uygulamalar ve ipu\u00e7lar\u0131:<\/p>\n<h4>7.1. Anlaml\u0131 Etiketler Kullanma<\/h4>\n<p>Eri\u015filebilirlik etiketleri k\u0131sa, a\u00e7\u0131klay\u0131c\u0131 ve ba\u011flam\u0131 yans\u0131tmal\u0131d\u0131r. \"D\u00fc\u011fme\" veya \"Resim\" gibi genel etiketlerden ka\u00e7\u0131n\u0131n. Bunun yerine, \"Ayarlar d\u00fc\u011fmesi\" veya \"Profil resmi\" gibi daha spesifik ifadeler kullan\u0131n. Metin i\u00e7eriklerini tekrar etmeyin, zaten g\u00f6r\u00fcn\u00fcr olan metinler genellikle VoiceOver taraf\u0131ndan otomatik olarak okunur.<\/p>\n<h4>7.2. Renk Kontrast\u0131 ve Boyutland\u0131rma<\/h4>\n<ul>\n<li><b>Renk Kontrast\u0131:<\/b> Metin ve arka plan renkleri aras\u0131nda yeterli kontrast oldu\u011fundan emin olun. WCAG (Web \u0130\u00e7eri\u011fi Eri\u015filebilirlik Y\u00f6nergeleri) 2.1 standard\u0131, AAA seviyesi i\u00e7in 7:1, AA seviyesi i\u00e7in ise 4.5:1 kontrast oran\u0131n\u0131 \u00f6nerir. D\u00fc\u015f\u00fck kontrast, \u00f6zellikle g\u00f6rme engelli veya renk k\u00f6r\u00fc kullan\u0131c\u0131lar i\u00e7in metni okunaks\u0131z hale getirebilir.<\/li>\n<li><b>Boyutland\u0131rma:<\/b> Dokunma hedefleri (d\u00fc\u011fmeler, anahtarlar vb.) en az 44x44 punto boyutunda olmal\u0131d\u0131r. Bu, motor engelli veya b\u00fcy\u00fck parmakl\u0131 kullan\u0131c\u0131lar\u0131n \u00f6\u011felere kolayca dokunabilmesini sa\u011flar. Metin boyutlar\u0131 da okunabilirli\u011fi art\u0131rmak i\u00e7in yeterince b\u00fcy\u00fck olmal\u0131d\u0131r.<\/li>\n<\/ul>\n<h4>7.3. Dinamik Tip Deste\u011fi<\/h4>\n<p>Uygulaman\u0131z\u0131n, kullan\u0131c\u0131n\u0131n sistem genelindeki metin boyutu ayarlar\u0131na uyum sa\u011flad\u0131\u011f\u0131ndan emin olun. SwiftUI, <code>.font(.body)<\/code> veya <code>.font(.title)<\/code> gibi metin stilleri kulland\u0131\u011f\u0131n\u0131zda bunu otomatik olarak yapar. Ancak, \u00f6zel fontlar veya sabit boyutlar kullan\u0131yorsan\u0131z, <code>scaledFont<\/code> gibi \u00f6zel modifiyerler veya <code>UIFontMetrics<\/code> kullanarak dinamik tip deste\u011fi sa\u011flaman\u0131z gerekebilir. Bu, g\u00f6rme engelli kullan\u0131c\u0131lar\u0131n metinleri kendi tercihlerine g\u00f6re b\u00fcy\u00fctmesine olanak tan\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>SwiftUI, eri\u015filebilirli\u011fi uygulama geli\u015ftirme s\u00fcrecinin do\u011fal bir par\u00e7as\u0131 haline getirerek, geli\u015ftiricilere g\u00fc\u00e7l\u00fc ve esnek ara\u00e7lar sunar. Eri\u015filebilirlik modifiyerlerini do\u011fru bir \u015fekilde kullanmak, eri\u015filebilirlik a\u011fac\u0131n\u0131 anlamak, \u00f6zel \u00f6\u011feler olu\u015fturmak ve d\u00fczenli testler yapmak, herkesin kullanabilece\u011fi kapsay\u0131c\u0131 uygulamalar olu\u015fturman\u0131n temel ta\u015flar\u0131d\u0131r. Unutmay\u0131n, eri\u015filebilirlik bir \u00f6zellik de\u011fil, bir zorunluluktur ve uygulaman\u0131z\u0131n kalitesini ve eri\u015fimini do\u011frudan etkiler. Bu makalede ele al\u0131nan i\u00e7 yap\u0131lar\u0131 ve en iyi uygulamalar\u0131 benimseyerek, daha iyi bir dijital d\u00fcnya in\u015fa etme yolunda \u00f6nemli bir ad\u0131m atm\u0131\u015f olursunuz.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>SwiftUI'da eri\u015filebilirlik neden \u00f6nemlidir?<\/h4>\n<p>Eri\u015filebilirlik, engelli bireylerin uygulamalar\u0131n\u0131z\u0131 kullanabilmesini sa\u011flayarak daha geni\u015f bir kitleye ula\u015fman\u0131z\u0131, yasal gereklilikleri kar\u015f\u0131laman\u0131z\u0131 ve etik bir sorumlulu\u011fu yerine getirmenizi sa\u011flar. Ayn\u0131 zamanda, iyi tasarlanm\u0131\u015f eri\u015filebilirlik \u00f6zellikleri genellikle t\u00fcm kullan\u0131c\u0131lar i\u00e7in daha iyi bir deneyim sunar.<\/p>\n<h4><code>accessibilityLabel<\/code> ile <code>accessibilityHint<\/code> aras\u0131ndaki fark nedir?<\/h4>\n<p><code>accessibilityLabel<\/code>, bir UI \u00f6\u011fesini tan\u0131mlayan k\u0131sa bir etikettir (\u00f6rn: \"G\u00f6nder butonu\"). <code>accessibilityHint<\/code> ise, \u00f6\u011fenin ne yapaca\u011f\u0131n\u0131 veya nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 a\u00e7\u0131klayan ek bir ipucudur (\u00f6rn: \"Formdaki bilgileri sunucuya g\u00f6nderir.\"). VoiceOver \u00f6nce etiketi, sonra ipucunu okur.<\/p>\n<h4>Eri\u015filebilirlik a\u011fac\u0131n\u0131 nas\u0131l g\u00f6rselle\u015ftirebilirim?<\/h4>\n<p>Xcode ile birlikte gelen \"Accessibility Inspector\" (Eri\u015filebilirlik Denet\u00e7isi) arac\u0131n\u0131 kullanarak uygulaman\u0131z\u0131n eri\u015filebilirlik a\u011fac\u0131n\u0131 g\u00f6rselle\u015ftirebilir ve her bir \u00f6\u011fenin \u00f6zelliklerini (label, value, hint, traits vb.) inceleyebilirsiniz.<\/p>\n<h4>Karma\u015f\u0131k bir g\u00f6r\u00fcn\u00fcm i\u00e7in eri\u015filebilirli\u011fi nas\u0131l sa\u011flar\u0131m?<\/h4>\n<p>Karma\u015f\u0131k g\u00f6r\u00fcn\u00fcmlerde, <code>accessibilityElement(children: .combine)<\/code> ile ilgili \u00f6\u011feleri gruplayabilir veya <code>accessibilityElement(children: .ignore)<\/code> ile varsay\u0131lan gruplamay\u0131 devre d\u0131\u015f\u0131 b\u0131rak\u0131p her bir alt \u00f6\u011feyi ayr\u0131 ayr\u0131 etiketleyip yap\u0131land\u0131rabilirsiniz. <code>accessibilityRepresentation<\/code> kullanarak da karma\u015f\u0131k bir g\u00f6r\u00fcn\u00fcm\u00fcn eri\u015filebilirlik a\u011fac\u0131ndaki temsilini basitle\u015ftirebilirsiniz.<\/p>\n<h4>VoiceOver ile test yaparken nelere dikkat etmeliyim?<\/h4>\n<p>VoiceOver ile test ederken, her \u00f6\u011fenin do\u011fru ve anlaml\u0131 bir \u015fekilde etiketlendi\u011finden, gezinme s\u0131ras\u0131n\u0131n mant\u0131kl\u0131 oldu\u011fundan, etkile\u015fimli \u00f6\u011felerin beklendi\u011fi gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan ve \u00f6zel eylemlerin tetiklendi\u011finden emin olun. Ayr\u0131ca, uygulaman\u0131n farkl\u0131 engelli gruplar\u0131n\u0131n ihtiya\u00e7lar\u0131na yan\u0131t verip vermedi\u011fini de g\u00f6z \u00f6n\u00fcnde bulundurun.<\/p>\n","protected":false},"excerpt":{"rendered":"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek\nSwiftUI, modern ve deklaratif bir UI framework&#8217;\u00fc olarak uygulama geli\u015ftir&#8230;","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-37068","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>SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek\" \/>\n<meta property=\"og:description\" content=\"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek SwiftUI, modern ve deklaratif bir UI framework&#039;\u00fc olarak uygulama geli\u015ftir...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-26T22:00:39+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=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek\",\"datePublished\":\"2025-12-26T22:00:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/\"},\"wordCount\":2480,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/\",\"name\":\"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-26T22:00:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek\"}]},{\"@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":"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/","og_locale":"tr_TR","og_type":"article","og_title":"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek","og_description":"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek SwiftUI, modern ve deklaratif bir UI framework'\u00fc olarak uygulama geli\u015ftir...","og_url":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-26T22:00:39+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek","datePublished":"2025-12-26T22:00:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/"},"wordCount":2480,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/","url":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/","name":"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-26T22:00:39+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/swiftui-erisilebilirlik-ic-yapilari-herkes-icin-uygulamalar-gelistirmek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SwiftUI Eri\u015filebilirlik \u0130\u00e7 Yap\u0131lar\u0131: Herkes \u0130\u00e7in Uygulamalar Geli\u015ftirmek"}]},{"@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\/37068","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=37068"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37068\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}