Swift'te Referans Sayımı - strong, weak, unowned



Bu yazıda, Apple’ın Swift’deki bellek yönetiminin nasıl olduğunu inceleyeceğiz. Çoğunlukla otomatik olarak ele alınsa bile, hala bazı önemli noktalar vardır. Nesneler arasındaki ilişkiyi tanımlamak için doğru referans tipini seçmek, hafıza sızıntılarını önlememize yardımcı olur.
Genellikle bu konu iş mülakatlarında soru olarak gelmektedir.

App Tracking Transparency (ATT) nedir?

App Tracking Transparency (ATT) - Uygulama İzleme Şeffaflığı

    Apple, iOS 14.5 ile birlikte App Tracking Transparency (ATT) adlı yeni bir framework sundu. Bu yeni framework, kullanıcıların benzersiz tanımlayıcılarının reklam izleme için aktarılmasını sınırlamasına olanak tanıyan önceki LAT mekanizmasının (Reklam İzlemeyi Sınırla) yerini almıştır. LAT, ayarlarda global olarak belirlenirken, ATT her uygulama ve cihaza uygulanır. Kullanıcıdan konum veya push bildirim izni istemeye benzer şekilde çalışır.

Swift Deep Linking - URL Scheme

Swift Deep Linking


Deep Linking bu günlerde uygulamalarda çok önemli hale gelmektedir. Başka bir uygulamadan veya web sitesinden uygulamamıza deep link oluşturabiliriz. Kullanıcı telefonunda uygulamamız yüklü ise web'te tıkladığı linke deep link ekleyerek linke tıklama durumunda telefonda uygulamanın açılmasını sağlayabiliriz.

Xcode Code Snippets

Xcode Code Snippets

Merhabalar, Xcode içerisinde kod yazmaya başladığımızda tanımlı kodların otomatik olarak tamamlanmasına olanak tanıyan kayıtlı kod parçacıklarını (code snippets) bu yazımda ele alıyoruz.
Xcode bizim için bir çok code snippets(kod parçacıkları) barındırmaktadır. Bu parçalara, kod ekranındayken sağ üstte bulunan küme parantezleri sembollü Library butonuna tıklayarak yada cmd + shift + L (Library) tuş kombinasyonu ile ulaşabilirsiniz.
Xcode Library

iOS Localization(Yerelleştirme) Parametreler

Swift Localization

Merhaba arkadaşlar,  "iOS Localization(Yerelleştirme)" yazımdan sonra genel olarak "parametreli durumlarda yerelleştirme nasıl yapılıyor?" sorusunu aldım. Aşağıda küçük bir örnek ile bu soruyu cevaplıyorum.

Haydi başlayalım!

Swift Skop Belirteçleri - Access Control


Skop Belirteçleri

Swift’te skop yani faaliyet alanı belirten dört adet anahtar sözcük bulunmaktadır. Bu anahtar sözcükler encapsulation prensibinin uygulanmasını sağlamaktadır. Bu prensip; “modellenmeye çalışılan sisteme ait bazı kritik özellik veya işlevlerin, o sistemi kullanacak olan taraftan bilinçli olarak gizlenmesi” biçiminde tanımlanır.
Resmi dokümantasyon “erişim kontrolü” başlığı altında incelenen model, kaynak kod dosyaları ve modüllere dayandırılmıştır. Modül; kod dağıtım birimi.

Mülakat Sorusu -1



Merhabalar, yeni bir seriye başlayarak iş görüşmelerinde sorulan mülakat sorularını sizlerle paylaşmak istiyorum. Bu sorular iş görüşmesinde sizlerin ne kadar hızlı ve pratik düşünce yapınız olduğunu öğrenmek amacıyla sorulmaktadır. Zaman genellikle kısa olmaktadır. Gelelim sorumuza;

Haftanın 7 günü var bizden istenen bir fonksiyon yazmamız ve bu fonksiyonda ilk parametre olarak gün ismi diğer parametre ise ilerlenecek gün sayısı. Yani fonksiyona Mon – 3 değerlerini gönderdiğimizde bize Thu cevabını döndürmesi gerekmekte.Bu problemin bir çok çözümü bulunmaktadır. Benim çözümümü aşağıda paylaştım;

Swift Yüksek Mertebeli Fonksiyonlar


Yüksek mertebeli fonksiyonlar, parametreleri fonksiyon olan fonksiyonlardır. 



Map

Bir koleksiyon üzerinde döngü oluşturmak ve koleksiyondaki her öğeye aynı işlemi uygulamak için kullanılabilir.


NSNotification & NotificationCenter


Notification Center

Nesneler arası iletişim için kullanılabilecek yöntemlerden biri NotificationCenter’dır. Bu yapıda siz bir veriyi post ettiğiniz zaman register olmuş tüm nesnelerin bu veriyi alması ve tetiklenmesi sağlanır.

AViewController.swift (Tetikleyen)


iOS Localization(Yerelleştirme)

Localization, uygulamanızın diğer dilleri desteklemesini sağlama sürecidir. Çoğu durumda, uygulamanızı önce İngilizce veya Türkçe kullanıcı arayüzü ile yaparsınız ve ardından uygulamayı Japonca gibi diğer dillere yerelleştirirsiniz. Lokalizasyon süreci can sıkıcıdır ve XCode'un güncellenmesi ile ilgili adımlar azar azar değişmektedir. Bu yazıda XCode 10.1  temel alınmıştır.
Yerelleştirme çalışmasına başlamadan önce, “Use Base Internationalization” onay işaretini seçtiğinizden emin olun.




