티스토리 뷰
2022년 06월에 블록체인 서비스를 하고 있는 회사에 입사하여 혼자서 프로젝트 세팅부터 출시까지
만보기 iOS 앱 개발 대해 간략하게 정리하고자 한다.
프로젝트
- 지원 버전, 언어
- 아키텍처
- UI 개발
- 라이브러리 관리
- 연동 작업 (푸시, 로깅 등)
- 배포(CI/CD)
프로젝트
지원 버전, 언어
최소 지원 버전 iOS 13, Swift 5.7.2로 개발하여 Async/Await를 사용하여 API 비동기 처리하였습니다.
// View 에서 /me API 호출
Task {
do {
let userInfo = try await self.viewModel.getMe(authorization: authorization, deviceId: deviceId)
} catch {
// 에러 처리
}
}
// ViewModel
func getMe(authorization: String, deviceId: String) async throws -> UserInfo {
do {
let result = try await self.userNetwork.getMe(authorization: authorization, deviceId: deviceId)
return result
} catch {
throw error
}
}
// /me API 호출하는 메소드
func getMe(authorization: String, deviceId: String) async throws -> UserInfo {
let url = UserEndPoint.me.url
var request = URLRequest(url: url)
request.httpMethod = RequestMethod.get.rawValue
request.addValue(authorization, forHTTPHeaderField: "Authorization")
request.addValue(deviceId, forHTTPHeaderField: "x-device-id")
do {
let (data, response) = try await URLSession.shared.data(from: request)
guard let response = response as? HTTPURLResponse else { throw ErrorModel.noResponse }
switch response.statusCode {
case 200 ... 299 :
let decoder = JSONDecoder()
guard let result = try? decoder.decode(UserInfo.self, from: data)
else {
throw ErrorModel.invalidJSON
}
return result
// 상태 코드 처리
}
아키텍처
MVVM 아키텍처 사용
UI 개발 방법
StoryBoard 를 사용하지 않고 코드기반인 Snapkit으로 사용하였음
라이브러리 관리
CocoaPods 으로 라이브러리 관리하였습니다.
사용한 라이브러리
- RxSwift: 비동기 처리
- SwiftGen: 에셋 카탈로그 코드 처리
- SnapKit: UI 코드 처리
- Firebase: 파이어베이스 관련
- Kingfisher: 이미지 다운로드 / 캐싱
- PanModal: 바텀 시트 UI
- lottie-ios: 로티 애니메이션 처리
- swiftLint: 코딩 컨벤션을 관리
연동작업
푸시
- OneSignal: 앱 푸시 처리에 대해 사용
이벤트 로깅
- Firebase Analytics: 사용자 로그 이벤트를 Firebase에 로그 수집
크래시분석
- Firebase Crashlytics: 앱 비정상 종료 데이터를 감지하여 어떤 부분이 비정상 되는지 파악할 수 있었습니다.
광고 연동
- Adop: 배너/비디오/전면 광고 플랫폼을 이용하여 광고 작업을 하였습니다.
배포
초기에 Github Actions 을 사용하여 빌드 테스트 및 배포를 하였지만 스크립트 오류로 인해 지금은 사용 못하고 있어
추후에 개선할 점입니다.
현재 수동으로 Xcode Archive로 데브/라이브앱 구분하여 아카이브 하여 TestFlight에 업로드를 진행하고 있습니다.
개선점
테스트 코드 작성
CI/CD 개선
SwiftUI
아키텍처 연구
'IOS' 카테고리의 다른 글
[Swift] - MVC, MVP, MVVM (0) | 2022.04.01 |
---|