2 puan yazan GN⁺ 4 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • İlk Apple hesap ve sertifika kurulumunu tamamladıktan sonra, yalnızca Xcode.app içindeki CLI araçlarıyla Mac ve iOS uygulamalarının derleme, imzalama ve dağıtımını otomatikleştirmek mümkün
  • project.yml içinde XcodeGen ile .xcodeproj yeniden oluşturuluyor; xcodebuild, notarytool, stapler, devicectl ile proje oluşturmadan Mac notarizasyonuna ve iPhone kurulumuna kadar tüm süreç yürütülüyor
  • Mac dağıtımı, scripts/release.sh adlı tek bir betikle arşivleme, Developer ID ile imzalama, notarizasyon, ticket stapling, Gatekeeper doğrulaması ve /Applications kurulumunu sırayla çalıştırıyor; hata olduğunda süreç anında duruyor
  • Hızlı derleme ve test için CODE_SIGNING_ALLOWED=NO kullanılabilir; ancak bu geçici imzalı derleme Gatekeeper’ı geçemez ve iCloud KVS ile App Group yetkileri de gerçek ekip kimliğine bağlanmaz
  • İmzalama özel anahtarı ve notarizasyon parolası login keychain içinde saklanıyor; komutlar ve dağıtım kuralları CLAUDE.md veya AGENTS.md içine yazılırsa Claude Code gibi ajanlar tüm iş akışını tekrar tekrar çalıştırabiliyor

Xcode GUI olmadan yapılabilecekler

  • Xcode’un kendisinin kurulu olması gerekiyor, ancak çalıştırılması gerekmiyor; xcodebuild, notarytool, stapler, devicectl araçlarının tamamı Xcode.app içindeki kabuk araçları olarak bağımsız çalışıyor
  • Apple ID oturumu açma, Developer ID sertifikası oluşturma ve notarizasyon parolasını kaydetme gibi ilk kurulum adımları için GUI veya etkileşimli terminal gerekiyor
  • İlk kurulum tamamlandıktan sonra proje oluşturma, derleme, arşivleme, imzalı uygulama dışa aktarma, notarizasyon, doğrulama, kurulum ve gerçek iPhone’a dağıtım işlemleri fare kullanmadan yapılabiliyor
  • Ayar veya betik yazımı tıkandığında, Claude Code ya da başka bir LLM kodlama aracına iş gereksinimlerini ve projeye özel değerleri vererek iş akışı oluşturmak mümkün

Tam Xcode araç zincirini seçmek

  • Önce xcode-select -p çıktısının /Applications/Xcode.app/Contents/Developer olduğundan emin olmak gerekiyor
  • Bağımsız Command Line Tools seçiliyse, aşağıdaki komutla tam Xcode araç zinciri belirtiliyor
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  • xcode-select --install ile kurulan /Library/Developer/CommandLineTools içinde clang ve git bulunur, ancak iOS SDK, notarytool, devicectl gibi tam uygulama geliştirme araçları yer almaz
  • Xcode zaten kuruluysa ayrıca Command Line Tools paketine gerek yoktur
  • Lisans kabulü ve ek bileşen kurulumu da CLI üzerinden yapılabilir
sudo xcodebuild -license accept
sudo xcodebuild -runFirstLaunch

XcodeGen ile projeyi yeniden üretmek

  • XcodeGen, Xcode proje ayarlarını YAML ile yönetir ve her derleme öncesi .xcodeproj dosyasını yeniden üretir
  • GitHub’dan indirilebilir veya Homebrew ile kurulabilir
brew install xcodegen
  • .xcodeproj, macOS’ta dosya gibi görünen bir klasördür; Xcode iç dosyaları ve referansları sürekli değiştirdiği için Git deposunda çakışmalar veya gereksiz değişiklikler oluşabilir
  • Yalnızca project.yml dosyasını Git’e commit edip, üretilen .xcodeproj dosyasını yok saymak proje ayarlarını yeniden üretilebilir halde tutar
xcodegen generate

