{"id":44227,"date":"2026-08-21T09:07:26","date_gmt":"2026-08-21T06:07:26","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/"},"modified":"2026-08-21T09:07:49","modified_gmt":"2026-08-21T06:07:49","slug":"mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/","title":{"rendered":"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store&#8217;a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin"},"content":{"rendered":"<h2>Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store&#8217;a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin<\/h2>\n<p>G\u00fcn\u00fcm\u00fczde mobil uygulama geli\u015ftirme d\u00fcnyas\u0131na ad\u0131m atmak isteyen bir\u00e7ok yaz\u0131l\u0131mc\u0131 i\u00e7in en b\u00fcy\u00fck engellerden biri, Apple ekosisteminin getirdi\u011fi donan\u0131m k\u0131s\u0131tlamalar\u0131d\u0131r. \u00d6zellikle iOS uygulamas\u0131 geli\u015ftirmek ve App Store&#8217;a g\u00f6ndermek i\u00e7in bir Mac bilgisayara sahip olmak genellikle bir zorunluluk olarak g\u00f6r\u00fcl\u00fcr. Ancak, y\u00fcksek maliyetli bir Mac yat\u0131r\u0131m\u0131 yapmadan da bu s\u00fcreci ba\u015far\u0131yla tamamlamak m\u00fcmk\u00fcn m\u00fcd\u00fcr? Bu makalede, bu sorunun cevab\u0131n\u0131 GitHub Actions&#8217;\u0131n \u00fccretsiz macOS ko\u015fucular\u0131 (runners) ile nas\u0131l verdi\u011fimizi, ad\u0131m ad\u0131m teknik detaylarla, ger\u00e7ek d\u00fcnya senaryolar\u0131yla ve pratik \u00f6rneklerle ele alaca\u011f\u0131z. Bu sayede, hem b\u00fct\u00e7esini d\u00fc\u015f\u00fcnen geli\u015ftiriciler hem de mevcut CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) s\u00fcre\u00e7lerini optimize etmek isteyenler i\u00e7in kapsaml\u0131 bir rehber sunmay\u0131 hedefliyoruz.<\/p>\n<h3>Mac Sahibi Olmadan iOS Geli\u015ftirmenin Zorluklar\u0131 Nelerdir? Ve \u00c7\u00f6z\u00fcm Yollar\u0131<\/h3>\n<p>iOS uygulama geli\u015ftirme ser\u00fcvenine at\u0131lmak isteyen bir\u00e7ok hevesli yaz\u0131l\u0131mc\u0131 i\u00e7in ilk ve en \u00f6nemli bariyer genellikle donan\u0131m maliyetidir. Apple&#8217;\u0131n geli\u015ftirme ara\u00e7lar\u0131 olan Xcode ve iOS SDK&#8217;s\u0131, do\u011fal olarak sadece macOS i\u015fletim sistemi \u00fczerinde \u00e7al\u0131\u015f\u0131r. Bu durum, Windows veya Linux tabanl\u0131 sistemler kullanan geli\u015ftiriciler i\u00e7in App Store&#8217;a uygulama g\u00f6nderme hayallerini bir Mac sat\u0131n alma zorunlulu\u011fuyla g\u00f6lgeler. Yeni bir Mac bilgisayar\u0131n, \u00f6zellikle de geli\u015ftirme i\u00e7in yeterli performans\u0131 sunan bir modelin, \u00f6nemli bir yat\u0131r\u0131m gerektirmesi, bir\u00e7ok ki\u015fi i\u00e7in cayd\u0131r\u0131c\u0131 olabilir. Bu maliyet engeli, yetenekli geli\u015ftiricilerin Apple ekosistemine dahil olmas\u0131n\u0131 zorla\u015ft\u0131r\u0131rken, ayn\u0131 zamanda mevcut projeler i\u00e7in ek donan\u0131m altyap\u0131s\u0131 kurma y\u00fck\u00fcn\u00fc de beraberinde getirir. Peki, bu durum ger\u00e7ekten bir \u00e7\u0131kmaz sokak m\u0131d\u0131r? Kesinlikle hay\u0131r. Teknoloji d\u00fcnyas\u0131, bu t\u00fcr k\u0131s\u0131tlamalar\u0131 a\u015fmak i\u00e7in s\u00fcrekli yeni \u00e7\u00f6z\u00fcmler \u00fcretmektedir.<\/p>\n<p>Bulut tabanl\u0131 \u00e7\u00f6z\u00fcmler ve otomasyon ara\u00e7lar\u0131, Mac sahibi olma zorunlulu\u011funu ortadan kald\u0131ran g\u00fc\u00e7l\u00fc alternatifler sunar. S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Da\u011f\u0131t\u0131m (CD) yakla\u015f\u0131mlar\u0131, yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerini otomatikle\u015ftirerek, kodun derlenmesinden test edilmesine ve da\u011f\u0131t\u0131lmas\u0131na kadar t\u00fcm ad\u0131mlar\u0131 insan m\u00fcdahalesi olmadan ger\u00e7ekle\u015ftirmeyi ama\u00e7lar. Geleneksel olarak, bu otomasyon s\u00fcre\u00e7leri i\u00e7in de genellikle \u015firket i\u00e7i sunucular veya \u00f6zel donan\u0131mlar kullan\u0131l\u0131rd\u0131. Ancak g\u00fcn\u00fcm\u00fczde, GitHub Actions gibi platformlar, bu CI\/CD yeteneklerini bulut \u00fczerinden, \u00fcstelik belirli bir limit dahilinde \u00fccretsiz olarak sunarak oyunun kurallar\u0131n\u0131 de\u011fi\u015ftirmi\u015ftir. \u00d6zellikle GitHub Actions&#8217;\u0131n sa\u011flad\u0131\u011f\u0131 macOS ko\u015fucular\u0131 (runners), geli\u015ftiricilere kendi Mac&#8217;leri olmadan Xcode ortam\u0131n\u0131 kullanma ve iOS uygulamalar\u0131n\u0131 derleme, test etme ve App Store&#8217;a g\u00f6nderme imkan\u0131 tan\u0131r. Bu sayede, bir Mac sat\u0131n alma maliyeti ve bak\u0131m y\u00fck\u00fc tamamen ortadan kalkar. Geli\u015ftiriciler, sadece kodlar\u0131na odaklanarak, bulutun g\u00fcc\u00fcn\u00fc kullanarak projelerini d\u00fcnyaya a\u00e7abilirler. Bu yakla\u015f\u0131m, hem bireysel geli\u015ftiriciler i\u00e7in bir kurtar\u0131c\u0131 niteli\u011findedir hem de k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli ekiplerin daha \u00e7evik ve maliyet etkin bir \u015fekilde \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131r. Art\u0131k &#8220;Mac&#8217;im yok, iOS uygulamas\u0131 geli\u015ftiremem&#8221; bahanesi ge\u00e7erlili\u011fini yitirmi\u015ftir; \u00e7\u00fcnk\u00fc bulut tabanl\u0131 otomasyon, bu engeli a\u015fmak i\u00e7in g\u00fc\u00e7l\u00fc bir k\u00f6pr\u00fc g\u00f6revi g\u00f6rmektedir. Bu \u00e7\u00f6z\u00fcm, sadece maliyet avantaj\u0131 sa\u011flamakla kalmaz, ayn\u0131 zamanda CI\/CD&#8217;nin getirdi\u011fi kalite, h\u0131z ve g\u00fcvenilirlik gibi faydalar\u0131 da beraberinde getirir.<\/p>\n<h3>GitHub Actions ve \u00dccretsiz macOS Ko\u015fucular\u0131: Temel Kavramlara Giri\u015f<\/h3>\n<p>GitHub Actions, yaz\u0131l\u0131m geli\u015ftirme i\u015f ak\u0131\u015flar\u0131n\u0131 otomatikle\u015ftirmenizi sa\u011flayan, GitHub taraf\u0131ndan sunulan bir S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Da\u011f\u0131t\u0131m (CD) platformudur. Temel olarak, bir depoda (repository) belirli bir olay (\u00f6rne\u011fin, kod g\u00f6nderme, \u00e7ekme iste\u011fi a\u00e7ma) meydana geldi\u011finde otomatik olarak \u00e7al\u0131\u015fan \u00f6zelle\u015ftirilebilir i\u015f ak\u0131\u015flar\u0131 (workflows) tan\u0131mlaman\u0131za olanak tan\u0131r. Bu i\u015f ak\u0131\u015flar\u0131, genellikle YAML format\u0131nda yaz\u0131lan yap\u0131land\u0131rma dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla belirlenir ve bir veya daha fazla i\u015f (job) i\u00e7erir. Her i\u015f, sanal makinelerde (ko\u015fucular\/runners) \u00e7al\u0131\u015ft\u0131r\u0131lan bir dizi ad\u0131mdan (steps) olu\u015fur. GitHub Actions&#8217;\u0131n en dikkat \u00e7ekici \u00f6zelliklerinden biri, farkl\u0131 i\u015fletim sistemlerine sahip ko\u015fucular sunmas\u0131d\u0131r: Linux, Windows ve bizim konumuz i\u00e7in hayati \u00f6nem ta\u015f\u0131yan macOS. Bu macOS ko\u015fucular\u0131, Xcode gibi Apple&#8217;a \u00f6zel geli\u015ftirme ara\u00e7lar\u0131n\u0131 bar\u0131nd\u0131rd\u0131\u011f\u0131 i\u00e7in iOS uygulamalar\u0131n\u0131 derlemek ve test etmek i\u00e7in ideal bir ortam sa\u011flar.<\/p>\n<p>Peki, bu macOS ko\u015fucular\u0131 neden bu kadar \u00f6nemli ve nas\u0131l \u00fccretsiz oluyor? GitHub, a\u00e7\u0131k kaynak projeleri ve bireysel kullan\u0131c\u0131lar i\u00e7in belirli bir limit dahilinde \u00fccretsiz kullan\u0131m s\u00fcresi sunar. Bu limit, genellikle ayda binlerce dakika \u00e7al\u0131\u015fma s\u00fcresi i\u00e7erir ki bu, bir\u00e7ok ba\u011f\u0131ms\u0131z geli\u015ftirici veya k\u00fc\u00e7\u00fck proje i\u00e7in fazlas\u0131yla yeterlidir. Bu ko\u015fucular, GitHub&#8217;\u0131n kendi altyap\u0131s\u0131nda bar\u0131nd\u0131r\u0131lan, \u00f6nceden yap\u0131land\u0131r\u0131lm\u0131\u015f sanal makinelerdir. Yani, bir geli\u015ftirici olarak sizin bir Mac sat\u0131n alman\u0131za, kurman\u0131za veya bak\u0131m\u0131n\u0131 yapman\u0131za gerek kalmaz. Sadece bir <code>.github\/workflows<\/code> dizini alt\u0131nda bir YAML dosyas\u0131 olu\u015fturarak, kodunuzu bu bulut tabanl\u0131 Mac&#8217;lerde \u00e7al\u0131\u015ft\u0131rmalar\u0131n\u0131 s\u00f6ylersiniz. \u0130\u015f ak\u0131\u015f\u0131n\u0131z tetiklendi\u011finde, GitHub bir macOS ko\u015fucusu tahsis eder, projenizi klonlar, gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckler ve sizin tan\u0131mlad\u0131\u011f\u0131n\u0131z ad\u0131mlar\u0131 s\u0131ras\u0131yla y\u00fcr\u00fct\u00fcr. Bu ad\u0131mlar aras\u0131nda Xcode ile uygulamay\u0131 derlemek, testleri \u00e7al\u0131\u015ft\u0131rmak, sertifikalar\u0131 y\u00f6netmek ve hatta App Store Connect&#8217;e (eskiden iTunes Connect) uygulamay\u0131 y\u00fcklemek gibi i\u015flemler yer alabilir. \u00dccretsiz limitin \u00f6tesine ge\u00e7ildi\u011finde ise c\u00fczi miktarlarda \u00f6deme yaparak bu hizmeti kullanmaya devam edebilirsiniz. Bu esneklik ve maliyet etkinli\u011fi, GitHub Actions&#8217;\u0131 Mac sahibi olmayan iOS geli\u015ftiricileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline getirmektedir. Ayr\u0131ca, bu ko\u015fucular genellikle en son Xcode s\u00fcr\u00fcmlerini ve di\u011fer geli\u015ftirme ara\u00e7lar\u0131n\u0131 bar\u0131nd\u0131r\u0131r, bu da g\u00fcncel teknolojilerle \u00e7al\u0131\u015fmay\u0131 kolayla\u015ft\u0131r\u0131r. K\u0131sacas\u0131, GitHub Actions&#8217;\u0131n macOS ko\u015fucular\u0131, cebinizde bir Mac ta\u015f\u0131man\u0131za gerek kalmadan, Apple ekosisteminin kap\u0131lar\u0131n\u0131 aralayan sanal bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Bu, geli\u015ftirme s\u00fcre\u00e7lerini demokratikle\u015ftirir ve daha geni\u015f bir kitleye ula\u015f\u0131labilir k\u0131lar.<\/p>\n<h3>App Store&#8217;a Da\u011f\u0131t\u0131m S\u00fcrecinin Temelleri: Xcode ve Sertifikalar Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>iOS uygulamalar\u0131n\u0131 App Store&#8217;a g\u00f6nderme s\u00fcreci, otomasyona ge\u00e7meden \u00f6nce anla\u015f\u0131lmas\u0131 gereken birka\u00e7 temel bile\u015fene dayan\u0131r. Bu bile\u015fenler, Apple&#8217;\u0131n g\u00fcvenlik ve kalite standartlar\u0131n\u0131 sa\u011flamak i\u00e7in tasarlanm\u0131\u015ft\u0131r ve her geli\u015ftiricinin bilmesi gereken \u00f6nemli ad\u0131mlard\u0131r. \u0130lk olarak, bir Apple Developer Program \u00fcyeli\u011fi olmazsa olmazd\u0131r. Y\u0131ll\u0131k belirli bir \u00fccret kar\u015f\u0131l\u0131\u011f\u0131nda bu programa kaydoldu\u011funuzda, uygulamalar\u0131n\u0131z\u0131 test cihazlar\u0131na y\u00fckleme, App Store&#8217;a g\u00f6nderme ve \u00e7e\u015fitli geli\u015ftirici ara\u00e7lar\u0131na eri\u015fim yetene\u011fi kazan\u0131rs\u0131n\u0131z. Bu \u00fcyelik, sertifika ve profil y\u00f6netimi i\u00e7in temel bir \u00f6n ko\u015fuldur.<\/p>\n<p>Sertifikalar, Apple&#8217;\u0131n geli\u015ftirici kimli\u011finizi ve uygulaman\u0131z\u0131n ger\u00e7ekli\u011fini do\u011frulamak i\u00e7in kulland\u0131\u011f\u0131 dijital imzalard\u0131r. \u0130ki ana sertifika t\u00fcr\u00fc vard\u0131r:<\/p>\n<ol>\n<li><strong>Geli\u015ftirme Sertifikas\u0131 (Development Certificate):<\/strong> Uygulamalar\u0131 fiziksel iOS cihazlar\u0131nda test etmek i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>Da\u011f\u0131t\u0131m Sertifikas\u0131 (Distribution Certificate):<\/strong> Uygulamalar\u0131 App Store&#8217;a veya kurumsal ortamlara da\u011f\u0131tmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<\/ol>\n<p>Bu sertifikalar, bir anahtar \u00e7ifti (public ve private key) i\u00e7erir ve genellikle yerel Mac&#8217;inizdeki Anahtar Zinciri Eri\u015fimi (Keychain Access) uygulamas\u0131 arac\u0131l\u0131\u011f\u0131yla y\u00f6netilir. Ancak Mac&#8217;imiz olmad\u0131\u011f\u0131 i\u00e7in bu sertifikalar\u0131 otomasyon ortam\u0131nda nas\u0131l y\u00f6netece\u011fimiz kritik bir sorudur.<\/p>\n<p>Provisioning Profilleri (Sa\u011flama Profilleri), bir uygulaman\u0131n belirli bir cihazda (geli\u015ftirme profilleri i\u00e7in) veya belirli bir da\u011f\u0131t\u0131m y\u00f6ntemiyle (da\u011f\u0131t\u0131m profilleri i\u00e7in) \u00e7al\u0131\u015fmas\u0131na izin veren dosyalard\u0131r. Bir provisioning profili \u015funlar\u0131 i\u00e7erir:<\/p>\n<ul>\n<li>Bir veya daha fazla geli\u015ftirme\/da\u011f\u0131t\u0131m sertifikas\u0131.<\/li>\n<li>Uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131na izin verilen cihazlar\u0131n listesi (geli\u015ftirme profilleri i\u00e7in).<\/li>\n<li>Uygulaman\u0131n kullanabilece\u011fi belirli yetenekler (capabilities) veya hizmetler (\u00f6rne\u011fin, Push Bildirimleri, iCloud, Uygulama Gruplar\u0131).<\/li>\n<li>Uygulama Kimli\u011fi (App ID): Uygulaman\u0131z\u0131 benzersiz \u015fekilde tan\u0131mlayan bir dize (\u00f6rne\u011fin, <code>com.sirketim.uygulamam<\/code>).<\/li>\n<\/ul>\n<p>Xcode, bu sertifikalar\u0131 ve profilleri kullanarak uygulaman\u0131z\u0131 imzalar ve derler. Uygulaman\u0131z\u0131n ba\u015far\u0131l\u0131 bir \u015fekilde App Store&#8217;a g\u00f6nderilebilmesi i\u00e7in do\u011fru da\u011f\u0131t\u0131m sertifikas\u0131 ve provisioning profili ile imzalanm\u0131\u015f olmas\u0131 gerekir. Otomasyon ortam\u0131nda, bu sertifika ve profillerin g\u00fcvenli bir \u015fekilde GitHub Actions ko\u015fucusuna sa\u011flanmas\u0131 ve Xcode&#8217;un bunlar\u0131 kullanacak \u015fekilde yap\u0131land\u0131r\u0131lmas\u0131 gerekmektedir. Bu genellikle, sertifikalar\u0131n ve \u00f6zel anahtarlar\u0131n \u015fifrelenmi\u015f bir \u015fekilde depolanmas\u0131 ve i\u015f ak\u0131\u015f\u0131 s\u0131ras\u0131nda ge\u00e7ici olarak sisteme y\u00fcklenmesiyle yap\u0131l\u0131r. Fastlane gibi ara\u00e7lar, bu karma\u015f\u0131k s\u00fcreci b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirerek, sertifika ve profil y\u00f6netimini otomatize etmemize yard\u0131mc\u0131 olur. Bu temel bilgileri anlad\u0131ktan sonra, Mac&#8217;siz da\u011f\u0131t\u0131m s\u00fcrecinin teknik ad\u0131mlar\u0131n\u0131 daha net bir \u015fekilde kavrayabiliriz. Bu s\u00fcre\u00e7ler, Apple&#8217;\u0131n g\u00fcvenlik ve ekosistem b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flama mekanizmalar\u0131n\u0131n temelini olu\u015fturur ve do\u011fru \u015fekilde y\u00f6netilmeleri, ba\u015far\u0131l\u0131 bir uygulama yay\u0131nlama i\u00e7in \u015fartt\u0131r.<\/p>\n<h3>GitHub Actions \u0130\u015f Ak\u0131\u015f\u0131 Olu\u015fturma: Ad\u0131m Ad\u0131m Rehber<\/h3>\n<p>GitHub Actions ile Mac olmadan iOS uygulaman\u0131z\u0131 App Store&#8217;a g\u00f6ndermenin ilk ve en kritik ad\u0131m\u0131, do\u011fru bir i\u015f ak\u0131\u015f\u0131 (workflow) dosyas\u0131 olu\u015fturmakt\u0131r. Bu dosya, projenizin k\u00f6k dizininde <code>.github\/workflows<\/code> klas\u00f6r\u00fcn\u00fcn i\u00e7ine yerle\u015ftirilir ve genellikle <code>main.yml<\/code> veya <code>ci.yml<\/code> gibi bir isim al\u0131r. \u0130\u015f ak\u0131\u015f\u0131 dosyas\u0131, projeniz \u00fczerinde hangi i\u015flemlerin, ne zaman ve hangi ko\u015fullar alt\u0131nda yap\u0131laca\u011f\u0131n\u0131 tan\u0131mlayan bir YAML dosyas\u0131d\u0131r. A\u015fa\u011f\u0131da, temel bir iOS da\u011f\u0131t\u0131m i\u015f ak\u0131\u015f\u0131 i\u00e7in ad\u0131m ad\u0131m bir rehber ve kod \u00f6rne\u011fi bulunmaktad\u0131r.<\/p>\n<p>\u00d6ncelikle, i\u015f ak\u0131\u015f\u0131n\u0131z\u0131n ne zaman tetiklenece\u011fini belirtmelisiniz. Genellikle bu, <code>push<\/code> (koda yap\u0131lan de\u011fi\u015fiklikler g\u00f6nderildi\u011finde) veya <code>pull_request<\/code> (\u00e7ekme iste\u011fi a\u00e7\u0131ld\u0131\u011f\u0131nda) olaylar\u0131d\u0131r.<\/p>\n<pre><code class=\"language-yaml\">name: iOS App Store Da\u011f\u0131t\u0131m\u0131\n\non:\n  push:\n    branches:\n      - main # main branch&#039;ine push yap\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\n\njobs:\n  build-and-deploy:\n    runs-on: macos-latest # macOS ko\u015fucusu kullan\n    \n    steps:\n    - name: Depoyu Klonla\n      uses: actions\/checkout@v4 # Projeyi ko\u015fucuya klonla\n\n    - name: Ruby Kurulumu ve Fastlane Ba\u011f\u0131ml\u0131l\u0131klar\u0131\n      uses: ruby\/setup-ruby@v1\n      with:\n        ruby-version: &#039;3.x&#039; # Projenizin ihtiyac\u0131na g\u00f6re Ruby s\u00fcr\u00fcm\u00fcn\u00fc ayarlay\u0131n\n        bundler-cache: true # Gemfile.lock varsa ba\u011f\u0131ml\u0131l\u0131klar\u0131 \u00f6nbelle\u011fe al\u0131r\n    \n    - name: Cocoapods Kurulumu\n      run: |\n        gem install cocoapods\n        cd iOSAppKlasoru # Projenizin iOS klas\u00f6r\u00fcne gidin\n        pod install --repo-update # Pod ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fckle\n      \n    - name: Sertifika ve Profil Y\u00f6netimi (Fastlane match kullan\u0131l\u0131yorsa)\n      env:\n        FASTLANE_USER: ${{ secrets.FASTLANE_USER }} # App Store Connect kullan\u0131c\u0131 ad\u0131\n        FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }} # App Store Connect \u015fifresi\n        MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} # match \u015fifresi (varsa)\n        # Di\u011fer gerekli ortam de\u011fi\u015fkenleri\n      run: |\n        cd iOSAppKlasoru\n        bundle exec fastlane match appstore --readonly # Mevcut sertifikalar\u0131 indir\n        # Alternatif olarak, sertifikalar\u0131 manuel olarak y\u00fckleyebilirsiniz:\n        # echo &quot;${{ secrets.P12_BASE64 }}&quot; | base64 --decode &gt; Certificates.p12\n        # security import Certificates.p12 -k ~\/Library\/Keychains\/login.keychain -P ${{ secrets.P12_PASSWORD }} -A\n        # mkdir -p ~\/Library\/MobileDevice\/Provisioning\\ Profiles\/\n        # echo &quot;${{ secrets.PROVISIONING_PROFILE_BASE64 }}&quot; | base64 --decode &gt; ~\/Library\/MobileDevice\/Provisioning\\ Profiles\/YourProfile.mobileprovision\n\n    - name: Uygulamay\u0131 Derle (Fastlane gym kullan\u0131l\u0131yorsa)\n      env:\n        FASTLANE_USER: ${{ secrets.FASTLANE_USER }}\n        FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}\n        APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}\n        APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}\n        APP_STORE_CONNECT_API_KEY_BASE64: ${{ secrets.APP_STORE_CONNECT_API_KEY_BASE64 }} # .p8 dosyas\u0131n\u0131n base64 hali\n      run: |\n        cd iOSAppKlasoru\n        bundle exec fastlane beta # Fastfile&#039;daki beta lane&#039;ini \u00e7al\u0131\u015ft\u0131r (genellikle derleme ve test i\u00e7erir)\n        # Veya do\u011frudan gym kullan\u0131n:\n        # bundle exec fastlane gym --scheme &quot;YourAppScheme&quot; --configuration &quot;Release&quot; --export_method appstore --output_directory build\n        \n    - name: Testleri \u00c7al\u0131\u015ft\u0131r (\u0130ste\u011fe Ba\u011fl\u0131)\n      run: |\n        cd iOSAppKlasoru\n        bundle exec fastlane scan # Fastfile&#039;daki test lane&#039;ini \u00e7al\u0131\u015ft\u0131r\n        # Veya do\u011frudan Xcodebuild ile:\n        # xcodebuild test -workspace &quot;YourApp.xcworkspace&quot; -scheme &quot;YourAppScheme&quot; -destination &quot;platform=iOS Simulator,name=iPhone 15&quot;\n\n    - name: App Store Connect&#039;e Y\u00fckle (Fastlane deliver kullan\u0131l\u0131yorsa)\n      env:\n        FASTLANE_USER: ${{ secrets.FASTLANE_USER }}\n        FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}\n        APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}\n        APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}\n        APP_STORE_CONNECT_API_KEY_BASE64: ${{ secrets.APP_STORE_CONNECT_API_KEY_BASE64 }}\n      run: |\n        cd iOSAppKlasoru\n        bundle exec fastlane deploy # Fastfile&#039;daki deploy lane&#039;ini \u00e7al\u0131\u015ft\u0131r (genellikle deliver i\u00e7erir)\n        # Veya do\u011frudan deliver kullan\u0131n:\n        # bundle exec fastlane deliver --force --submit_for_review true --automatic_release true\n\n    - name: Yap\u0131tlar\u0131 Y\u00fckle (\u0130ste\u011fe Ba\u011fl\u0131)\n      uses: actions\/upload-artifact@v4\n      with:\n        name: iOS-App-Build\n        path: iOSAppKlasoru\/build\/*.ipa # Olu\u015fan IPA dosyas\u0131n\u0131 sakla<\/code><\/pre>\n<p>Bu \u00f6rnek i\u015f ak\u0131\u015f\u0131, temel ad\u0131mlar\u0131 g\u00f6stermektedir. Her <code>step<\/code> (ad\u0131m), bir <code>name<\/code> (isim) ve bir <code>run<\/code> (\u00e7al\u0131\u015ft\u0131r\u0131lacak komut) veya <code>uses<\/code> (mevcut bir GitHub Action&#8217;\u0131 kullan) anahtar\u0131na sahiptir. <code>runs-on: macos-latest<\/code> ifadesi, i\u015fin en g\u00fcncel macOS ko\u015fucusunda \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir. <code>env<\/code> anahtar\u0131 alt\u0131nda, hassas bilgileri do\u011frudan dosyaya yazmak yerine GitHub Secrets (s\u0131rlar) kullanarak ortam de\u011fi\u015fkenleri tan\u0131mlar\u0131z. Bu s\u0131rlar, GitHub deponuzun ayarlar\u0131nda g\u00fcvenli bir \u015fekilde saklan\u0131r ve i\u015f ak\u0131\u015f\u0131 s\u0131ras\u0131nda \u00e7a\u011fr\u0131l\u0131r. \u00d6zellikle <code>FASTLANE_USER<\/code>, <code>FASTLANE_PASSWORD<\/code> ve App Store Connect API anahtarlar\u0131 gibi bilgiler bu \u015fekilde korunmal\u0131d\u0131r. <code>cd iOSAppKlasoru<\/code> komutu, projenizin iOS uygulama kodunu i\u00e7eren dizine ge\u00e7mek i\u00e7in kullan\u0131l\u0131r. Bu dizin ad\u0131 projenize g\u00f6re de\u011fi\u015fecektir. <code>bundle exec fastlane<\/code> komutlar\u0131, Fastlane ara\u00e7lar\u0131n\u0131 kullanarak derleme, test ve da\u011f\u0131t\u0131m i\u015flemlerini otomatikle\u015ftirmeyi sa\u011flar. Bu yap\u0131land\u0131rma ile Mac&#8217;iniz olmadan bulut \u00fczerinde iOS uygulaman\u0131z\u0131 ba\u015far\u0131l\u0131 bir \u015fekilde derleyebilir ve App Store&#8217;a g\u00f6nderme s\u00fcrecinin temelini atm\u0131\u015f olursunuz. Her ad\u0131m\u0131n detayl\u0131 \u00e7\u0131kt\u0131s\u0131n\u0131 GitHub Actions aray\u00fcz\u00fcnden takip edebilir, olas\u0131 hatalar\u0131 tespit edip giderebilirsiniz.<\/p>\n<h3>Otomatik Derleme ve Test S\u00fcre\u00e7leri: G\u00fcvenilir Bir CI Altyap\u0131s\u0131 Kurmak<\/h3>\n<p>Otomatik derleme ve test s\u00fcre\u00e7leri, herhangi bir CI\/CD hatt\u0131n\u0131n kalbidir ve \u00f6zellikle Mac olmadan iOS uygulamalar\u0131 geli\u015ftirirken hayati \u00f6neme sahiptir. Bu s\u00fcre\u00e7ler, kodunuzdaki hatalar\u0131 erken a\u015famada yakalaman\u0131z\u0131, uygulaman\u0131z\u0131n kalitesini art\u0131rman\u0131z\u0131 ve yay\u0131nlama s\u00fcrecini h\u0131zland\u0131rman\u0131z\u0131 sa\u011flar. GitHub Actions&#8217;\u0131n macOS ko\u015fucular\u0131 \u00fczerinde bu ad\u0131mlar\u0131 yap\u0131land\u0131rmak, g\u00fcvenilir ve tekrarlanabilir bir geli\u015ftirme ak\u0131\u015f\u0131 olu\u015fturman\u0131n anahtar\u0131d\u0131r.<\/p>\n<p>Derleme (Build) Ad\u0131m\u0131: Uygulaman\u0131z\u0131n kaynak kodunu, \u00e7al\u0131\u015ft\u0131r\u0131labilir bir ikili dosyaya (genellikle bir <code>.ipa<\/code> dosyas\u0131) d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemidir. Bu ad\u0131mda Xcode, projenizin t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 \u00e7\u00f6zer, kodunuzu derler ve uygulamay\u0131 imzalar. GitHub Actions i\u015f ak\u0131\u015f\u0131n\u0131zda bu ad\u0131m\u0131 genellikle Fastlane&#8217;in <code>gym<\/code> arac\u0131yla otomatikle\u015ftiririz. <code>gym<\/code>, Xcode&#8217;un <code>xcodebuild<\/code> komutunu saran ve derleme s\u00fcrecini \u00e7ok daha basit hale getiren bir Fastlane arac\u0131d\u0131r.<\/p>\n<p>\u00d6rnek bir <code>Fastfile<\/code> (Fastlane yap\u0131land\u0131rma dosyas\u0131) i\u00e7inde <code>build_app<\/code> lane&#8217;i \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<pre><code class=\"language-ruby\">lane :build_app do\n  increment_build_number(xcodeproj: &quot;YourApp.xcodeproj&quot;) # \u0130ste\u011fe ba\u011fl\u0131: Her derlemede build numaras\u0131n\u0131 art\u0131r\n  gym(\n    workspace: &quot;YourApp.xcworkspace&quot;, # E\u011fer Cocoapods kullan\u0131yorsan\u0131z .xcworkspace\n    scheme: &quot;YourAppScheme&quot;,\n    configuration: &quot;Release&quot;,\n    export_method: &quot;appstore&quot;, # App Store i\u00e7in da\u011f\u0131t\u0131m metodu\n    output_directory: &quot;build&quot;, # IPA dosyas\u0131n\u0131n kaydedilece\u011fi dizin\n    output_name: &quot;YourApp&quot; # IPA dosyas\u0131n\u0131n ad\u0131\n  )\nend<\/code><\/pre>\n<p>Bu <code>build_app<\/code> lane&#8217;ini GitHub Actions i\u015f ak\u0131\u015f\u0131n\u0131zda <code>bundle exec fastlane build_app<\/code> komutuyla \u00e7a\u011f\u0131rabilirsiniz. Derleme s\u0131ras\u0131nda, ko\u015fucuda do\u011fru Xcode s\u00fcr\u00fcm\u00fcn\u00fcn se\u00e7ildi\u011finden (genellikle <code>xcode-select -s \/Applications\/Xcode.app\/Contents\/Developer<\/code> ile otomatik olarak yap\u0131l\u0131r) ve t\u00fcm sertifikalar\u0131n ve provisioning profillerinin do\u011fru \u015fekilde y\u00fcklendi\u011finden emin olmal\u0131s\u0131n\u0131z.<\/p>\n<p>Test Ad\u0131m\u0131: Derleme ba\u015far\u0131l\u0131 olduktan sonra, uygulaman\u0131z\u0131n beklenen \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in testlerin \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 gerekir. Bu, birim testleri (unit tests) ve kullan\u0131c\u0131 aray\u00fcz\u00fc testleri (UI tests) i\u00e7erebilir. Otomatik testler, regresyon hatalar\u0131n\u0131 yakalaman\u0131n ve kod kalitesini s\u00fcrd\u00fcrmenin en etkili yoludur. Fastlane&#8217;in <code>scan<\/code> arac\u0131, bu s\u00fcreci otomatikle\u015ftirmek i\u00e7in m\u00fckemmeldir.<\/p>\n<p>\u00d6rnek bir <code>Fastfile<\/code> i\u00e7inde <code>run_tests<\/code> lane&#8217;i:<\/p>\n<pre><code class=\"language-ruby\">lane :run_tests do\n  scan(\n    workspace: &quot;YourApp.xcworkspace&quot;,\n    scheme: &quot;YourAppScheme&quot;,\n    destination: &quot;platform=iOS Simulator,name=iPhone 15&quot;, # Testlerin \u00e7al\u0131\u015faca\u011f\u0131 sim\u00fclat\u00f6r\n    output_directory: &quot;test_output&quot;,\n    output_types: &quot;html,junit&quot;, # Test sonu\u00e7lar\u0131n\u0131 farkl\u0131 formatlarda kaydet\n    clean: true\n  )\nend<\/code><\/pre>\n<p>GitHub Actions i\u015f ak\u0131\u015f\u0131n\u0131zda bu lane&#8217;i <code>bundle exec fastlane run_tests<\/code> ile \u00e7a\u011f\u0131rabilirsiniz. Test sonu\u00e7lar\u0131n\u0131 HTML veya JUnit format\u0131nda kaydederek, GitHub Actions aray\u00fcz\u00fcnde daha okunabilir bir raporlama elde edebilirsiniz.<\/p>\n<p>\u00d6nbellekleme (Caching): Her derlemede ba\u011f\u0131ml\u0131l\u0131klar\u0131 (Cocoapods podlar\u0131 gibi) s\u0131f\u0131rdan indirmek zaman al\u0131c\u0131 ve kota t\u00fcketici olabilir. GitHub Actions&#8217;\u0131n \u00f6nbellekleme (caching) \u00f6zelli\u011fi sayesinde, daha \u00f6nce indirilen ba\u011f\u0131ml\u0131l\u0131klar\u0131 sonraki \u00e7al\u0131\u015ft\u0131rmalar i\u00e7in saklayabilir ve derleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131saltabilirsiniz.<\/p>\n<pre><code class=\"language-yaml\">- name: Cocoapods \u00d6nbelle\u011fini Y\u00fckle\n  uses: actions\/cache@v4\n  with:\n    path: Pods # \u00d6nbelle\u011fe al\u0131nacak dizin\n    key: ${{ runner.os }}-pods-${{ hashFiles(&#039;**\/Podfile.lock&#039;) }} # Anahtar, Podfile.lock de\u011fi\u015fti\u011finde \u00f6nbelle\u011fi ge\u00e7ersiz k\u0131lar\n    restore-keys: |\n      ${{ runner.os }}-pods-\n\n- name: Cocoapods Kurulumu\n  run: |\n    cd iOSAppKlasoru\n    pod install --repo-update # E\u011fer \u00f6nbellekte yoksa veya de\u011fi\u015ftiyse yeniden y\u00fckle<\/code><\/pre>\n<p>Bu ad\u0131mlar, Mac olmadan bulut tabanl\u0131 bir CI\/CD ortam\u0131nda iOS uygulaman\u0131z i\u00e7in sa\u011flam bir derleme ve test altyap\u0131s\u0131 olu\u015fturman\u0131z\u0131 sa\u011flar. G\u00fcvenilir testler ve h\u0131zl\u0131 derlemeler, geli\u015ftirme s\u00fcrecinizin verimlili\u011fini art\u0131r\u0131rken, son kullan\u0131c\u0131ya daha kaliteli bir \u00fcr\u00fcn sunman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<h3>Fastlane ile App Store Connect&#8217;e Da\u011f\u0131t\u0131m\u0131n Otomatikle\u015ftirilmesi<\/h3>\n<p>Fastlane, iOS ve Android uygulamalar\u0131n\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 otomatikle\u015ftirmek i\u00e7in tasarlanm\u0131\u015f a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7 setidir. Mac olmadan App Store&#8217;a uygulama g\u00f6nderme s\u00fcrecinde Fastlane, sertifika ve provisioning profili y\u00f6netiminden derlemeye, ekran g\u00f6r\u00fcnt\u00fcs\u00fc \u00e7ekmekten App Store Connect&#8217;e y\u00fcklemeye kadar her ad\u0131m\u0131 basitle\u015ftirir. GitHub Actions ile Fastlane&#8217;i birle\u015ftirmek, manuel s\u00fcre\u00e7lerin getirdi\u011fi zaman kayb\u0131n\u0131 ve hata riskini ortadan kald\u0131r\u0131r.<\/p>\n<p>Fastlane&#8217;i kullanmaya ba\u015flamak i\u00e7in projenizin k\u00f6k dizininde <code>Fastfile<\/code> ve <code>Appfile<\/code> ad\u0131nda iki ana dosya olu\u015fturman\u0131z gerekir. <code>Fastfile<\/code>, da\u011f\u0131t\u0131m i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 tan\u0131mlayan Ruby kodunu i\u00e7erirken, <code>Appfile<\/code> uygulaman\u0131z\u0131n App Store Connect kimli\u011fini ve bundle ID&#8217;sini bar\u0131nd\u0131r\u0131r.<\/p>\n<p><strong>1. Fastlane Kurulumu:<\/strong><br \/>\nProjenizin k\u00f6k dizininde <code>Gemfile<\/code> olu\u015fturun ve i\u00e7ine Fastlane&#8217;i ekleyin:<\/p>\n<pre><code class=\"language-ruby\">source &quot;https:\/\/rubygems.org&quot;\n\ngem &quot;fastlane&quot;<\/code><\/pre>\n<p>Ard\u0131ndan, terminalde <code>bundle install<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak Fastlane&#8217;i y\u00fckleyin.<\/p>\n<p><strong>2. Appfile Yap\u0131land\u0131rmas\u0131:<\/strong><br \/>\n<code>Appfile<\/code> dosyan\u0131zda uygulaman\u0131z\u0131n temel bilgilerini belirtin:<\/p>\n<pre><code class=\"language-ruby\">app_identifier &quot;com.sirketiniz.uygulamaniz&quot; # Uygulaman\u0131z\u0131n Bundle ID&#039;si\napple_id &quot;your_apple_id@example.com&quot; # Apple Developer hesab\u0131n\u0131z\u0131n e-posta adresi\nteam_id &quot;YOUR_TEAM_ID&quot; # Apple Developer Team ID&#039;niz (App Store Connect&#039;ten bulabilirsiniz)<\/code><\/pre>\n<p><strong>3. Fastfile ile Sertifika ve Profil Y\u00f6netimi (match):<\/strong><br \/>\n<code>match<\/code>, Fastlane&#8217;in sertifika ve provisioning profillerini git deposunda \u015fifreli bir \u015fekilde merkezi olarak y\u00f6netmenizi sa\u011flayan arac\u0131d\u0131r. Bu, birden fazla geli\u015ftirici veya CI\/CD ortam\u0131 i\u00e7in sertifika y\u00f6netimini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir.<\/p>\n<p><code>Fastfile<\/code> i\u00e7inde <code>match<\/code> kullan\u0131m\u0131:<\/p>\n<pre><code class=\"language-ruby\">lane :setup_certificates do\n  match(type: &quot;appstore&quot;, # App Store da\u011f\u0131t\u0131m\u0131 i\u00e7in sertifika ve profil\n        git_url: &quot;https:\/\/github.com\/your-org\/certs.git&quot;, # Sertifikalar\u0131n sakland\u0131\u011f\u0131 \u00f6zel git deposu\n        readonly: true) # Sadece oku modunda, CI\/CD ortam\u0131nda yeni sertifika olu\u015fturmaz\nend<\/code><\/pre>\n<p>Bu ad\u0131mda, <code>MATCH_PASSWORD<\/code> ve <code>FASTLANE_USER<\/code>, <code>FASTLANE_PASSWORD<\/code> gibi ortam de\u011fi\u015fkenlerini GitHub Secrets olarak tan\u0131mlaman\u0131z gerekecektir. <code>match<\/code> \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, belirtilen git deposundan \u015fifrelenmi\u015f sertifikalar\u0131 ve profilleri indirir, \u015fifresini \u00e7\u00f6zer ve ko\u015fucuya y\u00fckler. <code>readonly: true<\/code> parametresi, CI ortam\u0131nda yeni sertifikalar\u0131n yanl\u0131\u015fl\u0131kla olu\u015fturulmas\u0131n\u0131 engeller.<\/p>\n<p><strong>4. App Store Connect&#8217;e Y\u00fckleme (deliver):<\/strong><br \/>\nUygulaman\u0131z derlendikten ve imzaland\u0131ktan sonra, <code>deliver<\/code> arac\u0131 App Store Connect&#8217;e y\u00fckleme i\u015flemini ger\u00e7ekle\u015ftirir. Bu ara\u00e7, IPA dosyas\u0131n\u0131, meta verileri (uygulama ad\u0131, a\u00e7\u0131klama, anahtar kelimeler vb.) ve ekran g\u00f6r\u00fcnt\u00fclerini App Store Connect&#8217;e g\u00f6nderir.<\/p>\n<p><code>Fastfile<\/code> i\u00e7inde <code>deploy_to_app_store<\/code> lane&#8217;i:<\/p>\n<pre><code class=\"language-ruby\">lane :deploy_to_app_store do\n  # \u00d6nceki ad\u0131mlarda uygulaman\u0131n derlendi\u011finden emin olun (\u00f6rne\u011fin gym ile)\n  # gym(scheme: &quot;YourAppScheme&quot;, configuration: &quot;Release&quot;, export_method: &quot;appstore&quot;)\n\n  deliver(\n    force: true, # Meta verilerde de\u011fi\u015fiklik yoksa bile zorla y\u00fckle\n    submit_for_review: true, # Otomatik olarak incelemeye g\u00f6nder\n    automatic_release: true, # Apple onaylad\u0131ktan sonra otomatik yay\u0131nla\n    # metadata_path: &quot;.\/fastlane\/metadata&quot;, # Meta verilerin bulundu\u011fu klas\u00f6r\n    # screenshots_path: &quot;.\/fastlane\/screenshots&quot;, # Ekran g\u00f6r\u00fcnt\u00fclerinin bulundu\u011fu klas\u00f6r\n    api_key: app_store_connect_api_key # API anahtar\u0131 ile kimlik do\u011frulama\n  )\nend<\/code><\/pre>\n<p><code>deliver<\/code> kullan\u0131rken, Apple ID ve \u015fifre yerine App Store Connect API Anahtar\u0131 (API Key) kullanmak \u00e7ok daha g\u00fcvenli ve tavsiye edilen bir y\u00f6ntemdir. Bu anahtar, App Store Connect&#8217;ten olu\u015fturulur ve bir <code>.p8<\/code> uzant\u0131l\u0131 dosya olarak indirilir. Bu <code>.p8<\/code> dosyas\u0131n\u0131n i\u00e7eri\u011fini base64 ile kodlay\u0131p GitHub Secret olarak saklayabilir ve Fastlane&#8217;e a\u015fa\u011f\u0131daki gibi ge\u00e7irebilirsiniz:<\/p>\n<pre><code class=\"language-ruby\"># Fastfile i\u00e7inde\ndef app_store_connect_api_key\n  @app_store_connect_api_key ||= begin\n    api_key_base64 = ENV[&quot;APP_STORE_CONNECT_API_KEY_BASE64&quot;]\n    api_key_content = Base64.decode64(api_key_base64)\n\n    Fastlane::AppStoreConnect::Api.for_key(\n      key_id: ENV[&quot;APP_STORE_CONNECT_API_KEY_ID&quot;],\n      issuer_id: ENV[&quot;APP_STORE_CONNECT_API_KEY_ISSUER_ID&quot;],\n      key_content: api_key_content\n    )\n  end\nend<\/code><\/pre>\n<p>GitHub Actions i\u015f ak\u0131\u015f\u0131n\u0131zda bu lane&#8217;i <code>bundle exec fastlane deploy_to_app_store<\/code> komutuyla \u00e7a\u011f\u0131rabilirsiniz. Fastlane, bu komutla uygulaman\u0131z\u0131 App Store Connect&#8217;e ba\u015far\u0131l\u0131 bir \u015fekilde y\u00fckleyecek ve iste\u011fe ba\u011fl\u0131 olarak incelemeye g\u00f6nderecektir. Bu otomasyon, Mac olmadan iOS uygulamalar\u0131n\u0131 App Store&#8217;a g\u00f6nderme s\u00fcrecini son derece verimli ve g\u00fcvenilir hale getirir.<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri: Hata Ay\u0131klama \u0130pu\u00e7lar\u0131<\/h3>\n<p>Mac olmadan GitHub Actions \u00fczerinde iOS uygulama da\u011f\u0131t\u0131m\u0131 yaparken, \u00e7e\u015fitli sorunlarla kar\u015f\u0131la\u015fmak olas\u0131d\u0131r. Bu sorunlar genellikle sertifika y\u00f6netiminden ortam yap\u0131land\u0131rmas\u0131na, ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131ndan Fastlane hatalar\u0131na kadar geni\u015f bir yelpazede yer alabilir. \u0130\u015fte s\u0131k kar\u015f\u0131la\u015f\u0131lan baz\u0131 sorunlar ve bunlara y\u00f6nelik \u00e7\u00f6z\u00fcm ipu\u00e7lar\u0131:<\/p>\n<p><strong>1. Sertifika ve Provisioning Profili Hatalar\u0131:<\/strong><br \/>\n*   <strong>Sorun:<\/strong> &#8220;No signing identity found&#8221; (\u0130mzalama kimli\u011fi bulunamad\u0131) veya &#8220;Provisioning profile doesn&#8217;t match&#8221; (Provisioning profili e\u015fle\u015fmiyor) gibi hatalar.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n    *   <code>match<\/code> kullan\u0131yorsan\u0131z, <code>match<\/code> deposunun do\u011fru oldu\u011fundan ve <code>readonly: true<\/code> modunda bile sertifikalar\u0131n ba\u015far\u0131l\u0131 bir \u015fekilde indirildi\u011finden emin olun.<br \/>\n    *   <code>MATCH_PASSWORD<\/code>, <code>FASTLANE_USER<\/code>, <code>FASTLANE_PASSWORD<\/code> gibi GitHub Secrets&#8217;\u0131n do\u011fru ve g\u00fcncel oldu\u011fundan emin olun.<br \/>\n    *   <code>match<\/code> komutunu <code>bundle exec fastlane match appstore --force --readonly<\/code> ile \u00e7al\u0131\u015ft\u0131rarak sertifikalar\u0131 yeniden indirmeyi deneyin.<br \/>\n    *   App Store Connect&#8217;teki sertifikalar\u0131n s\u00fcresinin dolmad\u0131\u011f\u0131ndan ve provisioning profillerinin ge\u00e7erli oldu\u011fundan emin olun. Bazen profilleri manuel olarak yenilemek gerekebilir.<br \/>\n    *   Xcode projenizin &#8220;Signing &#038; Capabilities&#8221; ayarlar\u0131nda &#8220;Automatically manage signing&#8221; se\u00e7ene\u011finin kapal\u0131 oldu\u011fundan ve Fastlane&#8217;in kulland\u0131\u011f\u0131 profilleri bekledi\u011finden emin olun.<\/p>\n<p><strong>2. Ba\u011f\u0131ml\u0131l\u0131k Y\u00fckleme Sorunlar\u0131 (Cocoapods, Ruby Gems):<\/strong><br \/>\n*   <strong>Sorun:<\/strong> <code>pod install<\/code> veya <code>bundle install<\/code> komutlar\u0131 s\u0131ras\u0131nda hatalar, &#8220;command not found&#8221; (komut bulunamad\u0131) mesajlar\u0131.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n    *   Ruby s\u00fcr\u00fcm\u00fcn\u00fcn do\u011fru kuruldu\u011fundan emin olun. <code>ruby\/setup-ruby@v1<\/code> Action&#8217;\u0131n\u0131 kullan\u0131rken <code>ruby-version<\/code> parametresini kontrol edin.<br \/>\n    *   <code>bundle install<\/code> veya <code>pod install<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce do\u011fru dizine (<code>cd iOSAppKlasoru<\/code>) ge\u00e7ti\u011finizden emin olun.<br \/>\n    *   <code>bundler-cache: true<\/code> kullan\u0131yorsan\u0131z, <code>Podfile.lock<\/code> veya <code>Gemfile.lock<\/code> dosyalar\u0131n\u0131z\u0131n g\u00fcncel oldu\u011fundan emin olun. Bazen \u00f6nbelle\u011fi temizlemek ve yeniden olu\u015fturmak gerekebilir.<br \/>\n    *   Cocoapods&#8217;un sistemde y\u00fckl\u00fc oldu\u011fundan emin olmak i\u00e7in <code>gem install cocoapods<\/code> ad\u0131m\u0131n\u0131 ekleyin.<\/p>\n<p><strong>3. Xcode Derleme Hatalar\u0131:<\/strong><br \/>\n*   <strong>Sorun:<\/strong> <code>gym<\/code> veya <code>xcodebuild<\/code> komutlar\u0131 s\u0131ras\u0131nda &#8220;Build failed&#8221; (Derleme ba\u015far\u0131s\u0131z) veya spesifik derleyici hatalar\u0131.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n    *   Hata mesaj\u0131n\u0131 dikkatlice okuyun. Genellikle hata, eksik bir k\u00fct\u00fcphane, yanl\u0131\u015f bir ayar veya kodunuzdaki bir hatadan kaynaklan\u0131r.<br \/>\n    *   Xcode projenizin \u015femas\u0131 (<code>scheme<\/code>) ve yap\u0131land\u0131rmas\u0131 (<code>configuration<\/code>) Fastlane&#8217;de belirtilenlerle e\u015fle\u015fti\u011finden emin olun.<br \/>\n    *   Ko\u015fucunun kulland\u0131\u011f\u0131 Xcode s\u00fcr\u00fcm\u00fcn\u00fcn projenizle uyumlu oldu\u011fundan emin olun. GitHub Actions, farkl\u0131 Xcode s\u00fcr\u00fcmleri sunar (\u00f6rne\u011fin, <code>macos-latest-xlarge<\/code> daha g\u00fcncel Xcode s\u00fcr\u00fcmlerine sahip olabilir).<br \/>\n    *   Yerel Mac&#8217;inizde (e\u011fer varsa) veya bir sanal Mac ortam\u0131nda projeyi derlemeyi deneyerek hatan\u0131n kayna\u011f\u0131n\u0131 daha kolay te\u015fhis edebilirsiniz.<\/p>\n<p><strong>4. Fastlane Hatalar\u0131 ve App Store Connect Y\u00fckleme Sorunlar\u0131:<\/strong><br \/>\n*   <strong>Sorun:<\/strong> <code>deliver<\/code> komutu s\u0131ras\u0131nda &#8220;App Store Connect API key invalid&#8221; (API anahtar\u0131 ge\u00e7ersiz) veya &#8220;iTunes Connect API limited&#8221; (iTunes Connect API limitli) gibi hatalar.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n    *   App Store Connect API Anahtar\u0131n\u0131z\u0131n (<code>.p8<\/code> dosyas\u0131) i\u00e7eri\u011finin base64 kodlamas\u0131n\u0131 do\u011fru yapt\u0131\u011f\u0131n\u0131zdan ve <code>APP_STORE_CONNECT_API_KEY_ID<\/code>, <code>APP_STORE_CONNECT_API_KEY_ISSUER_ID<\/code> GitHub Secrets&#8217;\u0131n do\u011fru oldu\u011fundan emin olun.<br \/>\n    *   API anahtar\u0131n\u0131n s\u00fcresinin dolmad\u0131\u011f\u0131ndan ve gerekli izinlere sahip oldu\u011fundan emin olun (App Store Connect&#8217;te &#8220;Kullan\u0131c\u0131lar ve Eri\u015fim&#8221; b\u00f6l\u00fcm\u00fcnden kontrol edilebilir).<br \/>\n    *   Apple ID ve \u015fifre ile kimlik do\u011frulama kullan\u0131yorsan\u0131z, <code>FASTLANE_USER<\/code> ve <code>FASTLANE_PASSWORD<\/code>&#8216;un do\u011fru oldu\u011fundan ve iki fakt\u00f6rl\u00fc kimlik do\u011frulama (2FA) durumunda Fastlane&#8217;in bu durumu y\u00f6netebildi\u011finden emin olun. Genellikle 2FA i\u00e7in ge\u00e7ici bir uygulama \u00f6zg\u00fc \u015fifre (app-specific password) olu\u015fturmak daha g\u00fcvenlidir.<br \/>\n    *   Fastlane&#8217;in g\u00fcncel s\u00fcr\u00fcm\u00fcn\u00fc kulland\u0131\u011f\u0131n\u0131zdan emin olun (<code>bundle update fastlane<\/code>).<\/p>\n<p><strong>5. Zaman A\u015f\u0131m\u0131 (Timeout) Sorunlar\u0131:<\/strong><br \/>\n*   <strong>Sorun:<\/strong> \u0130\u015f ak\u0131\u015f\u0131n\u0131n belirli bir ad\u0131mda \u00e7ok uzun s\u00fcrmesi ve zaman a\u015f\u0131m\u0131na u\u011framas\u0131.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n    *   Uzun s\u00fcren ad\u0131mlar\u0131 (\u00f6rne\u011fin, ba\u011f\u0131ml\u0131l\u0131k y\u00fckleme) \u00f6nbellekleme ile optimize edin.<br \/>\n    *   Testlerinizi daha verimli hale getirin veya birden fazla i\u015fe b\u00f6lerek paralel \u00e7al\u0131\u015ft\u0131rmay\u0131 d\u00fc\u015f\u00fcn\u00fcn.<br \/>\n    *   Gerekirse, GitHub Actions&#8217;\u0131n \u00fccretsiz limitlerini a\u015fmamak i\u00e7in daha k\u00fc\u00e7\u00fck, daha odakl\u0131 i\u015f ak\u0131\u015flar\u0131 olu\u015fturun.<\/p>\n<p>Hata ay\u0131klama s\u00fcrecinde en \u00f6nemli ipucu, GitHub Actions&#8217;\u0131n sa\u011flad\u0131\u011f\u0131 detayl\u0131 loglar\u0131 (kay\u0131tlar\u0131) dikkatlice incelemektir. Her ad\u0131m\u0131n \u00e7\u0131kt\u0131s\u0131, sorunun nerede oldu\u011funu anlaman\u0131za yard\u0131mc\u0131 olacak de\u011ferli bilgiler i\u00e7erir. Sab\u0131r ve sistematik bir yakla\u015f\u0131mla, kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z \u00e7o\u011fu sorunu \u00e7\u00f6zebilirsiniz.<\/p>\n<h3>Alternatifler ve \u0130leri D\u00fczey Optimizasyonlar: Daha Fazla G\u00fc\u00e7 ve Esneklik<\/h3>\n<p>GitHub Actions&#8217;\u0131n \u00fccretsiz macOS ko\u015fucular\u0131, Mac sahibi olmadan iOS uygulama da\u011f\u0131t\u0131m\u0131 i\u00e7in harika bir ba\u015flang\u0131\u00e7 noktas\u0131 sunsa da, projeler b\u00fcy\u00fcd\u00fck\u00e7e veya daha spesifik ihtiya\u00e7lar ortaya \u00e7\u0131kt\u0131k\u00e7a alternatif \u00e7\u00f6z\u00fcmler ve ileri d\u00fczey optimizasyonlar g\u00fcndeme gelebilir. Bu b\u00f6l\u00fcmde, GitHub Actions&#8217;\u0131n \u00f6tesine ge\u00e7ebilecek se\u00e7enekleri ve mevcut i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 daha verimli hale getirme yollar\u0131n\u0131 inceleyece\u011fiz.<\/p>\n<p><strong>1. Kendi Bar\u0131nd\u0131r\u0131lan Ko\u015fucular (Self-Hosted Runners):<\/strong><br \/>\nGitHub Actions, kendi donan\u0131m\u0131n\u0131zda veya sanal sunucunuzda \u00e7al\u0131\u015fan ko\u015fucular kurman\u0131za izin verir. E\u011fer bir Mac&#8217;e sahipseniz (veya bir sanal Mac sunucusu kiralad\u0131ysan\u0131z), bunu kendi ko\u015fucunuz olarak yap\u0131land\u0131rabilirsiniz.<br \/>\n*   <strong>Avantajlar\u0131:<\/strong><br \/>\n    *   Daha fazla kontrol: \u0130stedi\u011finiz Xcode s\u00fcr\u00fcm\u00fcn\u00fc, ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve \u00f6zel yaz\u0131l\u0131mlar\u0131 y\u00fckleyebilirsiniz.<br \/>\n    *   Daha uzun \u00e7al\u0131\u015fma s\u00fcreleri: GitHub&#8217;\u0131n \u00fccretsiz ko\u015fucular\u0131ndaki zaman a\u015f\u0131m\u0131 ve kota k\u0131s\u0131tlamalar\u0131na tabi olmazs\u0131n\u0131z.<br \/>\n    *   Daha g\u00fc\u00e7l\u00fc donan\u0131m: Kendi donan\u0131m\u0131n\u0131z\u0131n performans\u0131n\u0131 kullanabilirsiniz.<br \/>\n*   <strong>Dezavantajlar\u0131:<\/strong><br \/>\n    *   Bak\u0131m ve maliyet: Donan\u0131m ve yaz\u0131l\u0131m\u0131n kurulumu, bak\u0131m\u0131 ve g\u00fcncellenmesi sizin sorumlulu\u011funuzdad\u0131r.<br \/>\n    *   G\u00fcvenlik: Kendi ko\u015fucunuzun g\u00fcvenli\u011fini sa\u011flamak \u00f6nemlidir.<\/p>\n<p><strong>2. Di\u011fer Bulut Tabanl\u0131 CI\/CD Hizmetleri:<\/strong><br \/>\nGitHub Actions tek se\u00e7enek de\u011fildir. iOS geli\u015ftirme i\u00e7in optimize edilmi\u015f bir\u00e7ok ba\u015fka CI\/CD hizmeti bulunmaktad\u0131r.<br \/>\n*   <strong>Bitrise:<\/strong> \u00d6zellikle mobil CI\/CD i\u00e7in tasarlanm\u0131\u015f, g\u00fc\u00e7l\u00fc ve g\u00f6rsel bir aray\u00fcze sahip bir platformdur. Geni\u015f bir entegrasyon yelpazesi ve \u00f6nceden tan\u0131mlanm\u0131\u015f ad\u0131mlar\u0131 (steps) sayesinde iOS da\u011f\u0131t\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. \u00dccretsiz katman\u0131 mevcuttur.<br \/>\n*   <strong>CircleCI:<\/strong> Esnek yap\u0131land\u0131rma se\u00e7enekleri ve g\u00fc\u00e7l\u00fc entegrasyonlar\u0131yla bilinen pop\u00fcler bir CI\/CD platformudur. macOS ortam\u0131 sunar ve \u00fccretsiz katman\u0131 bulunur.<br \/>\n*   <strong>Codemagic:<\/strong> Flutter ve iOS\/Android uygulamalar\u0131 i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f, h\u0131zl\u0131 ve kullan\u0131m\u0131 kolay bir CI\/CD hizmetidir. \u00dccretsiz katman\u0131 vard\u0131r ve \u00f6zellikle Flutter projeleri i\u00e7in tercih edilir.<br \/>\n*   <strong>Azure DevOps Pipelines \/ GitLab CI\/CD:<\/strong> B\u00fcy\u00fck \u00f6l\u00e7ekli projeler ve kurumsal ortamlar i\u00e7in kapsaml\u0131 CI\/CD \u00e7\u00f6z\u00fcmleri sunar. macOS ko\u015fucular\u0131 mevcuttur ancak genellikle \u00fccretlidir.<br \/>\nBu platformlar, genellikle daha geli\u015fmi\u015f raporlama, g\u00fcvenlik \u00f6zellikleri ve entegrasyonlar sunar. Projenizin b\u00fcy\u00fckl\u00fc\u011f\u00fcne ve b\u00fct\u00e7enize g\u00f6re de\u011ferlendirilebilirler.<\/p>\n<p><strong>3. \u0130leri D\u00fczey Optimizasyonlar:<\/strong><br \/>\n*   <strong>Matris Derlemeler (Matrix Builds):<\/strong> Uygulaman\u0131z\u0131 farkl\u0131 Xcode s\u00fcr\u00fcmleri, iOS s\u00fcr\u00fcmleri veya cihaz konfig\u00fcrasyonlar\u0131 \u00fczerinde paralel olarak derlemek ve test etmek i\u00e7in matris stratejilerini kullanabilirsiniz. Bu, test kapsam\u0131n\u0131 art\u0131r\u0131r ve uyumluluk sorunlar\u0131n\u0131 erken a\u015famada yakalar.<br \/>\n*   <strong>Ko\u015fullu \u0130\u015f Ak\u0131\u015flar\u0131 (Conditional Workflows):<\/strong> Sadece belirli durumlarda (\u00f6rne\u011fin, <code>main<\/code> branch&#8217;ine yap\u0131lan push&#8217;larda veya belirli etiketlerle) \u00e7al\u0131\u015facak i\u015f ak\u0131\u015flar\u0131 tan\u0131mlayabilirsiniz. Bu, gereksiz ko\u015fucu kullan\u0131m\u0131n\u0131 \u00f6nler ve maliyetleri d\u00fc\u015f\u00fcr\u00fcr.<br \/>\n*   <strong>Derleme S\u00fcresi Optimizasyonu:<\/strong><br \/>\n    *   <strong>\u00d6nbellekleme:<\/strong> <code>actions\/cache<\/code> kullanarak ba\u011f\u0131ml\u0131l\u0131klar\u0131 (Cocoapods, Carthage, Swift Package Manager) \u00f6nbelle\u011fe al\u0131n.<br \/>\n    *   <strong>Paralel \u00c7al\u0131\u015ft\u0131rma:<\/strong> M\u00fcmk\u00fcnse, testleri veya farkl\u0131 derleme ad\u0131mlar\u0131n\u0131 paralel i\u015flerde \u00e7al\u0131\u015ft\u0131r\u0131n.<br \/>\n    *   <strong>\u0130maj Optimizasyonu:<\/strong> Ko\u015fucunun imaj\u0131n\u0131 (image) projenizin ihtiya\u00e7lar\u0131na g\u00f6re \u00f6zelle\u015ftirebilirsiniz (e\u011fer kendi ko\u015fucunuz varsa).<br \/>\n*   <strong>Bildirimler ve Raporlama:<\/strong> GitHub Actions&#8217;\u0131 Slack, Microsoft Teams veya e-posta gibi ara\u00e7larla entegre ederek i\u015f ak\u0131\u015f\u0131 durumlar\u0131 hakk\u0131nda an\u0131nda bildirimler alabilirsiniz. Test sonu\u00e7lar\u0131n\u0131 GitHub Actions aray\u00fcz\u00fcnde g\u00f6rselle\u015ftirmek i\u00e7in uygun formatlarda (\u00f6rne\u011fin JUnit XML) \u00e7\u0131kt\u0131 almay\u0131 sa\u011flay\u0131n.<br \/>\n*   <strong>G\u00fcvenlik Entegrasyonlar\u0131:<\/strong> Statik kod analizi (SwiftLint gibi), g\u00fcvenlik taramalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131k denetimleri gibi ad\u0131mlar\u0131 CI\/CD i\u015f ak\u0131\u015f\u0131n\u0131za entegre ederek uygulaman\u0131z\u0131n g\u00fcvenli\u011fini art\u0131rabilirsiniz.<\/p>\n<p>Bu alternatifler ve optimizasyonlar, Mac olmadan iOS uygulama geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcrecinizi daha sa\u011flam, verimli ve \u00f6l\u00e7eklenebilir hale getirmenize yard\u0131mc\u0131 olacakt\u0131r. Ba\u015flang\u0131\u00e7ta GitHub Actions&#8217;\u0131n \u00fccretsiz macOS ko\u015fucular\u0131 ile yola \u00e7\u0131kmak, bu ileri d\u00fczey kavramlar\u0131 \u00f6\u011frenmek ve uygulamak i\u00e7in harika bir temel olu\u015fturur.<\/p>\n<h3>Sonu\u00e7: Mac&#8217;siz iOS Geli\u015ftirmenin Gelece\u011fi ve S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p>Mac sahibi olmadan iOS uygulamalar\u0131n\u0131 App Store&#8217;a g\u00f6ndermek, GitHub Actions&#8217;\u0131n \u00fccretsiz macOS ko\u015fucular\u0131 sayesinde art\u0131k bir hayal de\u011fil, tamamen ula\u015f\u0131labilir bir ger\u00e7ektir. Bu makale boyunca, bu iddial\u0131 hedefe nas\u0131l ula\u015f\u0131labilece\u011fini ad\u0131m ad\u0131m ele ald\u0131k. Geli\u015ftiricilerin kar\u015f\u0131la\u015ft\u0131\u011f\u0131 donan\u0131m maliyeti engelini, bulut tabanl\u0131 S\u00fcrekli Entegrasyon ve S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) \u00e7\u00f6z\u00fcmleriyle nas\u0131l a\u015fabilece\u011fimizi, temel kavramlardan ileri d\u00fczey optimizasyonlara kadar detayl\u0131 bir \u015fekilde inceledik. GitHub Actions&#8217;\u0131n esnek yap\u0131s\u0131, Fastlane gibi g\u00fc\u00e7l\u00fc otomasyon ara\u00e7lar\u0131yla birle\u015fti\u011finde, Xcode sertifika y\u00f6netiminden uygulaman\u0131n derlenmesi, test edilmesi ve App Store Connect&#8217;e y\u00fcklenmesine kadar t\u00fcm s\u00fcreci otomatikle\u015ftirmemize olanak tan\u0131r. Bu yakla\u015f\u0131m, sadece maliyet avantaj\u0131 sa\u011flamakla kalmaz, ayn\u0131 zamanda geli\u015ftirme s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r, hatalar\u0131 azalt\u0131r ve genel \u00fcr\u00fcn kalitesini art\u0131r\u0131r.<\/p>\n<p>Gelecekte, bulut tabanl\u0131 geli\u015ftirme ve CI\/CD \u00e7\u00f6z\u00fcmlerinin mobil uygulama geli\u015ftirme ekosistemindeki rol\u00fcn\u00fcn daha da b\u00fcy\u00fcmesi beklenmektedir. Apple&#8217;\u0131n kendi donan\u0131m k\u0131s\u0131tlamalar\u0131na ra\u011fmen, bu t\u00fcr otomasyon platformlar\u0131 sayesinde iOS geli\u015ftirme daha eri\u015filebilir hale gelmekte, yetenekli yaz\u0131l\u0131mc\u0131lar\u0131n \u00f6n\u00fcndeki engeller kalkmaktad\u0131r. Bu durum, mobil uygulama pazar\u0131nda daha fazla yenilik ve rekabet anlam\u0131na gelmektedir. Art\u0131k bir Mac&#8217;e sahip olmak, iOS geli\u015ftiricisi olmak i\u00e7in bir zorunluluk olmaktan \u00e7\u0131km\u0131\u015f, bir tercih meselesi haline gelmi\u015ftir. Bu d\u00f6n\u00fc\u015f\u00fcm, yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda demokratikle\u015fmenin \u00f6nemli bir ad\u0131m\u0131d\u0131r.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular<\/h4>\n<ol>\n<li>\n        <strong>Mac olmadan iOS uygulamas\u0131 geli\u015ftirmek ger\u00e7ekten m\u00fcmk\u00fcn m\u00fc?<\/strong><br \/>\n        Evet, kesinlikle m\u00fcmk\u00fcn. GitHub Actions&#8217;\u0131n \u00fccretsiz macOS ko\u015fucular\u0131 gibi bulut tabanl\u0131 CI\/CD hizmetleri sayesinde, kodunuzu bir Mac ortam\u0131nda derleyebilir, test edebilir ve App Store&#8217;a g\u00f6nderebilirsiniz. Kendi yerel bilgisayar\u0131n\u0131z Windows veya Linux tabanl\u0131 olabilir, sadece kodunuzu yazmak i\u00e7in bir IDE&#8217;ye (\u00f6rne\u011fin, VS Code, AppCode) ihtiyac\u0131n\u0131z var.\n    <\/li>\n<li>\n        <strong>GitHub Actions&#8217;\u0131n \u00fccretsiz macOS ko\u015fucular\u0131n\u0131n limitleri nelerdir?<\/strong><br \/>\n        GitHub Actions, a\u00e7\u0131k kaynak projeleri ve bireysel kullan\u0131c\u0131lar i\u00e7in belirli bir \u00fccretsiz kullan\u0131m kotas\u0131 sunar. Bu genellikle ayda binlerce dakika \u00e7al\u0131\u015fma s\u00fcresi anlam\u0131na gelir. Bu kota, \u00e7o\u011fu k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli proje i\u00e7in yeterlidir. Limit a\u015f\u0131ld\u0131\u011f\u0131nda, dakika ba\u015f\u0131na c\u00fczi bir \u00fccret \u00f6deyerek kullan\u0131ma devam edebilirsiniz. Detayl\u0131 ve g\u00fcncel limitler i\u00e7in GitHub Actions fiyatland\u0131rma sayfas\u0131na bakman\u0131z \u00f6nerilir.\n    <\/li>\n<li>\n        <strong>Sertifika ve provisioning profili y\u00f6netimi g\u00fcvenli mi?<\/strong><br \/>\n        Evet, Fastlane&#8217;in <code>match<\/code> arac\u0131 ve GitHub Secrets&#8217;\u0131 kullanarak sertifika ve provisioning profillerini g\u00fcvenli bir \u015fekilde y\u00f6netebilirsiniz. <code>match<\/code>, sertifikalar\u0131n\u0131z\u0131 \u015fifreli bir git deposunda saklar ve sadece yetkili CI\/CD ortamlar\u0131n\u0131n eri\u015fmesine izin verir. GitHub Secrets ise hassas bilgilerinizi (\u015fifreler, API anahtarlar\u0131) \u015fifreli bir \u015fekilde saklar ve i\u015f ak\u0131\u015f\u0131 s\u0131ras\u0131nda g\u00fcvenli bir \u015fekilde eri\u015filmesini sa\u011flar.\n    <\/li>\n<li>\n        <strong>Hangi Fastlane ara\u00e7lar\u0131 bu s\u00fcre\u00e7te kritik rol oynar?<\/strong><br \/>\n        Bu s\u00fcre\u00e7te en kritik Fastlane ara\u00e7lar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><code>match<\/code>: Sertifika ve provisioning profili y\u00f6netimi i\u00e7in.<\/li>\n<li><code>gym<\/code>: Uygulamay\u0131 derlemek ve <code>.ipa<\/code> dosyas\u0131 olu\u015fturmak i\u00e7in.<\/li>\n<li><code>scan<\/code>: Uygulaman\u0131n birim ve UI testlerini \u00e7al\u0131\u015ft\u0131rmak i\u00e7in.<\/li>\n<li><code>deliver<\/code>: Uygulamay\u0131 App Store Connect&#8217;e y\u00fcklemek ve meta verileri y\u00f6netmek i\u00e7in.<\/li>\n<\/ul>\n<\/li>\n<li>\n        <strong>Bu y\u00f6ntemin dezavantajlar\u0131 var m\u0131?<\/strong><br \/>\n        Evet, baz\u0131 dezavantajlar\u0131 olabilir:<\/p>\n<ul>\n<li><strong>Hata Ay\u0131klama Zorlu\u011fu:<\/strong> Yerel bir Mac&#8217;iniz olmad\u0131\u011f\u0131nda, CI\/CD ortam\u0131ndaki hatalar\u0131 ay\u0131klamak bazen daha zorlay\u0131c\u0131 olabilir. Loglar\u0131 dikkatlice incelemek ve k\u00fc\u00e7\u00fck de\u011fi\u015fikliklerle denemeler yapmak gerekebilir.<\/li>\n<li><strong>Performans ve Zaman A\u015f\u0131m\u0131:<\/strong> \u00dccretsiz ko\u015fucular\u0131n performans\u0131 s\u0131n\u0131rl\u0131 olabilir ve yo\u011fun projelerde derleme s\u00fcreleri uzayabilir, bu da zaman a\u015f\u0131m\u0131 sorunlar\u0131na yol a\u00e7abilir.<\/li>\n<li><strong>Xcode G\u00fcncellemeleri:<\/strong> GitHub Actions ko\u015fucular\u0131 genellikle g\u00fcncel Xcode s\u00fcr\u00fcmlerini sunsa da, belirli bir eski Xcode s\u00fcr\u00fcm\u00fcne ihtiyac\u0131n\u0131z varsa veya bir g\u00fcncelleme sonras\u0131 uyumsuzluk ya\u015farsan\u0131z kontrol\u00fcn\u00fcz daha s\u0131n\u0131rl\u0131 olabilir.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>#iOSGeli\u015ftirme #GitHubActions #CI\/CD #MacOlmadan #AppStore #Fastlane #OtomatikDa\u011f\u0131t\u0131m<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/github-actions-ios-build-workflow\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/github-actions-ios-build-workflow<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"name: iOS App Store Da\u011f\u0131t\u0131m\u0131 on: push: branches: &#8211; main # main branch&#039;ine push yap\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r jobs: build-and-deploy: runs-on: macos-latest # macOS ko\u015fucusu kullan steps: &#8211; name: Depoyu Klonla uses: actions\/checkout@v4 # Projeyi ko\u015fucuya klonla &#8211; name: Ruby Kurulumu ve Fastlane Ba\u011f\u0131ml\u0131l\u0131klar\u0131 uses: ruby\/setup-ruby@v1 with: ruby-version: &#039;3.","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":[1401],"tags":[],"class_list":{"0":"post-44227","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","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>Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store&#039;a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin - 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\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store&#039;a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin\" \/>\n<meta property=\"og:description\" content=\"name: iOS App Store Da\u011f\u0131t\u0131m\u0131 on: push: branches: - main # main branch&#039;ine push yap\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r jobs: build-and-deploy: runs-on: macos-latest # macOS ko\u015fucusu kullan steps: - name: Depoyu Klonla uses: actions\/checkout@v4 # Projeyi ko\u015fucuya klonla - name: Ruby Kurulumu ve Fastlane Ba\u011f\u0131ml\u0131l\u0131klar\u0131 uses: ruby\/setup-ruby@v1 with: ruby-version: &#039;3.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T06:07:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-21T06:07:49+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=\"31 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store&#8217;a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin\",\"datePublished\":\"2026-08-21T06:07:26+00:00\",\"dateModified\":\"2026-08-21T06:07:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/\"},\"wordCount\":5056,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/\",\"name\":\"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store'a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-08-21T06:07:26+00:00\",\"dateModified\":\"2026-08-21T06:07:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store&#8217;a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin\"}]},{\"@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":"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store'a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin - 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\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/","og_locale":"tr_TR","og_type":"article","og_title":"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store'a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin","og_description":"name: iOS App Store Da\u011f\u0131t\u0131m\u0131 on: push: branches: - main # main branch&#039;ine push yap\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r jobs: build-and-deploy: runs-on: macos-latest # macOS ko\u015fucusu kullan steps: - name: Depoyu Klonla uses: actions\/checkout@v4 # Projeyi ko\u015fucuya klonla - name: Ruby Kurulumu ve Fastlane Ba\u011f\u0131ml\u0131l\u0131klar\u0131 uses: ruby\/setup-ruby@v1 with: ruby-version: &#039;3.","og_url":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-08-21T06:07:26+00:00","article_modified_time":"2026-08-21T06:07:49+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"31 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store&#8217;a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin","datePublished":"2026-08-21T06:07:26+00:00","dateModified":"2026-08-21T06:07:49+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/"},"wordCount":5056,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/","url":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/","name":"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store'a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-08-21T06:07:26+00:00","dateModified":"2026-08-21T06:07:49+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/mac-sahibi-olmadan-ios-uygulamalarini-app-storea-yayimlamak-github-actions-ile-ozgurlesin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Mac Sahibi Olmadan iOS Uygulamalar\u0131n\u0131 App Store&#8217;a Yay\u0131mlamak: GitHub Actions ile \u00d6zg\u00fcrle\u015fin"}]},{"@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\/44227","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=44227"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44227\/revisions"}],"predecessor-version":[{"id":44228,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44227\/revisions\/44228"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=44227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=44227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=44227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}