티스토리 뷰

IOS

만보기 iOS 앱 개발기

내일도이렇게 2023. 10. 9. 16:46

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함