Apple geliştirici hesabı ve sertifika kurulumu

  • Xcode’daki Settings → Accounts bölümüne Apple ID eklemek gerekir
  • Uygulama dağıtımı ve notarizasyon için ücretli Apple Developer hesabı gerekir
  • Settings → Accounts → Apple ID → Manage Certificates… → + → Developer ID Application yoluyla dağıtım sertifikası oluşturulur
  • Apple Development ile Developer ID Application farklı amaçlara hizmet eder
    • Apple Development, uygulamayı kendi cihazınızda çalıştırmak veya iPhone’a gönderip yerel hata ayıklama yapmak için kullanılır
    • Developer ID Application ise başkalarının Mac’lerinde de Gatekeeper’ı geçen notarize edilmiş .app dosyalarını dağıtmak için gerekir
  • Developer ID Application sertifikası oluşturulduğunda, sertifika ve ona karşılık gelen özel anahtar login keychain içine kurulur
  • Gerçek imzalama işleminde özel anahtar kullanılır ve bu anahtar yeniden indirilemez; bu yüzden silinmemeli ve keychain yedeği alınmalıdır

Notarizasyon kimlik bilgilerini keychain’e kaydetmek

  • Mac uygulaması notarizasyonu, imzalı uygulamanın kötü amaçlı yazılım taraması için Apple’a yüklenmesi sürecidir
  • notarytool, keychain’de saklanan bir profil ile kimlik doğrular; profil ilk oluşturulurken uygulamaya özel parola etkileşimli biçimde girilmelidir
xcrun notarytool store-credentials App-Name \
  --apple-id "you@example.com" \
  --team-id YOUR-TEAM-ID
  • Notarizasyon profilini başka bir uygulamadan ödünç almak yerine uygulama adına uygun şekilde oluşturmak, farklı ortamlarda sessizce başarısız olan durumları önler
  • Uygulamaya özel parola, Apple ID parolasından farklıdır ve Apple ID sitesindeki Sign-In & Security → App-Specific Passwords bölümünden oluşturulur
  • Apple ID parolasını değiştirince uygulamaya özel parola ayrıca uyarı vermeden geçersiz hale gelebilir
    • Notarizasyon sırasında 401 invalid credentials hatası görülürse, tüm yapılandırmadan önce uygulamaya özel parolanın süresinin dolup dolmadığı kontrol edilmelidir
  • Profilin kaydedildiği şu komutla doğrulanır
xcrun notarytool history --keychain-profile App-Name
  • Uygulamaya özel parola, Claude Code’un erişebildiği bir 1Password kasasında tutulursa yeni uygulama için notarizasyon profili oluşturma işi de ajana bırakılabilir
  • --password ile parola girişini de otomatikleştirmek mümkün olsa da kabuk geçmişinde parola kalabileceği için, bir kez elle girip sonra keychain veya 1Password’da saklama yöntemi tercih edilir

Yerel imzalama ayarları ve gizli bilgilerin ayrılması

  • Gerçek imzalama için gereken ekip kimliği ve bundle öneki Local.xcconfig içinde tutulur
cp Local.xcconfig.example Local.xcconfig
BUNDLE_PREFIX     = your.real.prefix
DEVELOPMENT_TEAM  = YOUR-TEAM-ID
  • Local.xcconfig, projeye özel yerel ayarların depoya girmemesi için .gitignore içine eklenir
  • İmzalama özel anahtarı login keychain’de, notarizasyon için uygulamaya özel parola ise notarytool keychain profilinde kaldığından gizli bilgiler Git’e yazılmaz

release.sh ile Mac dağıtımını otomatikleştirmek

  • Depodaki scripts/release.sh, Mac uygulamasının tüm dağıtım hattını tek komutla çalıştırır
