CI Ortamlarında Swift Macro’lar Sorunu
Xcode 15 ile birlikte Swift 5.9’da tanıtılan Swift macro’lar, kod üretimi ve derleme zamanı metaprogramlamayı mümkün kılan güçlü bir özellik. Geliştirici verimliliği açısından mükemmel faydalar sunarken, CI/CD pipeline’ları için — özellikle Xcode Cloud’da — yeni bir zorluk ortaya çıkardılar.
Bir macro’yu yerel makinende ilk kez kullandığında, Xcode çalıştırılmadan önce macro’nun paketine güvenmeni isteyen bir diyalog gösteriyor. Bu geliştirme makinende sorunsuz çalışıyor, ama Xcode Cloud gibi bir diyalog kutusuna “OK” tıklamanın mümkün olmadığı otomatik ortamlarda sorun oluyor.
Swift macro kullanan bir projeyi Xcode Cloud’da derlemeye çalıştıysan, muhtemelen şu sinir bozucu hatayla karşılaşmışsındır:
Target must be enabled before it can be used.Tam Çözüm
Biraz araştırmadan sonra, Swift macro kullanan Xcode Cloud build’leri için tutarlı şekilde çalışan güvenilir bir çözüm buldum. İşte nasıl uygulayacağın:
Adım 1: CI Scripts Klasörü Oluştur
Önce CI script’lerimiz için özel bir klasör oluşturalım:
Xcode’da projenize sağ tıkla
“New Group” seç
ci_scriptsolarak adlandır
Adım 2: Post-Clone Script’i Oluştur
Sonra, Xcode Cloud’un repository’ni klonladıktan sonra otomatik olarak çalıştıracağı bir post-clone script’i oluşturacağız:
ci_scriptsklasörüne sağ tıkla“New File” > “Empty File” seç
ci_post_clone.sholarak adlandır
Adım 3: Script İçeriğini Ekle
Aşağıdaki kodu yeni ci_post_clone.sh dosyana kopyalayıp yapıştır:
#!/bin/sh
# Hata durumunda çık (-e), tanımsız değişkenler (-u) ve pipeline hataları (-o pipefail)
set -euo pipefail
# Sahte build hatalarını önlemek için Xcode macro parmak izi doğrulamasını devre dışı bırak
defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YESBu script kritik bir şey yapıyor: güven diyaloğunu tetikleyen Xcode’un macro parmak izi doğrulamasını devre dışı bırakıyor.
Adım 4: Script’i Çalıştırılabilir Yap
Terminal’i aç, proje klasörüne git ve şunu çalıştır:
chmod +x ci_scripts/ci_post_clone.shBu komut script’ini çalıştırılabilir yapıyor — Xcode Cloud’un düzgün çalıştırabilmesi için bu gerekli.
Adım 5: Commit Et ve Build’i Tetikle
Yeni dosyayı repository’ne commit et ve değişiklikleri push’la. Bu, Xcode Cloud’da yeni bir build tetikleyecek ve artık macro güven hatası olmadan başarıyla tamamlanması gerekiyor.
Nasıl Görünüyor
Düzgün kurulduğunda, proje yapında post-clone script’ini içeren CI scripts klasörü bulunmalı:

Neden Çalışıyor
Xcode Cloud, projenin kök dizinindeki ci_scripts klasöründe bulunan ci_post_clone.sh adlı herhangi bir script’i otomatik olarak çalıştırıyor. Script’imiz macro parmak izi doğrulamasını devre dışı bırakmak için Xcode tercihlerini değiştiriyor ve güven gereksinimini etkili bir şekilde bypass ediyor.
defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES komutu, macro’ların kullanılmadan önce açıkça güvenilir olması gerekip gerekmediğini kontrol eden belirli bir Xcode tercihini değiştiriyor.
Güvenlik Değerlendirmeleri
Bazı geliştiriciler macros.json dosyasını (güvenilen macro parmak izlerini içerir) yerel makinenden CI ortamına kopyalamayı öneriyor. Ancak bu yaklaşımın doğrulamayı tamamen devre dışı bırakmaktan mutlaka daha güvenli olduğunu düşünmüyorum.
Buradaki kilit nokta bağlam: Xcode Cloud, özellikle uygulamanı derlemek için sandbox’lanmış bir ortamda çalışıyor. Üretim sistemlerinde rastgele kod çalıştırmıyor. Geliştirme ekibine ve sürüm iş akışına güvenemiyorsan, muhtemelen CI ortamında çalışan macro’lardan çok daha büyük güvenlik endişelerin vardır.
Bu Çözümün Artan Önemi
Swift gelişmeye devam ettikçe, giderek daha fazla üçüncü parti paket, minimum boilerplate ile güçlü özellikler sunmak için macro’ları uyguluyor. Örneğin:
TranslateKit SDK yerelleştirme macro’ları sunuyor
Çeşitli loglama ve hata ayıklama kütüphaneleri macro’ları benimsiyor
UI framework’leri view tanımlamalarını basitleştirmek için macro kullanıyor
Bu eğilim, geliştiriciler derleme zamanı metaprogramlama için yeni kullanım alanları keşfettikçe daha da hızlanacak. CI pipeline’larında macro’ları yönetmek için güvenilir bir çözüme sahip olmak, Swift projeleri için giderek daha önemli hale gelecek.
Macro güven sorununu çözdüğüne göre, Xcode Cloud’un yeteneklerinden tam olarak yararlanabilirsin. Aslında bir sonraki makalemde ve eşlik eden videomda Xcode Cloud’u App Store deployment’ları için nasıl kullanacağını keşfedeceğim. Bu yaklaşım, özellikle benim gibi birden fazla Apple platformunda (iOS, macOS, visionOS) yayınlıyorsan, build’leri beklemekten önemli ölçüde zaman kazandırabilir. Bunun için bizi takipte kal ve keyifli kodlamalar!

