iOS 프로젝트/카멜레온

[iOS] 카멜레온 개발 일지 - 5 (업데이트 Alert)

유정주 2022. 6. 25. 17:00
반응형

안녕하세요. 개발하는 정주입니다.

 

오늘은 카멜레온 개발 일지 - 5 (업데이트 Alert)에 대해 포스팅하려고 합니다.

반드시 업데이트를 해야 할 때 Alert을 띄워서 앱스토어로 이동시키는 기능을 많이 보셨을 것입니다.

카멜레온 앱에서도 해당 기능이 필요해 보여 구현해 보았습니다.

 

* 해당 포스팅은 대략적인 개발 일지로 자세한 내용은 필요시에만 따로 포스팅합니다.

 

 

업데이트 Alert가 왜 필요했을까?

카멜레온 앱에는 필요 시 업데이트를 요구하는 Alert를 띄웁니다.

개인적으로 좋아하진 않지만 직접 앱을 개발해보니 필요한 상황이 있었습니다.. ㅠ

 

버그 발생

카멜레온 앱 릴리즈 초기에 심각한 버그가 발견되었습니다.

가로로 찍은 사진을 서버로 보내면 파일은 정상적으로 보이지만 파이썬에서는 회전시켜서 load를 하는 버그입니다.

 

예를 들어 왼쪽과 같은 정방향으로 보이는 사진이 있다고 합시다.

이 사진이 만약 스마트폰에서 가로로 찍은 사진이면 오른쪽 사진처럼 회전되서 이미지를 load하는 겁니다.

 

버그의 원인은 이미지 메타데이터의 Exif에 있는 회전 정보때문이었고

앨범에서도, 앱에서도, DB의 이미지에서도 모두 정방향으로 보여 발견하지 못했던 것입니다..

이미지를 회전해서 load하니 face detection이 제대로 되지 않아 문제가 컸습니다.

 

버그 해결하고 외양간 고치기

버그를 발견한 뒤 내부 회의 끝에 앱에서 버그를 수정하기로 결정했습니다.

원인을 파악한 상태였기 때문에 버그를 수정하는 것은 어렵지 않았습니다.

 

버그를 수정하고 업데이트까지 했지만 유저에게 이를 알리는 것이 불가능했죠...

이는 꽤나 치명적이었습니다. 저만하더라도 앱이 이상하면 삭제를 하지 업데이트를 하지 않으니까요.

 

이런 상황을 직면하고 소잃고 외양간 고치는 느낌으로

지금이라도 업데이트 Alert 기능을 넣기로 결정을 했습니다.

 

 

구현 방법 고민

어떻게 구현을 하면 효율적일지 고민을 해보았습니다.

서버의 도움을 받아야 했기 때문에 새로운 api를 만들기보다 기존 api를 수정하는 방향으로 고민했습니다.

카멜레온 앱은 런치 화면에서 서버로부터 최신 버전을 받아옵니다.

api로부터 강제 업데이트 버전도 함께 전달 받으면 앱에서 처리할 수 있지 않을까? 하는 생각이 들었습니다.

 

 

구현하기

{
	“result” : “ok”,
	“message” : “1.1.3” //최신 버전
}

기존의 version api response입니다.

 

{
	“result” : “ok”,
	“message” : “1.1.3”, //최신 버전
	“data” : “1.1.0” // 강제 업데이트 해야하는 버전
}

여기에 data key 값으로 강제 업데이트를 해야하는 버전을 추가한 것이죠. (형태는 못 생겼지만 넘어가주세요.. ㅎ)

 

private func compareVersion(curruent: String, compare: String) -> Bool {
    let compareResult = curruent.compare(compare, options: .numeric)
    switch compareResult {
    case .orderedAscending:
        return true
    case .orderedDescending, .orderedSame:
        return false
    }
}

data에서 String을 파싱하여 현재 버전과 비교합니다.

String의 compare의 numeric 옵션은 버전의 x.x.x 형식처럼 동일한 형식의 문자열일 때 내부 숫자의 크기를 비교할 때 유용합니다.

compareResult는 왼쪽(위 코드에서는 current)이 더 작을 때 orderAscending 결과를 갖습니다.

이때 true를 return 하고 Alert를 띄우면 됩니다.

 

 

마무리

오늘은 강제 업데이트 Alert를 띄우기에 대한 개발일지를 작성해보았습니다.

처음 버그를 발견했을 때는 가슴이 철렁했고 소규모 프로젝트라 이런 부분을 간과했다는 것이 속상했습니다.

이번 경험을 살려서 다른 프로젝트에서는 앱의 업데이트에 대해서도 고려하면서 개발을 해야겠다고 다짐하는 계기가 되었습니다.

 

감사합니다!


아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

 

반응형