./scripts/release.sh
  • Betik şu sırayla çalışır

    1. xcodegen ve notarizasyon profilinin varlığını önceden kontrol eder
    2. xcodegen generate ile projeyi yeniden üretir
    3. xcodebuild archive ile Release arşivi oluşturur
    4. ExportOptions.plist ve xcodebuild -exportArchive ile Developer ID imzalı uygulamayı dışa aktarır
    5. Uygulamayı ZIP olarak paketleyip notarytool submit --wait ile Apple’a gönderir
    6. stapler staple ile notarizasyon ticket’ını ekler
    7. spctl ile Gatekeeper iznini doğrular
    8. Mevcut süreçleri sonlandırır ve uygulamayı /Applications içine kopyalar
    9. lsregister ile kurulu uygulamayı kaydeder
    10. Kurulu bundle’ın ticket’ını ve Gatekeeper durumunu yeniden doğrular
  • Model genel dağıtım sürecini biliyor olsa bile scheme adı, ekip kimliği, notarizasyon profil adı, kurulum konumu gibi projeye özel bilgiler kullanıcı tarafından verilmelidir

  • İlk betik başarısız olursa, çıktıya bakarak düzeltme yapılan yinelemeli bir süreç gerekir; ancak iş akışı oturduktan sonra ek değişiklik olmadan yalnızca dağıtım komutu çalıştırılabilir

  • Hataları ve eksik dağıtımı önlemek

    • set -euo pipefail, tek bir komut bile başarısız olursa betiği anında durdurur; böylece eksik durumlar başarı sayılmaz
    • cd "$(dirname "$0")/..", betik hangi dizinden çağrılırsa çağrılsın depo köküne geçilmesini sağlar
    • Ön kontrol bloğu, zaman alan arşivleme başlamadan önce xcodegen ve notarizasyon profilini doğrular
    • Yalnızca dışa aktarılan uygulama değil, /Applications içine kopyalanan uygulama da yeniden denetlenir; böylece kopyalama sırasında bundle bozulmaları yakalanır
    • Farklı bir notarizasyon profili gerekirse ortam değişkeniyle üzerine yazılabilir
    TZED_NOTARY_PROFILE=<name> ./scripts/release.sh
    

Dağıtım kurallarını ajana aktarmak

  • release.sh tek komutla dağıtım yapıyorsa, CLAUDE.md veya AGENTS.md, ajanın her oturumda ek talimat almadan bu komutu kullanmasını sağlar
  • Belgede proje yeniden üretimi, birim testleri, hızlı macOS derlemesi ve gerçek dağıtım komutu yer almalıdır
xcodegen generate
swift test

xcodebuild -project YOUR-APP-NAME.xcodeproj \
  -scheme YOUR-APP-NAME-macOS \
  -destination 'platform=macOS' \
  CODE_SIGNING_ALLOWED=NO build

./scripts/release.sh
  • İki derleme yolunun farkı da belgede açıkça belirtilmelidir
    • CODE_SIGNING_ALLOWED=NO derlemesi CI ve hızlı yerel kontroller için uygundur
    • Gerçek menü çubuğu uygulaması dağıtımı, quarantine niteliğini geçme ve iCloud senkronizasyonu için Developer ID imzalama ve notarizasyon yapan release.sh gerekir
  • Bir uygulamada kurulan düzenin başka depolarda referans alınması belirtilirse Claude Code daha sonraki uygulamalara da aynı yapılandırmayı kopyalayabilir

Hızlı imzasız derleme ve test

  • Swift Package Manager tabanlı birim testleri Xcode derlemesi olmadan çalıştırılabilir
swift test
  • macOS uygulamasında hızlı derleme kontrolü imzalama kapalıyken yapılır
xcodebuild -project TZed.xcodeproj \
  -scheme TZed-macOS \
  -destination 'platform=macOS' \
  CODE_SIGNING_ALLOWED=NO build
  • iOS uygulaması ve widget uzantılarının simülatör derlemeleri de aynı şekilde çalıştırılabilir
xcodebuild -project TZed.xcodeproj \
  -scheme TZed-iOS \
  -destination 'generic/platform=iOS Simulator' \
  CODE_SIGNING_ALLOWED=NO build
  • CODE_SIGNING_ALLOWED=NO ile üretilen geçici imzalı derleme, derleme ve simülatörde çalıştırma için kullanılabilir
  • Ancak bu derleme Gatekeeper tarafından reddedilir; ayrıca ekip öneki olmadığı için iCloud KVS ve App Group gibi yetkiler bağlanmaz, dolayısıyla dağıtım için kullanılamaz

Gerçek iPhone’a headless dağıtım

  • iOS cihaz dağıtımında Mac uygulamalarındaki gibi notarizasyon adımı yoktur; bunun yerine xcodebuild ve devicectl kullanılır
  • Gerçek cihaz için uygulama, Apple Development sertifikası ve geliştirme provisioning profile ile derlenip imzalanır
xcodebuild -project TZed.xcodeproj \
  -scheme TZed-iOS \
  -destination 'generic/platform=iOS' \
  -allowProvisioningUpdates \
  -derivedDataPath build/ios \
  archive -archivePath build/TZed-iOS.xcarchive
  • Üretilen .app, bağlı cihazın UDID’si belirtilerek kurulur
