/final-project-ozturkomerfaruk

final-project-ozturkomerfaruk created by GitHub Classroom

Primary LanguageSwift

NeworlD Oyun Uygulaması

Kitap Özetleri

Bootcamp boyunca özelde, kendi repomu açarak ödevlerimi, ders tekrarlarımı notlar alarak paylaşıyordum. Benim için orası bootcamp rehberi gibi oldu. Bootcamp boyunca öğrendiğim yüzlerce yeni şey bulunmakta ve başlangıçta çok az şey biliyordum. Notlar alarak ilerledim ve bundan çok da mutluyum. Son 2 ayda göstermiş olduğum aktiflik Github profilimde yeşilliklere yansımaktadır hatta. Github profilime gitmek için tıklayabilirsiniz.

Kendi repomda bizden istenen iki kitabın özetlerini paylaştım.

The Pragmatic Programmer kitabının özeti için linke tıklayabilirsiniz. Aynı şekilde Clean Code kitabına ulaşmak için linke tıklayabilirsiniz. Ben çok keyif alarak okudum bu kitapları ve çok şey öğrendim. Bu kitapları bize tavsiye ettiği için Kaan hocama tekrardan teşekkür ediyorum.

Önemli Not!!

Proje içerisinde API_KEY kullanımına izin vermedim. Bunun için App klasörünün altında bulunan Utils klasorüne gidip Constants dosyasında kendi API_KEY'inizi oluşturup ekleyiniz lütfen. Aksi takdirde uygulamaya giriş yapmak istediğinizde uygulama açılmayacaktır.

image

Oluşturacağınız RawG API_KEY aşağıdaki ekran görüntüsündeki internet sitesidir. Siteye gitmek için tıklayabilirsiniz.

image

İçindekiler

Bitirme Projesi NeworlD uygulama ikonu

image

Bitirme Projesi Hazırlık Dökümanı

Sorular Cevaplar
Projenin içeriği ne olacak? Oyunların listeleneceği bir sayfa. Bu sayfa içerisinde filtrelemelerin de mümkün olduğu ve oyun aramasının da yapılacabileceği bir sayfa olacaktır. Oyunların detay ekranları olacak ve detay ekranından oyunlar favorilere eklenebilecektir. Favoriler içerisinde de küçük bir ayrıntı sayfası olmaktadır. Daha sonra, oyunların bir de not ekleme sayfası olacaktır. Oyunlara yönelik notlar eklenebilecek ve düzenlenip silinebilecektir.
Hazırlayacağın proje hangi amaca hizmet edecek? Ben de bir oyun sever olarak, oyun sever insanların aktif bir şekilde kullanabileceği bir proje yapmayı hedeflemekteyim.
Projeni yaparken nereden başlayacaksın ve hangi aşamaları takip edeceksin? Bu konu senin için net mi? Proje içerisinde kullanılacak harici kütüphanelerin kullanılmasını araştırdım. Trello üzerinde bir görev aşaması belirledim ve ona uymaya çalışacağım.
Projende kullanacağın yaklaşımlar neler olacak? Projeyi tek kişi yöneteceği için, her bir adımın kontrolü bende olacaktır. Projeye tam manasıyla dahil olabilmek için bir dökümantasyon oluşturarak ilerlemeyi hedeflemekteyim. Ayrıca proje içerisinde kullanılacak kütüphanelerin, bir demo uygulamada kullanılıp, test edilip öyle projeye entegre etmek istiyorum.
Projeni yazarken hangi teknolojileri kullanacaksın? Bootcamp’te öğrendiğin teknolojiler dışında başka teknolojilere ihtiyacın olacak mı? En başta Local Notification ve Localization kavramlarını daha önce kullanmadım Swift dünyasında. Ardından kendim Lottie kavramını kullanmak istiyorum. Bir de Test yaklaşımlarını daha önce hiç kullanmadım Swift dünyasında Unit Test yazmak da benim için ilk tecrübe olacak.
Projeyi nasıl tasarlayacaksın? Örnek projeleri inceleyeceğim. Başta Steam olmak üzere bir çok oyun içeriği sunan örnek projelere bakarak, onlardan daha iyi neler yapabilirim, araştıracağım.

Proje Gereksinimler Hakkında

Gereksinimler Sürümler
Xcode Version 14.2 (14C18)
Swift 5.7.2
iOS 16.1

Ekran Görüntüleri

Sayfa Görüntüleri Sayfa Hakkında
1 Launch Ekranı ve Onboarding Ekranı
2 Oyun listeleme ekranı ve listede filtreleme özelliği
3 Oyun listesinde arama özelliği
detay Oyun detay ekranı
favori Favoriler ekranı
6 Notlar listesi, not silme, not ekleme ve güncelleme sayfası
7 Local notification özelliği
ezgif com-gif-maker Türkçe ve İngilizce Localization özelliği

Kullanılan Dizayn Patern Mimarisi

Protocol Oriented MVVM

Kullanılan Harici Kütüphaneler

  • Alamofire
  • iCarousel
  • MaterialActivityIndicator
  • SwiftAlertView ~> 2.2.1
  • lottie-ios

Sayfa Tasarım Haritası

image

Kullanılan Bileşenler

  • UILabel
  • UICollectionView
  • UIPageControl
  • UIView
  • UIImageView
  • UITableView
  • UIButton
  • UITextField
  • UITextView
  • UIScrollView

