본문 바로가기

iOS/니카내카

[회고] 앱을 출시해보았습니다?

728x90

타임라인이 조금 뒤죽박죽인 것 같지만 .. 아무튼 앱을 출시했습니다 !!!!!!!!

 

데이터 설계 

데이터 .. 라고 할 것이 있나 .. ? 아직 렘을 넣지 않아서 ... 중요한 데이터 설계는 아직 없지만 서버 데이터를 어떻게 관리하는가 를 보게 되면 .. 이제 ... 아래와 같다 .. ~

 

import Foundation

// MARK: - Welcome

struct SpotList: Codable {
    let nanumcarSpotList: NanumcarSpotList

    enum CodingKeys: String, CodingKey {
        case nanumcarSpotList = "NanumcarSpotList"
    }
}

// MARK: - NanumcarSpotList

struct NanumcarSpotList: Codable {
    let listTotalCount: Int
    let result: Result
    let row: [Row]

    enum CodingKeys: String, CodingKey {
        case listTotalCount = "list_total_count"
        case result = "RESULT"
        case row
    }
}

// MARK: - Result

struct Result: Codable {
    let code, message: String

    enum CodingKeys: String, CodingKey {
        case code = "CODE"
        case message = "MESSAGE"
    }
}

// MARK: - Row

struct Row: Codable {
    let la, lo, positnCD: String
    let elctyvhcleAt: String
    let adres, positnNm: String

    enum CodingKeys: String, CodingKey {
        case la = "LA"
        case lo = "LO"
        case positnCD = "POSITN_CD"
        case elctyvhcleAt = "ELCTYVHCLE_AT"
        case adres = "ADRES"
        case positnNm = "POSITN_NM"
    }
}

 

예약 현황의 경우 xml로 데이터를 넘겨주기 때문에 아래와 같이 서버 데이터를 받을 수 있다.

/*
 <NanumcarCarList>
     <list_total_count>1</list_total_count>
     <RESULT>
         <CODE>INFO-000</CODE>
         <MESSAGE>정상 처리되었습니다.</MESSAGE>
     </RESULT>
     <row>
         <reservAbleAllCnt>0</reservAbleAllCnt>
         <reservAbleCnt>0</reservAbleCnt>
         <SPONAM>하이마트 미아사거리점</SPONAM>
     </row>
 </NanumcarCarList>
 */

struct NanumcarCarList {
    let listTotalCount: Int
    let result: Result
    let row: [CarRow]

    enum CodingKeys: String, CodingKey {
        case listTotalCount = "list_total_count"
        case result = "RESULT"
        case row
    }
}

struct CarRow {
    let reservableAllCount, reservableCount, spotName: String

    enum CodingKeys: String, CodingKey {
        case reservableAllCount = "reservAbleAllCnt"
        case reservableCount = "reservAbleCnt"
        case spotName = "SPONAM"
    }
}

 


이슈 

큰 이슈는 .. 딱히 없었지만 .. 자잘자잘한 이슈들이 힘들게 했다.

ㄴ 그러니까 이제 아 개발 그만두고 싶다 ... 이런 큰 이슈는 ... 없었다 .. (근데 이게 출시 이후라서 미화된 것일수도 .. )

ㄴ 자잘자잘한 이슈는 이제 ... 아 .. 내가 개발자를 해도 되나? 이런 이슈들 .. 

ㄴ 무슨 차이인데. 나도 모름. ㅈㅅ.

 

개발 이슈 

✔️ 서버 데이터가 원하는 형태로 들어오지 않는다.

-> 어쩌겠는가. 해야지.

 

 

✔️ 데이터를 모두 받고 한번에 뷰를 리로드 하고 싶다. 

-> DispatchGroup을 통해서 해결했다.

 

 

✔️ 상세화면에서 그린카로 이동하면 앱이 꺼지는 오류 ..

열심히 1.0 배포하고 나름 당당하게 있었는데 ..

하 .. 이래서 개발자는 잠이 없는걸까 .. ?

아무튼 워케 .. 앱이 꺼진다는데 .. 수정해야지 ..

 

쏘카랑 같은 로직으로 짜놓고 당연히 될 줄 알고 확인을 하지 않았다. (이래서 내부 테스트가 꼭 있어야 한다고 생각했다.)

문제 코드를 보고 .. 다르게 수정을 해서 확인을 했더니 잘 넘어갔고 ..아래의 버전 대응과 함께 수정해서 1.1 버전으로 올렸다.

(나름 크리틱한 이슈라고 생각이 되어서 minor버전을 바로 올렸다.)

 


사소한 이슈 

✔️ 앱 스토어에 1.0 버전을 업로드 하고 알게 된 사실인데 .. 최소 버전을 15.0으로 하지 않고 15.5로 했다.