xcrun devicectl device install app \
  --device <DEVICE-UDID> build/ios/…/TZed.app
  • devicectl list devices, bağlı ve eşleştirilmiş cihazları UDID’leriyle gösterir
  • -allowProvisioningUpdates belirtildiğinde gerekli geliştirme provisioning profile otomatik olarak alınır

GUI olmadan kod imzalamanın çalışma biçimi

  • Developer ID Application sertifikası oluşturulurken Apple sertifikayı verir, Mac ise karşılık gelen özel anahtarı üretip her ikisini de login keychain içinde saklar

  • xcodebuild tarafından çağrılan codesign, ikili dosyayı özel anahtarla imzalar ve imzalayanın doğrulanabilmesi için Apple kök sertifikasına uzanan sertifika zincirini uygulamaya ekler

  • signingStyle: automatic kullanıldığında xcodebuild, ekip kimliğine uygun sertifikayı seçer ve gerekli provisioning profile’ları Apple’dan alır

  • Bu nedenle provisioning profile dosyalarını depoya commit etmeye gerek yoktur

  • Yetkiler, notarizasyon ve stapling

    • Her hedefin .entitlements dosyasında sandbox, ağ istemcisi, iCloud KVS, App Group gibi yetkiler bulunur
    • Yetkiler gerçek ekip kimliğiyle imzalama sırasında bağlandığı için geçici imzalı derlemelerde iCloud ve App Group düzgün çalışmaz
    • İmzalama ile notarizasyon farklı aşamalardır
    • İmzalama, uygulamayı kimin yaptığını kanıtlar
    • Notarizasyon ise Apple’ın imzalı uygulamayı kötü amaçlı yazılım açısından tarayıp ticket vermesi sürecidir
    • Stapling, bu ticket’ı uygulamaya ekleyerek Gatekeeper’ın çevrimdışı durumda da güvenmesini sağlar
    • Gizli UI kullanan menü çubuğu uygulamalarında, yani LSUIElement uygulamalarında notarizasyon XProtect tespitlerinden kaçınmak için gereklidir
  • Elle doğrulama komutları

    codesign -dv --verbose=4 /Applications/TZed.app
    spctl -a -vvv -t exec /Applications/TZed.app
    stapler validate /Applications/TZed.app
    
    • codesign, imzalayanı ve sertifikayı kontrol eder
    • spctl, Gatekeeper’ın çalıştırmaya izin verip vermeyeceğini denetler
    • stapler validate, notarizasyon ticket’ının eklenip eklenmediğini doğrular

Ajanın çalıştırdığı standart araçlar

  • Ayrı bir derleme MCP sunucusu veya özel eklenti gerekmez; Claude Code etkileşimsiz kabuk içinde standart CLI araçlarını çalıştırır
  • Kullanılan araçlar xcodebuild, xcrun notarytool, xcrun stapler, spctl, codesign, devicectl, xcodegen, swift araçlarıdır
  • CLAUDE.md, notarizasyon profil adlandırma kuralını, hızlı derleme ile gerçek dağıtım arasındaki farkı ve dağıtımda release.sh kullanılması gerektiğini ajana aktarır
  • Yalnızca ilk notarytool store-credentials adımı etkileşimli kalır; sonraki sürecin tamamı otomatikleştirilebilir

Xcode GUI işlemlerini CLI ile değiştirmek

  • Xcode’un yönettiği .xcodeproj üretimi, project.yml ve xcodegen generate ile değiştirilebilir
  • ⌘B veya Run düğmesi, xcodebuild … build karşılığıdır
  • Product → Archive, xcodebuild … archive ile yapılır
  • Organizer’daki uygulama dağıtımı, xcodebuild -exportArchive ile değiştirilebilir
  • Organizer yüklemesi, xcrun notarytool submit --wait ile yapılır
  • Otomatik ticket eklemek için xcrun stapler staple kullanılır
  • /Applications içine sürükle-bırak kurulum süreci, cp -R ve lsregister ile yürütülür
  • Gerçek iPhone’da Run işlemi, xcodebuild archive ve devicectl device install ile değiştirilir
  • Xcode ve XcodeGen kurulumu, ilk kimlik bilgisi ayarları, release.sh ve CLAUDE.md yazımı tamamlandıktan sonra yeni derleme dağıtımları artık tek bir cümle veya tek bir komutla çalıştırılabilir

