This is a sample project showcasing the integration of the Coordinator pattern, Clean Architecture, CoreData, Combine framework, and comprehensive testing within an iOS project.
Here is my latest resume.
- Pokemon 基本訊息
- ID
- Name
- Types
- Thumbnail image
- 點擊進入 Pokemon 詳細頁
- 滑動載入更多
- 篩選收藏的 Pokemon
- 收藏 Pokemon (Core Data)
- 支援 Grid/List View 切換
- 本地資料緩存加速列表載入速度 (HTTP Caching)
- 使用
https://pokeapi.co/api/v2/pokemon/
取得列表資料,再分別請求https://pokeapi.co/api/v2/pokemon/\(id)
取得寶可夢Types
,Thunmail image
(sprites->front_default
),最終組合呈現給 UI - Pokeapi 支援 HTTP Caching,URLRequest 已實現 Cache 功能
- 使用 CoreData 儲存 Detail 資訊
- 使用 CoreData 管理 Pokemon 收藏、同步 UI 狀態
- 使用 Visitor Pattern 抽象 Models(多個) Save To Any Source(多個,此專案只有 CoreData) 之間的操作
- Pokemon 詳細資訊
- Pokemon ID
- Name
- Types
- Images (both male and female if available)
- Evolution chain (If available)
- 點擊 Evolution chain 可查看該寶可夢資訊
- 呈現 Base stats 資訊
- 呈現 Pokedex description text 資訊 (依據當前語系切換)
- 收藏 Pokemon,列表會同步狀態
- 使用
https://pokeapi.co/api/v2/pokemon/\(id)
取得寶可夢詳細資訊,Images 使用sprites
所有圖片 - 使用
https://pokeapi.co/api/v2/pokedex/\(id)
取得寶可夢 Pokedex description text,並依照當前語系呈現內容(description
) - 使用
https://pokeapi.co/api/v2/pokemon-species/\(id)
取得 evolution-chain resource id,再帶入https://pokeapi.co/api/v2/evolution-chain/\(resource_id)
取得寶可夢 Evolution Chain Name,最終組合呈現給 UI - 使用 CoreData 管理 Pokemon 收藏、同步 UI 狀態
- Writing unit tests.
- Writing UI tests.
- Implementing dependency injection.
- Support L10n.
- Swift
- UIKit (Code Layout)
- Combine
- CoreData
- Swift Package Manager
- Unit Tests (25 tests)
- UI Tests (3 tests)
- Snapshot Tests (6 tests)
- Moya/CombineMoya (網路請求封裝)
- SnapKit (Code Layout 工具)
- SnapshotTesting (SnapshotTesting 工具)
- 負責頁面調度工作、頁面調度方式(e.g. present or push)處理
- 頁面 UI (e.g. UIViewController, UIView...)
- 管理頁面所需資料
- 處理頁面資料請求、更新
- 處理使用者交互事件
- 頁面上的元件渲染所需資料的載體 (e.g. CellView)
- 處理頁面所需資料的來源資料加工
- Business login 套用
- 處理資料源請求
- Decode、Mapping to Model
- 資料源可能來自 Remote, UserDefaults, CoreData, SQLite...
- 做為 JSON String Mapping 的映射
- 不做任何加工或邏輯套用
- 由 Entity or NSManagedObject 產生
- 用於在 App 架構中傳遞做為資料參考使用
- Business login 套用
(因時程問題暫未實現)
- [Feat] Implement additional functionality to select two types simultaneously and display attack multipliers (4x, 2x, 1/2x, 1/4x, 0x).
- [Feat] Allowing users to view all Pokemon of a selected type in type matchup chart and access their details.
- [Feat] 完善 Error -> UI 處理、網路問題處理
- [Feat] 完善 PokemonDetail to CoreData,讓 App 能完整支援離線瀏覽
- [Test] 完善 Test Cases Comment、Mock Function 整理
- [Chore] 使用 Factory Pattern + Builder Pattern or DIC 封裝 ViewController/ViewModel... init
- [Chore] 使用 Strategy Pattern 封裝 getPokemonList or getOwnPokemonList 方法
- [Chore] 完善 SaveToCoreData(SaveableVisitor) 儲存更多 Model(Visit Element)、加上其他儲存策略(Visitor)
- [Chore] 改用 SwiftUI
- [Infra] 使用 XCodeGen 產生管理專案,增加協作性
- [Infra] 使用 SwiftGen 減少 string access 出錯機會
- [Infra] 完善 CI/CD 流程