Xcode'da performans analizi oluşturma


Xcode 10 ile birlikte Build performansını analiz etmenin yeni yollarını sunuldu. Yeni Build Timing Özetini kullanarak Build performansınıza dair değerli bilgiler edinin.



Xcode özel dosya şablonlarını GIT ile kullanma


Xcode özel dosya şablonları, biraz daha hızlı gelişmek için harika bir yoldur ve dahil edilen tüm tekrarlanan çalışmalarla bir temel şablon tanımlamanızı sağlar. GIT ile birleştirmek, bu dosyaları ekibinizde paylaşmanızı ve onların da yararlanabilmelerini sağlar.

Xcode özel dosya şablonları için bir GIT deposu oluşturma

Xcode için kullanıcı tanımlı şablonlar ~ / Library / Developer / Xcode / Templates / File Template içinde bulunur. Eğer böyle bir klasör eksikse, bunu kendiniz oluşturabilir ve Xcode yeniden başlatıldığında ona bağlanabilir. Alt klasörler, şablonlarınız için özel bir başlık oluşturmak için kullanılabilir.
GIT deponuz için bir alt klasör oluşturun ve bu yeni konumu özel şablonlarınız için kullanın.


Az Bilinen Xcode İpuçları


Xcode, macOS, iOS, watchOS ve tvOS için yazılım geliştirmek için ana IDE'dir. Hızlıca Aç (⇧ + ⌘ + O), yardımcı editör ve tests + U gibi kullanışlı kısayolları çok hızlı bir şekilde test etmek için çok iyi bilinen özellikler içeriyor. Stroyboard üzerinde (⇧ + ⌘ + L) kısayolu ile komponentlere ulaşabiliriz ve medya dosyalarına da (⇧ + ⌘ + M) kısayolu ile ulaşabilmekteyiz.


Aynı İsimlileri Düzenle (Edit All in Scope)

(⌃ + ⌘ + E) kısayolu ile imlecin üzerinde olduğu yazı ile aynı isimde olan tüm yazıların değiştirilmesi sağlanabilmektedir.



Xcode'da isteğe bağlı özelliklerin etkinleştirilmesi


WWDC 2018 sırasında Apple Xcode 10'u birçok yeni özellik ile duyurdu. Birçoğu sizin için otomatik olarak kullanılabilir ve varsayılan olarak etkinleştirilir, ancak bazılarının görünmeyebilir ve bazı manuel ayarlamalar gerekebilir.



Code Folding (Kod Katlama)

Birçok IDE'de bulunan bu özellik sayesinde kodların katlanmasını sağlıyoruz. Kullanımı için;

Xcode Kısayol Tuşları


Xcode Kısayollar

Arama
Cmd + F --> Dosyada bul
Cmd + Alt + F --> Dosyayı bul ve değiştir
Cmd + Shift + F --> Projede bul
Cmd + Shift + Alt + F --> Projede bul ve değiştir

Sekmeler
Cmd + T --> Yeni sekme
Cmd + } --> Önceki sekme
Cmd + { --> Sonraki sekme

Enumeration - 3

Enum’larda Fonksiyon ve Initializer Kullanımı

Swift’te enum’ların üye fonksiyonları olabileceği gibi parametrik olan veya olmayan initializer’ları da olabilir. Enum’lar içerisine initializer yazmanın gerekçesi; enum’a kendi sabitlerinden birisiyle ilk değer vermektir. Aşağıda “Bilimsel” isimli enum’a örnek olarak iki farklı init() yazılmıştır.

enum Bilimsel : Float {
case g = 9.28
case e = 2.71
case pi = 3.14
init() {
self = .pi }
init (prm:Bilimsel) {
self = prm } }

Enumeration - 2

Enumeration Sıralama

enum Planet: Int {
    case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
//Planet diye bir enum tanımladık. İlk değer verildikten sonra değer sıralaması kendiliğinden yapılır.

let earthsOrder = Planet.Earth.toRaw()
// Earth isimli elemanın sırası  3'e eşit.

let possiblePlanet = Planet.fromRaw(7)
// 7. sıradaki eleman Planet.Uranus'e eşit.

Enumeration - 1

Enumeration

Enumaration aynı tipteki benzer yapıların gruplamasında kullanılan yapıdır.

enum Yonler{
case dogu
case bati
case kuzey
case guney
}

enum Gezegenler{
case merkur, venus, dunya, mars, jupiter, saturn, uranus, neptun
}

var evinCephesi = Yonler.bati //uzun gösterim
evincephesi = .dogu  //kısa gösterim

Paylaş (Share) Butonu


Paylaş (Share) Butonu

Uygulama içerisinde paylaşmak istediğimiz verileri başka uygulamalar aracılığıyla paylaşım yapmak için kodlarımız aşağıdadır;

Closures - Kapatmalar - 4


Bir fonksiyon ya da metot () -> T türünden bir fonksiyon parametresine sahipse onu hiç küme parantezleri olmadan çağırabiliriz. Bunun için parametre değişkeninin @autoclosure özniteliği ile niteliklendirilmesi gerekir.
Örneğin:
func foo(@autoclosure f: () -> Int){
print(f())
}
foo(10 + 20) // geçerli