1 yorum

 
GN⁺ 4 시간 전
Hacker News yorumları
  • Sandbox içinde çözülemeyen çok şey olduğu için yapay zeka ajanlarını doğrudan Mac üzerinde çalıştırıyorum; ancak xAI'ın SSH anahtarları da dahil home dizinini yüklediği olay, bu tercihi ciddi biçimde yeniden düşünmeme neden oldu
    Makinenin kendisinin bozulması beni çok endişelendirmiyor. Çoğunu yedekliyorum ya da Git'e commit'liyorum; bu yüzden birkaç saat içinde geri yükleyebilirim. Ama .ssh dizininin yapay zeka ajanına gönderilmesini kesinlikle istemem; bunu prompt'larla engellemeye çalışmak yerine sistem seviyesinde engellemek gerekir. Ayrı bir kullanıcı oluşturup home dizinine 700 izni vermeyi düşünüyorum. Güvenlik sanki 1990'lara geri dönmüş gibi, ama karşılığında işleri eşi benzeri görülmemiş bir hızla bitirebilmenin iki taraflı bir durumu var. Ben de bu riskli yöntemi kullandığım için kimseyi suçlamaya çalışmıyorum

    • Bunu mutlaka host Mac üzerinde çalıştırmak zorunda değilsiniz. Son dönem Mac'ler, performans kaybı neredeyse olmadan sanallaştırma destekliyor; bu yüzden aynı mimarideki macOS veya Linux sanal makineleri geliştirme için kolayca kullanılabilir
      Paketlenmiş çözüm olarak açık kaynak Tart https://tart.run/ veya VirtualBuddy https://github.com/insidegui/VirtualBuddy kullanılabilir; ya da OS API'sini https://developer.apple.com/documentation/virtualization saran bir aracı kendiniz vibe coding ile yazabilirsiniz. Son zamanlarda Apple container da çıktı https://github.com/apple/container
    • Claude'u agent adlı ayrı bir kullanıcı olarak çalıştıran bir wrapper aracı yapıyorum. 1 yıl önce OAuth ve keychain yüzünden başarısız olmuştum, ama yakın zamanda Claude'un CLAUDE_CODE_OAUTH_TOKEN kullanılabileceğini belirtmesiyle bunu hayata geçirmeyi başardım
      ACL ile yetkileri ayarlayan yardımcı bir araca ihtiyaç var, ama şu an macOS'ta çalışıyor. Risk düzeyi, varsayılan Claude sandbox'ı ile tam container/makine izolasyonunun ortasında bir yerde. Claude'un kendi sandbox'ı iyileştikçe bu çift savunma projesinin yatırım/getiri oranından şüphe etmeye başlamıştım, ama home dizini sızıntısı ihtimalini görünce devam etmek için fazlasıyla neden var. Henüz açık kaynak olarak yayımlamadım, ama ilgilenenlerle konuşmaya hazırım
    • Yapay zekayı headless bir Docker container içinde çalıştırıp sadece Git'e erişim veriyorum; böylece yalnızca koda katkı yapabiliyor. Gizli değerlere ihtiyaç olursa repoda tuttuğum bir Docker container sağlıyorum; altyapı gerekiyorsa da Jira bileti oluşturmasını isteyen bir iş akışı izliyorum
    • Xcode'u açmadan bundle identifier kaydetme işini nasıl yaptıklarını merak ediyorum
  • Eğlencesine yalnızca Linux kullanarak iOS uygulaması derleyip test ediyorum; şaşırtıcı derecede basit ve https://github.com/xtool-org/xtool son derece iyi çalışıyor
    TestFlight veya App Store'a yüklemek gerekmiyorsa, Linux'tan da USB üzerinden doğrudan iPhone'a kurulum yapılabiliyor. Emin değilseniz, işe başlamak için coding agent'tan bir Hello World iOS uygulaması oluşturup yüklemesini istemek yeterli

    • Ben de aynı şekilde çalışıyorum; tek fark Windows'ta WSL üzerinde Linux çalıştırıyor olmam. IPA'yı telefona Sideloadly ile aktarıyorum ve gayet iyi çalışıyor
    • Uygulamayı USB ile aktardıktan sonra iPhone'un bağlı kalması gerekiyor mu?
    • Coding agent'lar xtool'u zaten biliyor mu?
  • Açık kaynak projem Axiom, coding execution araçlarının Apple işletim sistemlerine yönelik geliştirme işlerini etkili biçimde yapmasına yardımcı oluyor
    Çeşitli teknolojiler ve ajanların yanı sıra, LLM araçları olan xclog, xcprof, xcsym, xcui de içeriyor. Bunlar gerekli işlevleri token açısından verimli biçimde açığa çıkarıyor ve Axiom dışındaki teknolojiler ya da ajanlar için de faydalı. Axiom: https://charleswiltgen.github.io/Axiom/, CLI araçları: https://charleswiltgen.github.io/Axiom/tools/

    • Kotlin Multiplatform kod tabanında da düzgün çalışır mı? Swift native kod var, ama bazı mantıklar paylaşılırken performans veya davranışın nasıl olacağını merak ediyorum
    • iOS uygulama araçları için bir sonraki sınırın self-host edilebilir Linux build server olduğunu düşünüyorum; bu konuda ne düşündüğünüzü merak ediyorum
    • Flutter ile de çalışıyor mu?
  • “Claude Code'a, Xcode'u açmadan arşivleme, Developer ID ile imzalama, notarization, stapling, /Applications kurulumunu yapan ve herhangi bir adım başarısız olursa net biçimde duran bir script yazdırdım” cümlesini okuyunca tuhaf hissettirdi. Çünkü şu anda okuduğum yazının kendisi de sanki Claude'un bize konuşması gibi
    Yazının neredeyse her adımında “Claude Code'a ya da istediğiniz LLM coding aracına bu yazıyı gösterip halletmesini isteyin”, “Bilmiyorsanız LLM'e sorup ayarı yaptırın”, “LLM kullanmanın amacı istenmeyen manuel işi önlemek”, “Bir workflow oluşturmasını isteyin” gibi yeniden LLM'e sormayı öneren yönlendirmelerin tekrarlanması da garip geliyor

    • Bu yazıyı Claude yazmadı, ben yazdım
    • Claude'un yazdığı bir siteyi Claude'a gösterip, Claude ile build ortamı kurdurmak gibi döngüsel bir yapı varmış gibi görünüyor
    • Yazıdaki hatalar yüzünden bunun AI tarafından yazılmadığını düşünmüştüm, ama artık AI'ın bilerek hata yapıyor olabileceğini düşünüyorum
  • 1 yıldan uzun süredir ajanlarla Mac ve iOS uygulamaları geliştiren biri olarak bunun iyi bir tavsiye olmadığını düşünüyorum. Özellikle de mükemmel Xcode MCP'nin çalışabilmesi için Xcode'un açık olması gerekir
    MCP araçlarını kullanınca xcodebuilde göre çok daha hızlı ve sade biçimde çeşitli özelliklere erişilebiliyor; ayrıca Xcode kapalıyken mümkün olmayan #Preview oluşturma ve render etme de yapılabiliyor. Xcode 27'nin MCP'si ve yerleşik ajanı, DeviceHub üzerinden simülatörleri de çok iyi kontrol ediyor. DeviceHub, Simulator.app'in yerini alıyor; ajanların axe gibi araçlarla erişilebilirlik API'lerini dolaylı yoldan kurcalamaya gerek kalmadan bunu anlayıp yönetebildiği görülüyor
    Xcode MCP kusursuz değil. Ajanı her çalıştırdığımda yetki penceresinin açılması sorununu Keyboard Maestro ile otomatik onay verdirerek aştım. Yine de Xcode 27, Xcode vibe coding'in kullanılabilirliğini ciddi biçimde iyileştirdi. Artık MCP'yi ayrı yönetmek yerine doğrudan Xcode'un kendi ajan arayüzünde Codex çalıştırıyorum; bu çalışma ortamı modeli daha iyi yönlendirip kullanılabilir araçlardan yararlanmasını sağlıyor. Sonuçta en önemli iki şey olan daha hızlı geri bildirim ve daha sağlam doğrulama elde ediliyor

    • İletişim kutularına tıklayan ve bağlantıyı yeniden kuran bir Xcode-mcp-proxy var; Xcode MCP için proxy görevi görüyor. macOS uygulama testlerinde Peekaboo mu kullanıyorsunuz, yoksa normal ekran görüntüsü otomasyonunu mu, merak ettim
    • Sentry'nin Xcode MCP çözümünü de denemeye değer. Çok daha kapsamlı ve Xcode'un açık kalmasını da gerektirmiyor
  • iOS ve Android IDE'lerine mümkün olduğunca az dokunmak istiyorsanız React Native ve Expo da iyi bir seçimdir
    Xcode ve Android Studio yalnızca cihaz simülatörlerini kurarken kullanılıyor; mağaza dağıtımına kadar geri kalan her şeyi Expo araç zinciri hallediyor. Xcode'un kurulamadığı Windows'ta bile Expo'nun yönetilen uygulama yapısıyla iOS uygulamalarını doğrudan iPhone'da çalıştırabilirsiniz. RN ve Expo tabanlı bir başlangıç noktası olarak bakımlı Ignite çok başarılı: https://github.com/infinitered/ignite

  • Teknik olarak hâlâ Xcode kullanıyorsunuz. Xcode, çoğunlukla kararlı çeşitli sistem düzeyi UNIX yardımcı araçlarını ve uygulamaları saran, ama kendisi oldukça hatalı bir GUI
    Uygulamayı CLI ile yayımlamak eski bir pratik; en azından benim ilk Xcode uygulamamı yayımladığım 2012'den beri mümkündü

    • Bunu biliyorum. Ama kilit nokta, Xcode'u kullananın ben değil Claude olması
    • Xcode'u bir kez açtıktan sonra karşıma çıkan giriş engeli yüzünden macOS için bir program yapmayı düşünmemiştim bile
  • En azından bazı hata ayıklama işleri için herkesin Xcode kullanması kaçınılmaz
    Derleme tarafını ajan zaten büyük ölçüde komut satırından halledebiliyor; duruma göre açık talimatlar verirseniz daha da hızlı derleyebilir. Xcode'un dosya sistemi senkronizasyon gruplarını kullanıyorsanız XcodeGen gereksiz ek iş olabilir
    iOS'ta ajanlara eklenmesini en çok önereceğim şey App Store Connect işlevleri: https://github.com/rorkai/App-Store-Connect-CLI. Böylece yalnızca Xcode'u sürekli açık tutmak zorunda kalmazsınız; MacBook'un yakınında olmanız da gerekmez. iPhone'da Codex ile değişiklik yaptıktan sonra asc ile derleme ve TestFlight yüklemesini başlatır, yeni sürümü indirip çalıştırır ve bu döngüyü sürdürürsünüz

    • Ajanla neredeyse komple bir iOS uygulaması bitirdim; App Store yayını ve sosyal medya tanıtımı bile ajan tarafından yapıldı. Xcode'u sadece cihaz üzerindeki derlemeyi önizlemek ve bir sonraki prompt'un yönünü belirlemek için kullandım
  • Bütçesi yetmediği için Mac alamayan geliştiricilerin fiilen iOS geliştirme dışında kalması beni hâlâ rahatsız ediyor. Apple ürünleri her zamlandığında geliştirme sürecine katılamayan insan sayısı artıyor

    • İnsanların teknolojiye erişememesi üzücü ama bugün Apple, benzer ya da daha düşük özellikli rakip ürünlerle karşılaştırıldığında uygun fiyatlı cihazlar da sunuyor. Yeterli belleğe sahip Apple Silicon MacBook Air buna bir örnek
  • Uygulamayı vibe coding ile geliştirecekseniz, uzun vadede Expo daha iyi bir tercih olurdu. React tabanlı olduğu için LLM eğitim verilerinde React kodu Swift'ten çok daha fazla; bu da ortaya çıkan kodun kalitesini yükseltiyor
    Her şeyi komut satırından yapabilirsiniz ve web view olduğu için hata ayıklaması da kolaydır. Native iOS uygulaması olarak derlendikten sonra diğer native uygulamalara oldukça benzer hissettirir. Expo ve Fastlane birlikte kullanıldığında iOS gönderim ve dağıtımını tamamen otomatikleştirebilir; tek bir komutla App Store'a yeni sürüm yükleyebilirsiniz

    • Yeni bir uygulama oluştururken uygulamanın kendisini kaydetmek gibi otomatikleştirilemeyen adımlar da yok mu?
    • Bahsettiğiniz Expo https://expo.dev/ mu? Şu anda girdiğimde “kod bozuldu ve incelenmesi gereken bir hata oluştu” mesajı görünüyor