opencode, Swift ve iOS projelerinde terminal üzerinden çalışan bir kodlama ajanıdır; proje klasöründe opencode komutuyla başlar ve AGENTS.md dosyasındaki talimatları okur. Bu rehber, SwiftUI/UIKit, XCTest ve Swift Package Manager kullanan ekipler için pratik kurulum, çalışma döngüsü ve doğrulama adımlarını anlatır.
Neden opencode Swift ve iOS işlerine uygun?
opencode, Xcode projesinin kaynak dosyalarını doğrudan okuyup düzenleyebilir; xcodebuild, simctl, swift test gibi komut satırı araçlarını kendi başına çalıştırarak derleme ve test döngüsünü kısaltır. Swift’in tip güvenliği ve async/await yapısı, ajanın ürettiği kodun derleyici hatalarıyla hızlıca doğrulanmasını sağlar; böylece döngü kısalır ve geliştirici hataları anında görür. Özellikle tekrarlayan refactor işleri, test yazımı ve SwiftUI bileşenlerini ayırma gibi görevlerde, terminal üzerinden yinelemeli çalışmak GUI’ye göre daha az bağlam kaybı yaşatır çünkü ajan değişiklikleri diff olarak raporlar ve komut çıktılarını aynı panelde gösterir. UIKit köprüleri ve Swift Package Manager hedefleri gibi çok katmanlı yapılarda da proje dosyalarını doğru yorumlamak için net talimatlar yeterlidir; ajan, paket bağımlılıklarını çözümlerken ortaya çıkan sorunları swift package resolve benzeri komutlarla doğrulayabilir. Ayrıca, yeni bir SwiftUI view eklerken preview’lar için gereken PreviewProvider veya #Preview bloklarını oluşturabilir, böylece Xcode içinde hızlı önizleme için hazır kod üretir.
Projeyi ajan için hazırlama ve AGENTS.md
opencode, proje kökündeki AGENTS.md dosyasını her oturumda okur; bu yüzden build, test, lint komutlarını ve Swift/iOS kurallarını burada tanımlamak gerekir. Dosya, ajanın hangi hedeflere ve dosya düzenine uyacağını, hangi komutları çalıştıracağını ve hangi kısıtlamalara dikkat edeceğini belirler. Aşağıdaki örnek, bir SwiftUI + UIKit karma projesi için başlangıç noktasıdır:
# AGENTS.md
## Proje yapısı
- App/: uygulama hedefi (SwiftUI + UIKit köprüleri)
- Core/: ağ, kalıcılık, modeller
- Features/: özellik modülleri
- Tests/: birim ve UI testleri
## Komutlar
- Derleme: xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 16' build
- Test: xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 16' test
- Paket testi: cd Packages/Networking && swift test
- Lint: swiftlint --strict
## Kurallar
- async/await kullan; DispatchQueue.main.async yerine MainActor kullan.
- Yeni dosyaları oluştururken Xcode projesine ekleme yapma; kullanıcıya dosyayı Xcode'da target'a eklemesini söyle, ya da proje XcodeGen kullanıyorsa project.yml'i güncelle.
- Force unwrap ve implicitly unwrapped optional kullanma.
- SwiftUI preview'ları için mock verileri Preview Content klasöründe topla.
- Değişiklik sonrası `xcodebuild -list` ile scheme adlarını doğrulama.
Bu blok, ajanın hangi komutları çalıştıracağını ve hangi dosyalara dokunmaması gerektiğini netleştirir. Eğer proje XcodeGen veya Tuist ile üretiliyorsa, AGENTS.md’de .xcodeproj yerine project.yml veya Project.swift üzerinde çalışmasını isteyin; böylece proje dosyası çakışmaları azalır ve ajan, kaynak dosyalarına yaptığı eklemeleri otomatik olarak proje tanımına işleyebilir. Ayrıca, farklı hedefler arasında modül import yollarını tanımlamak (örneğin, feature modüllerinin Core modülünü import etmesi) ajanın doğru dosyalara dokunmasını sağlar. Eğer proje birden fazla paketi kullanıyorsa, her paket için ayrı klasör ve komutlar AGENTS.md’de listelenmelidir. Genel kurulum adımları için opencode nasıl kullanılır? Adım adım rehber sayfasına bakılabilir; bu sayfada terminal oturumlarının nasıl başlatıldığı ve temel etkileşim biçimi anlatılır.
Çalışma döngüsü: planla, küçük adımlar, testleri çalıştır, diff’i incele
Verimli bir döngü şöyle kurulur: önce görevi açıkça yazın ve opencode’dan etkilenecek dosyaları listelemesini isteyin. Ardından değişikliği tek seferde değil, derlenebilir küçük parçalar hâlinde uygulayın; her adımdan sonra xcodebuild test veya swift test çalıştırın. Son olarak git diff ile değişiklikleri inceleyin; özellikle hedef üyelikleri, Info.plist girdileri ve concurrency notlarını kontrol edin. Aşağıdaki istemler tipik Swift/iOS işleri için iyi başlangıçlardır:
- “Mevcut UserService’i async/await kullanacak şekilde dönüştür ve ilgili XCTest testlerini güncelle.”
- “SwiftUI listesine pull-to-refresh ekle; ViewModel’i ObservableObject olarak güncelle ve mock veri sağla.”
- “Core Data modeline yeni bir Tag entity’si ekle; hafif migration’ın otomatik çalıştığını doğrulayan bir test yaz.”
- “CI’daki
xcodebuild testkomutunda başarısız olan flaky testi düzelt; bekleme yerine expectation kullan.” - “UIKit ile yazılmış profil ekranını SwiftUI’ye taşı; geriye dönük uyumluluk için UIViewControllerRepresentable kullan.”
Her istemden sonra ajanın verdiği yanıtı derleyici çıktısıyla birlikte değerlendirin. Örneğin, async/await dönüşümünde completion handler’lı eski API’ları sarmalamak için withCheckedThrowingContinuation kullanılması gerekebilir; bu tür incelikleri ajanın önerdiği diff’te arayın. Ayrıca, @MainActor izolasyonu eklenen bir sınıfın test ortamında @MainActor içinde çalıştırılması gerekebilir; XCTest ile ilgili test metotlarını da uygun actor bağlamına almak gerekir. Bu döngüyü küçük parçalarla sürdürmek, sorunları erkenden yakalar.
Swift ve iOS görevlerinde güçlü yönler ve tuzaklar
opencode, async/await refactor’ları, SwiftUI view hiyerarşisini ayrıştırma, XCTest senaryoları üretme ve model katmanını protokollerle soyutlama gibi işleri iyi yapar. Ayrıca Package.swift içindeki hedeflere bağımlılık eklerken tutarlı kalır ve XcodeGen kullanılıyorsa project.yml dosyasını güncelleyebilir. Ancak bazı noktalarda dikkatli olunmalıdır: ajan, yeni dosyanın Xcode hedefine eklenmesi gerektiğini bilmeyebilir; bu yüzden AGENTS.md’de bu kural açık olmalıdır. Swift 6 strict concurrency modunda, @MainActor izolasyonu ve Sendable uyumluluğu hatalarını önerilen düzeltmelerle birlikte getirebilir; derleyici çıktısını birlikte yorumlamak gerekir. Ayrıca Info.plist değişiklikleri, bundle identifier veya code signing ayarları gibi proje yapılandırmalarında ajanın aşırı hevesli düzenlemeler yapması mümkündür; özellikle .xcodeproj dosyasının doğrudan değiştirilmesinden kaçının, XcodeGen kullanmıyorsanız elle eklemeyi siz yapın. Diğer bir tuzak, UIKit delegate yöntemlerini SwiftUI Coordinator yapısına taşırken yaşam döngüsü farklarının gözden kaçmasıdır; bu durumda ajanın ürettiği kodu mutlaka simülatörde elle test edin. Ayrıca, Core Data NSManagedObject alt sınıflarında değişiklik yaparken model sürümlerini ve migration ayarlarını koruması gerekir; ajan eski model ile yeni kod arasında tutarsızlık yaratabilir.
Test ve doğrulama
opencode ile çalışırken doğrulama, komutu çalıştırıp çıktıyı yorumlamaktan ibarettir. Aşağıdaki tablo en sık kullanılan komutları özetler:
| Komut | Amaç |
|---|---|
xcodebuild -list | Kullanılabilir scheme ve hedefleri listeler. |
xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 16' test | Simülatörde birim ve UI testlerini çalıştırır. |
swift test | Swift Package hedeflerindeki testleri çalıştırır. |
swiftlint --strict | Stil ve statik analiz ihlallerini bildirir. |
Ajan, test başarısızlığında hatayı dosya:satır bilgisiyle raporlayabilir; siz de aynı komutu kendi terminalinizde tekrar çalıştırarak sonucu doğrulayın. UI testleri simülatör durumuna bağlı olduğundan, xcrun simctl list devices ile uygun cihazın açık olduğundan emin olun. Test hedeflerinde @testable import ifadesinin doğru modülü işaret ettiğini kontrol edin; ajan bazen import satırını eksik bırakabilir. Ayrıca, async testlerde async metotları await ile çağırmak ve beklentileri fulfillment(of:) ile yönetmek gerekir; opencode bu konuda genellikle doğru kod üretir ancak yine de gözden geçirin. Test geçtikten sonra git diff incelemesini atlamayın; özellikle test hedefindeki dosya üyeliklerini ve proje ayarlarını kontrol edin.
Aynı Swift ve iOS projesinde birden fazla ajan çalıştırma: AgentVera
Birden fazla opencode oturumu aynı anda Swift/iOS projesinde çalışırken dosya çakışmaları ciddi sorun olur; AgentVera, her ajanı kendi gerçek terminal panelinde ve kendi git worktree’sinde çalıştırarak bu çakışmayı önler. Bir ajanın işi bittiğinde ikinci model kodunu otomatik inceler ve bulguları dosya:satır olarak gösterir; bu, özellikle hedef üyeliği ve concurrency hatalarını yakalamak için değerlidir. Her turun kontrol noktası alınır, tek tıkla geri alınabilir; ayrıca token bütçeleri ajanın kontrolden çıkmasını engeller. Bu yapı, Xcode projesinde birden çok görevi paralel yürütmek için pratiktir; daha fazla bağlam için paralel kodlama ajanları sayfasına bakılabilir.
Sonuç
opencode, doğru AGENTS.md ve disiplinli doğrulama ile Swift/iOS projelerinde derleme-test döngüsünü hızlandırır. Ajanın önerilerini her zaman hedef üyelik ve concurrency açısından inceleyin; .xcodeproj değişikliklerini sınırlayın. Küçük adımlarla ilerleyip simülatör testlerini çalıştırdığınızda güvenilir sonuçlar alırsınız.