Kullanılan Yapılar

  • UserDefaults
  • CoreData

Network Endpoints

URL Manası
/games?key=##API_KEY##&page={page}&page_size={pageSize} Sayfa numarası ve sayfa saysında gösterilecek oyun sayısı
/games/{gameID}?key=##API_KEY## Oyun ID si ile birlikte oyun detay sayfası
/games?key=##API_KEY##&page={page}&page_size={pageSize}&ordering=-released Yayım tarihine göre en yeni oyunlar
/games?key=##API_KEY##&page={page}&page_size={pageSize}&ordering=released Yayım tarihine göre en eski oyunlar
/games?key=##API_KEY##&page={page}&page_size={pageSize}&ordering=-rating Değerlendirmeye göre en yüksek oyunlar
/games?key=##API_KEY##&page={page}&page_size={pageSize}&ordering=rating Değerlendirmeye göre en eski oyunlar
/games?key=##API_KEY##&page={page}&page_size={pageSize}&ordering=added Favoriye göre listelenen oyunlar
/games?key=##API_KEY##&search={searchString} Girilen oyun adına göre arama yapma

Unit Test Durumu (En Çok Acemilik Çektiğim Yer)

image

Trello Scrum-Agile

Backlog - To Do - Doing - Done formatında projeyi yürütmeye çalıştım. İçimde kalan 2 eksik kısım bulunmakta. Biri sonsuz tableview içeriği yani Pagination diğeri de MVVM Mock test uygulanması. Ancak Unit testlerim hazır sadece canlıda çalışmaktadırlar.

image

image

image

Agile-Scrum metodolojisinde projeyi yönetmeye çalıştığım, Trello uygulamasında hazırladığım yol haritasını görüntülemek için tıklayabilirsiniz.

Ödev Sonu Scrum Değerlendirmesi

Projeyi Eduflow'a teslim ettim ve kendim için bir değerlendirme yaptım. Bu değerlendirmeyi paylaşmak istiyorum.

Sorular Cevaplar
Neler öğrendin bu süreçte? Bitirme projesi kapsamında aslında öğrenmediğim şey yok. Kelimenin tek manasıyla bu. Ben bootcamp öncesinde çok az bilgiye sahiptim. Hatta öyle ki, hayatım boyunca hiç iphone kullanmadım. Geçmişte yaşadığım bazı iş tecrübeleri sayesinde iOS developer olmaya karar verdim ve para biriktirerek, biraz borçla Macbook sahibi oldum daha geçtiğimiz Eylül ayında. Dolayısıyla sadece Swift UIKit tecrübesinden ziyade, ben MAC/iPhone ikilisine yeni adepte olmaya çalışan birisiyim. Bu bootcamp bu sürecimi çok hızlandırdı ve ortaya çok keyif alarak yaptığım bu projeyi ortaya çıkarttı. En başından en sonuna, bu 2 haftalık süreçte her gün 7-8 saat minimum sürede geçirdim. Tüm odağım bu ödev oldu ve elimden gelen tüm çabayı göstermek istedim. Bootcamp boyunca bilmediğim, öğrenmediğim ne varsa internetten araştırarak geçti bu süreç ve bundan çok keyif aldım.
Aynı süre verilse neyi iyi yapardın? Aynı süre şuanki aklımda yeniden verilse bana, tasarıma çok zaman kaybetmezdim. Tasarım konusunda çok az bilgim vardı ve bana çok zaman kaybettirdi. Hele ScrollView kullanımı tam felaketti benim için. Ancak günün sonunda mantıklarını oturttuğuma inanıyorum. MVVM mimarisini daha sade yazmayı çok isterdim ama maalesef buna gerçek manada çalışma tecrübesi lazım. Soru sorabileceğim, kod inceleyebileceğim en ufak bir şey yok. İnternette kaynakların hepsi ya çok profosyonel ya da çok basit düzeyde. Arasını yakalayamadım maalesef. Aynı şekilde Test kullanımını da söyleyebilirim. Unit Test de çok fazla içerik gördüm ama tam manasıyla istediğim sonuçları elde edemedim. Yine de elimden geldiğince test etmeye çalıştım. Bu süreçleri daha iyi yönetebilirdim belki ama yine de bir tecrübe şart bu konuda.

Evet iki soru ve iki cevap. Ben bu süreçten dediğim gibi çok keyif aldım. Bu bootcampt'de olmaktan dolayı çok mutlu oldum. Çok şey öğrendiğime inanıyor ve hayatım boyunca unutmayacağım bir eğitim sürecinde olduğumu düşünüyorum. Bana bu imkanı sağlayan Patika.dev ekibine tekrardan çok teşekkür ederim. Bizlere en iyi şekilde öğretmenlik yapan, harika bir insan olan, Kaan Yıldırım hocama tekrardan çok teşekkür ederim. Bizleri Vakıfbank çatısı altında toplayan Vakıfbank'a çok teşekkür ederim ve son olarak, bootcampte yer alan bütün arkadaşlara çok teşekkür ederim. Bazen onlara sorular sordum bazen onlar sorular sordu birlikte cevaplar aradık. Bu süreçte tanıştığım arkadaşlıkların uzun ömürlü olmasını çok isterim.

Teşekkürler

Ömer Faruk Öztürk