탑승중인 버스의 현재 경로를 실시간으로 알려주고 목적지 근처부터 사용자에게 알림을 주는 버스도착 알림앱 (공공API 사용)
아래 공공API (서울버스)를 이용해 현재위치 기반의 가까운 정류장을 기준으로 목적지 선택시 목적지 부근부터 미리 안내를 해주는 앱
API
| 조성빈🍎 | 이병훈🍎 | 이하연🍎 |
|---|
| 조성빈 | 이병훈 | 이하연 | |
|---|---|---|---|
| 구현 & 기여 | % | - 출발지 / 목적지 선택 페이지 (100%) - Tuist 도입 및 구조설계 (100%) - 버스 실시간 현황판 (LiveActivity) (100%) |
% |
2024.07.01 ~ 2024.09.10 (2개월)
- UIKit, SwiftUI
- CoreData, CLLocation
- MVVM
- RxSwift
- Unit Test
- Tuist
- View의 로직이 많아짐과 역할 분리에 따른
MVVM 패턴적용 (input | output) - 네트워크 요청만을 담당하는
NetworkLayer설계 - 반응형 프로그래밍(Reactive Programming)을 위해 RxSwift 적용
Tuist도입 및 프로젝트 구조 설계, 협업간pbxproj 충돌 개선LiveActivity를 활용한 실시간 버스위치 현황판 구현출발지 | 목적지 선택 페이지CLLocation을 활용한 현재위치와 가까운 정류장 표기- SkeletonView를 활용한 데이터 fetch하는동안 UX개선
| 출발지 선택 | 목적지 선택 |
|---|---|
![]() |
![]() |
| 실시간 버스현황판 (LiveActivity) |
도착시 |
|---|---|
![]() |
project.pbxproj의 잦은 충돌
- 이를 해결하고자 리서치했던 툴은 아래와 같으며, 채택한 이유도 작성
- Tuist(채택)
- swift 파일로 프로젝트를 관리한다는 장점이 있음
- SwiftGen과 같이 Asset, Font등 파일을 추가하면 하드코딩하지 않고 해당 리소스에 접근할 수 있는 기능제공
- 의존성을 직관적으로 확인할 수 있는
tuist graph - 추후 모듈화 및 빌드속도 향상 기대
- git attributes(x)
- 적용을해도 충돌이 난다는 대다수의 의견 확인
- Tuist(채택)
- 개인적으로 러닝커브가 높다는 생각이 들었고, 버전 업데이트가 많다보니 레퍼런스 이미 프로젝트 진행중인 상황에 Tuist를 적용하다보니 혹시 잘못 건들여 문제가 발생하는게 아닌가하는 걱정이 있었지만, 프로젝트를 CLI를 통해 .xcodeproj 파일은
tuist generate시 재생성되기 때문에 수정된 코드만 반영이 되는점이 매력적이었음. 또한 Project, Package, Config 등 각각의 파일들의 역할이 명시적으로 나와있고 역할에 따라 적용만 해주면되는 편리함이 있었음.
현재위치와 가장 가까운 버스 정류장 표기
- API의 response값으로, 버스 정류장 리스트들의 좌표중 현재위치와 가장 가까운 버스정류장을 표기해야 했음
- 각 좌표별로 distance를 구하는 메서드를 이용해 distance가 가장 적을경우 현재 위치와 가장 가까운 정류장이라고 판단.
- 각 정류장의 distance를 distances라는 Array에 추가한 후
- distances의 요소중 최소값 (min())을 가진 해당 index를 구하고
- 해당 index를 현재위치와 가장 가까운 정류장으로 표기
CLLocation 및 정류장 표기 문제
- 기존에 기획된 페이지는 3개였음 (버스검색 | 목적지 선택 | 실시간 버스)
- 현재정류장 표기를
CLLocation의 현재 위치 기준가장 가까운 정류장을 표기하도록 구현했으나,
맞은편의 정류장이 표기되는 문제가 발생함 - 목적지선택 > 검색기능을 활용해서 방면을 선택하는 부분도 있었지만 사용자가 텍스트를 입력하고 방면을 선택해야한다는 번거로움이 있을거라 판단
- 현재정류장 표기를
- 목적지 선택 페이지 이전에 출발지 선택 페이지에서 근처 정류장 2개를 보여줌.
- 이후 사용자가 현위치 및 방면을 한 눈에 볼 수 있도록 UI를 제공하고 선택하여 목적지 방향에 맞출 수 있도록 함
- 처음엔 로직적으로 어떻게든 풀어내려고 고민을 했었다. 하지만 정확성을 확신할 수 없었고, 이후 팀원들과 얘기를 해보면서 페이지를 하나 더 만들어 유저 입장에서도 더 간단하게 알아볼 수 있고, 개발리소스도 적게 들면서 문제를 해결해 나갔던점이 좋았다.
노션ID와 구간 정보로 차량들의 위치 정보 조회 https://www.data.go.kr/data/15000332/openapi.do
노선별 경유정류소 목록 조회 http://api.bus.go.kr/contents/sub02/getStaionByRoute.html
특정차량 위치 정보 조회 http://api.bus.go.kr/contents/sub02/getBusPosByVehId.html
컨벤션은 아래와 같음
파일명 Extenion + 확장할 파일
ex)
Extension + UIImageView.swift
Extention + UIAlert




