Xcode 14.3 Beta Sürümü ile gelen yenilikler

Berke Turanlioglu
IBTech
Published in
4 min readFeb 23, 2023

Merhaba, bu yazımızda Xcode 14.3 Beta sürümü ile geliştiricileri bekleyen yeni güncellemelerden bahsedeceğiz.

Xcode 14.3 ve iOS 16.4 Beta sürümleri 16 Şubat 2023 tarihinde yayınlandı. Yeni sürüm, SwiftUI’ı etkileyen güncellemeler ve iyileştirmeler barındırıyor. Eğer bir ADP üyesiyseniz, bu adrese tıklayıp indirebilirsiniz. Yeni sürümü indirebilmeniz için ise MacOS sürümünüzün en az 13.0 (Ventura) olması gerekiyor.

Rosetta artık desteklenmiyor (Deprecated)

Yeni Xcode maalesef Rosetta’ya olan desteğini kesecek. Geliştiriciler Rosetta ile Intel tabanlı geliştirilen (genellikle eski) SDK’ları yeni Apple Silicon cihazlarda kullanıyordu. Apple ise yeni sürümden itibaren yaşanacak sorunların çözümü için bu linki bizlere sunuyor.

Print in Preview

Yeniliklerden ilki bize Preview ekranında konsolu kullanma imkanı veriyor. Örneğin, bir uygulamayı geliştirirken herhangi bir fonksiyonun içine debug mantığı ile print yerleştirebiliriz. Yeni sürümle birlikte konsola yazdırılacak yazılar için uygulamayı her seferinde çalıştırmaya gerek kalmayacak. Konsolun Preview sekmesinden anlık olarak erişebileceğiz.

Her bastığımızda konsolda sayıları görebiliyoruz

Back Deploying

Vadedilen en önemli güncellemelerden biri ise Back Deploying. Geliştiriciye istediği fonksiyonları geriye dönük sürümlerde de çalıştırabilme imkanı veriyor. Halihazırda bununla ilgili canlı bir örnek yok ve oldukça kısıtlı olduğu düşünülüyor. Şu anda da sadece fonksiyonlar aracılığı ile kullanılabiliyor. Aşağıda da Apple’ın dokümanlarında verdiği örneği bulabilirsiniz.

@available(macOS 12, *)
public struct Temperature {
public var degreesCelsius: Double

// ...
}

extension Temperature {
@available(macOS 12, *)
@backDeployed(before: macOS 13) // <-- yeni ozellik burada
public var degreesFahrenheit: Double {
return (degreesCelsius
- 9 / 5) + 32
}
}

Şimdi SwiftUI özelindeki gelişmelerden bahsedebiliriz.

Scroll Bounce Behavior

Uygulamamızdaki List veya Form gibi kaydırılabilir ekranların animasyonlarını artık kontrol edebiliyoruz. Component’ın sonuna .scrollBounceBehavior() olarak ekleniyor. İçine yazdığımız parametre .always ise View tepesinde daima bir sekme animasyonu görüyoruz fakat .basedOnSize ise ancak yarattığımız View ekran boyutunu aşınca sekme efekti veriyor. Buna ek olarak da optional şekilde yatay veya dikey olmasına da karar verebiliyoruz ancak örnekteki gibi View’larda dikey animasyon sabit kalıyor.

Örnek ekran görüntüsü

Aşağıda ise her bir kaydırma efekti sonucunu görebiliriz.

  • Sol: .always
  • Orta: .basedOnSizefakat ekrana sığdığı için animasyon olmuyor
  • Sağ: .basedOnSize ve ekrana sığmadığı için animasyon gerçekleşiyor

Geri kalan güncellemeler ise Sheet görünümlerine geldi.

Sheet Background

Artık sheet’lerin arkaplanlarını değiştirebiliyoruz. Kullanacağımız instance .presentationBackground() . Şu sıralar yaygın olarak kullanılan glassmorphic bir görünüme ise .ultraThinMaterial ile ulaşabiliyoruz. Adından da anlaşılabileceği üzere de .ultraThickMaterial da bize beyaz bir arkaplan sağlarken .regularMaterial ise şeffaf ile opak arası bir görünüm sağlıyor.

Yukarıdaki örnek .ultraThinMaterial sonucunu gösterirken aşağıda da .regularMaterial ve .ultraThickMaterial sonucunu görebilirsiniz.

Regular Material orta ayarda bir şeffaflık verirken Ultra Thick Material neredeyse bembeyaz

Sheet Corner Radius

Arkaplanını değiştirdikten sonra dilersek köşelerinin de keskinliğini ayarlayabiliyor olacağız. Beta sürümle birlikte gelen bu yeni özelliği .presentationCornerRadius() ile gerçekleştiriyoruz.

Köşelerin ne kadar yumuşak olacağına karar vermek için bu demoyu referans alıp deneyebilirsiniz

Sheet Scroll

Sheet’te kalabalık bir görünüme sahip olduğumuz zaman, aşağı kaydırabilmek için Sheet’in ekranı tamamen doldurması gerekiyordu. Yeni özellikle birlikte Sheet ekranın az bir kısmını kaplarken bile kaydırılabilecek. Bu özelliği sağlayan instance .presentationContentInteraction(.scrolls). İç parametresini .resizes yaparsak ise her zamanki alışık olduğumuz görünüme tekrar sahip olabiliriz.

Ekranı tamamen açmadan kaydırabiliyoruz

Sheet Background Interaction

Bu yenilik ise Sheet’in açıldığı asıl ekranı ilgilendiriyor. .presentationBackgroundInteraction(.enabled) ile birlikte Sheet’in arkasında kalan ekran fonksiyonel kalmaya devam edecek. Burada not olarak düşmekte fayda var, instance içine yazdığımız .enabled(upThrough: .medium) sayesinde tıklanabilir kısmı Sheet ile aynı boyda yaratıyoruz ve böylece arkaplanın işlevselliği için alan açıyoruz. Bunu belirtmezsek default olarak .large kalır ve bu durum eklentinin işe yaramadığı izlenimi yaratabilir.

Sheet açıkken de kapalıyken de tuşa basabiliyoruz (upThrough olduğunu unutmayalım)

Sheet Size

.presentationCompactAdaptation() sayesinde farklı cihazlar veya yatay/dikey ekranlar arasında dinamik bir görünüm elde edebiliyoruz.

struct ContentView: View {
@State private var showInfo = false

var body: some View {
Button("View Info") {
showInfo = true
}
.popover(isPresented: $showInfo) {
InfoView()
.presentationCompactAdaptation(
horizontal: .popover,
vertical: .sheet)
}
}
}

Deprecated — TableView

Tablo görünümü elde ettiğimiz TableView fonksiyonu artık bildiğimiz hali ile gelecek sürümlerde hata verecek. Beta sürümü itibarı ile TableView(of:) kullanarak içinde kullanacağımız datayı en baştan belirtmemiz gerekiyor.

// before (will now produce an error):
Table {
TableColumn("Name", value: \.name)
TableColumn("Email", value: \.email)
} rows: {
ForEach(people) { person in
TableRow(person)
}
}

// after:
Table(of: Person.self) {
TableColumn("Name", value: \.name)
TableColumn("Email", value: \.email)
} rows: {
ForEach(people) { person in
TableRow(person)
}
}

Okuduğunuz için teşekkürler 😊

İyi kodlamalar 👨‍💻

--

--