-> 15.0으로 업데이트 해서 아카이빙 한 뒤, 몇가지 버그를 수정해서 다시 업로드 했다. 

에 .. 그렇습니다 .. 


앱 스토어 심사 이슈

앱 스토어 심사를 할 때 있었던 이슈들을 공유하자면 ...

 

1. 빌드 숫자는 버전에 포함되지 않는다.

그러니까, 만약 앱스토어에 빌드 1.0.0 이 올라가 있고 빌드가 (1) (2) .. 이렇게 쌓이게 될 경우 빌드 수를 올려도 앱스토어에 이미 1.0.0 버전이 올라가 있기 때문에 버전 자체를 바꿔야 한다.

그렇지 않다면 앱 유효성 검사에서 오류가 난다. (아카이빙 과정에서) 

 

즉, 내가 현재 앱스토어에 1.0.0 버전을 올린 경우 (판매 중인 경우) 1.0.1로 버전을 올리고 빌드 수를 (1) 이렇게 해서 올려야 한다.

 

 

2. 리젝을 먹었다면? 당황하지 말고 ~ 수정하라는 것을 수정하면 된다.

만약 애플 심사를 맡겼는데 .. 거절됨 / 거부됨 이렇게 알림이 온다면 .. 그렇다 .. 리젝 먹은 것이다. 

눈물이 차올라서 고개를 들어 ... 흐르지 못하게 .. 또 살짝 웃어 .. 

 

앱스토어 커넥트 앱이 있다면 푸시 알림으로 리젝 되었다는 것을 알 수 있고,

자세한 내용은 이메일을 통해서도 알 수 있다.

 

나같은 경우에는 .. 나이 제한으로 인해서 리젝이 왔는데 ..

약간 의문인 점은 앱을 출시하기 전에 내 앱과 비슷한 앱의 연령대를 확인해보니 

🔵 쏘카도 4+였고

🟢 그린카도 4+로 되어 있어서 

나도 그렇게 설정을 하고 애플 심사에 맡겼는데 .. 

 

 

이렇게 답이 왔다.

근데 뭐 .. 맞는 말이다 .. 미성년자 친구들이 .. 면허도 없는데 어떻게 나눔카 앱을 사용할까 .. ? 

아무튼 저것이 문제라고 하니까 .. 수정하면 된다. 

 

1. 먼저 문제가 있는 빌드를 심사에서 제거/삭제하면 된다.
심사에서 삭제하고 난 뒤, 앱 정보에 가서 > 위의 사진에서 볼 수 있는 것처럼 연령 등급을 수정하면 된다.

2. 그리고 수정한 내용을 저장하고 다시 심사에 추가하면 된다. 

 


개발 공수 및 업데이트 

이번 1차 릴리즈에서는 큰 기능을 많이 넣지 않고 최대한 옹골찬(?) 앱을 만들어보자 .. 라고 목표를 세웠었다.

그래서 그런지 개발공수는 밀리지 않았다. (약간 .. 생각보다 후반부에 정해진 계획으로 안하고 앞서 나가서 놓친 이슈들이 있었다 ;;)

 

🟢 계획이 밀리지 않았다는 점에서는 다행이지만 ..

🔴 초반부터 좀 더 욕심을 갖고 여러 목표를 세워서 구현했으면 어땠을까 하는 아쉬움이 든다.

🔴 MVVM을 도입하고 싶었는데 .. 사실 아직도 잘 모르겠어서 .. 이후에 공부를 좀 더 빡세게 하고 적용을 해야겠다고 다짐했다 ..

 

릴리즈를 좀 더 빨리 한만큼 .. 업데이트 계획도 좀 더 세밀하게 세워서 (지금 두개 정도 생각하고 있는데 ..)

이런 것들을 하나씩 추가해서 업데이트 할 예정이다 !! 

 


추석 .. 전후로부터 시작을 한 것 같은데 .. 어쩌다보니 벌써 이렇게 출시도 하고 업데이트도 하고 있는 것이 .. 제법 신기하고 얼떨떨하다 ..

사실 앱 프로젝트는 할 일이 많았는데 .. 그동안 출시를 하지 못하게 되면서 내 인생에서 출시란 없는 것인가 .. ? 라는 생각도 했다 .. ㅋㅋ 누구는 되게 쉽게 하던데 .. 나만 이렇게 어려운 것인가? 라는 생각도 했는데 .. 어찌저찌 .. 하게 된 것이 .. 조금 신기 .. ? 하다 .. 

 

한번 해 보았으니 .. 업데이트 하면서 .. 좀 더 기능도 다양하고 코드도 깔끔한 프로젝트로 만들고 싶다 .. 

 

아자자 .. !! 니캉내캉 .. ~