안녕하세요.

혼자면서 팀이라고 부르는 개발팀 이들러입니다.^^


1인 체제를 선택하면서 몇 가지의 결심을 했습니다.

그 중 하나는 두 달에 하나씩 신규 앱을 만들어서 출시하자. 라고 하는 계획이었습니다.

그래서 죽이 되든 밥이 되든. 만족하든 만족하지 않든 두 달에 하나씩 앱을 내놓고 있습니다.

2월에 처음 아이폰 개발을 시작해서

4월 : EzCurrency 쉬운환율계산 https://goo.gl/YUbPqd

6월 : JustOneLine 한 줄 메모장 http://goo.gl/q5wpte

7월 : EzCurrency 쉬운환율계산 2.0 업데이트

8월 : EzCurrencyLite 쉬운환율계산 무료버젼 https://appsto.re/kr/Dthleb.i

8월 : Monorial 모노리얼 다이어리 : 일상을 새기다 http://goo.gl/Ti93mz


여기까지 달려왔습니다. 8월의 환율계산기 무료버젼처럼 파생적인거 빼고는 어떻게든 꾸역꾸역 진행하고 있습니다.

지금 보면 맘에 안드는 부분도 있는데요. 언제나 . 완벽보단 완성이 낫다라는 생각으로 일단 진행하고 있습니다.

특히 8월 말부터 심사를 진행했던 모노리얼이 9월1일이 되서야 런칭이 된게 개인적으론 많이 아쉽습니다.


오늘은 모노리얼 다이어리를 만들면서 배웠던 점을 정리하도록 하겠습니다.

얼마 전 앱을 개발할 때 프로그래밍적인 기술 뿐만이 아닌 다른 부가적인 준비사항들을 함께 이야기 했었는데요.

해당 글은 JustOneLine 개발개요에서 작성했었습니다. http://blog.eedler.com/10

이 글에서 기존 글과 내용이 겹치는 부분은 자세히 작성하진 않았습니다.


기존 글과 마찬가지로 누군가에게 알리기 보다는 저 자신을 위한 글이며,

대단한 전문적 기술이라기 보다는 시작하고자 하시는 분들에게 조금이나마 도움이 되길 바라는 마음에서 작성합니다.

앱개발 방법이라기 보다는 모노리얼을 제작할 때 제 생각의 흐름을 적었다고 생각하시면 오히려 맞습니다.


앱소개

모노리얼 다이어리 : 일상을 새기다


앱스토어 : Monorial 모노리얼 다이어리 http://goo.gl/Ti93mz

개요 : 일상을 기록하세요. 자신을 위한 하루 한 편의 글.

기획의도 : 한 장의 사진과 한 줄의 메모를 한 화면에서 보여주는 제품.

비슷한 컨셉이었으나 기존 JustOneLine 을 만들면서 사용자가 제어하는 부분 너무 적다는 느낌이 강했습니다.

앱을 통제하고 있다는 느낌을 받을 수 없는게 문제였습니다.

그래서 제어부분을 붙이고, 무작위적인 작성이 아니라 하루 한 번 자신을 위한 글이라는 컨셉을 강조하기 위해 날짜를 강조하는 형태가 필요했습니다.

그래서 다이어리 형태로 제작하고자 결정하였습니다.


가격 : 무료 (인앱결제로 광고제거 기능을 추가하자)

생각의 과정 :

1. 광고 없는 유료버젼이 어울린다고 생각했지만 JustOneLine의 경험상 유료결제가 약간의 장벽이라고 생각했습니다.

2. 그래서 광고를 붙이고 무료버젼을 해야겠다고 생각했습니다.

3. 하지만 제작자 본인조차 좋아하지 않는 광고를 사용자에게 제공하긴 어려워서 버튼 하나 누르면 광고가 사라지면 어떨까 생각했습니다. 근데 그냥 사라지면 제가 먹고 살기 힘드니까. -_-;;;

4. 글보기 화면에서 공유버튼으로 SNS에 공유를 하면 일정기간 광고가 사라지는 컨셉을 생각했습니다.

5. 광고가 상관없는 유저는 그냥 사용하면 되고, 광고가 싫은 유저는 제 앱을 사용하고 있음을 SNS에 공유함으로써 제 앱을 홍보해주고 일정기간 광고를 안보길 원했습니다.

6. 이러한 방식은 여러 게임에서 이미 사용하고 있었으니 부담은 없었습니다. SNS에 공유하고 혜택 받기 형태는 게임에서 널리 사용하고 있었으니까요.

7. 처음엔 공유 버튼을 눌러서 게시 버튼을 눌렀는지 그냥 창을 닫아버렸는지 체크가 되는지조차 몰랐지만 일단 진행하기로 결정하였습니다.



작업 정리


실제로 앱개발을 진행하다보면 프로그래밍이 그렇게 큰 부분이 아니라는걸 깨닫게 됩니다.

아주 중요하지만 전부는 아니죠. 그래서 다른 많은 부분들에 세세한 신경을 써야하며, 다른 외부자원을 많이 활용해야 합니다.

물론 전 겁나 돈 많이 벌고 겁나게 잘 나가는 프로개발자가 전혀 아닙니다.

그래서 이런 말씀을 드릴 만한 자격이 되는진 모르겠지만

앱을 기획 하실 때 앱의 기술, 기능만을 기획하는게 아니라. 출시를 어떻게 할지, 홍보를 어떻게 할지 같이 고려하시길 바랍니다.

물론 저도 여전히 그 부분을 잘하지 못해서. 지금도 배우고 있는 단계입니다. 아주 혹독하게... ^^;;


1. 할일관리

2. 소스관리

3. 사진이미지

4. 광고붙이기

5. 분석도구

6. 소개글 작성

7. 인앱결제

8. 홍보

참고. 언어는 Swift, 개발환경은 Xcode로 진행 했지만 특별한 사항이 없어서 제외했습니다.



1. 할일관리 트렐로 https://trello.com/

어떤 작업을 하시더라도 할일관리는 필요합니다. 10년 전쯤 처음 업무라는걸 하기 시작하면서 여러가지 도구를 거쳐왔는데요.

메모장, 포스트잇, 엑셀, 스케줄러프로그램 등 그 중에서 단연 제 맘에 들었던 도구는 역시나! ..... 노트였습니다... 연습장 -_-;

최근 몇 년 사이에는 일하는 공간이 여기저기 바뀌면서 노트로는 좀 힘들어서 프로그램적인 도구를 찾아야했습니다.

그 때 여성 게임개발자인 저의 콤푸타 스승님의 추천으로 트렐로를 알게 되었습니다.

할일관리는 여전히 트렐로입니다. 도구는 한 번 정하면 바꾸기 힘드므로, 여전히 전 트렐로를 사용하고 있습니다.

포스트잇처럼 이리저리 왔다갔다 할 수 있어서 편리합니다.

개인적 취향차이겠지만. 좀 더 할일관리 태스크관리 느낌을 받고 싶으시다면 분더리스트(https://www.wunderlist.com/)도 추천합니다.


혼자 하면서 칸반 같은 개발방법론을 도입. 이라고 하기엔 너무 거창합니다. 그냥 개발방법론 까지는 아니지만 전 현재 할 일을 최대 세 개까지만 놓습니다.

여러 경험으로 전 제가 엄청 뛰어난 업무능력자가 아니라는 것은 알고 있습니다.

살펴보니 동시 할일이 세 개를 초과하면 일의 진척이 오히려 느려진다는 것을 알게 되었습니다.

그래서 일이 겹칠 경우 기존 일을 예정목록으로 돌리든, 마무리를 해서 완료목록으로 넘기든 해서 항상 하고 있는 일은 세 개 이하로 유지하고 있습니다.

트렐로는 이러한 점에서 현재 할 일의 갯수가 명확하게 눈에 들어와서 즐겨사용하고 있습니다.



2. 소스관리 https://bitbucket.org/ https://www.sourcetreeapp.com/

 

프로그램을 만들다 보면 중간중간에 저장할 일이 있고, 다른 사람들과 협업을 해야할 경우도 있습니다.

이럴 경우 단순 컨트롤S 만으로는 힘듭니다. 진행하다 뭔가 변경사항이 있을 경우. 우리에겐 컨트롤Z가 있지만. 3일 전 상태의 코드로 컨트롤Z를 할 수는 없습니다.

소스관리 시스템은 그 때 그 때의 상황별 코드와 코멘트를 남길 수 있으며, 다른 사람들과 협업을 하며 하나의 통일된 코드를 유지하고자 할 때 좋습니다.

실무에서는 프로덕트 코드가 존재하고 브랜치 등으로 분류를 따로 만들어서 작업 후 완료되면 프로덕트 쪽에 합치는 방식도 사용합니다.

단순하게 프로덕트코드는 언제나 돌아가는 코드여야 하는 원칙이 있게 되는거죠. 팀의 성격에 따라서 사용방식은 천차만별이지만 사용하시길 추천드립니다.

전 Git을 사용합니다. 어떤 걸 사용하더라도 개발을 들어가기 전에 한 번 알아보시기 바랍니다.

JustOneLine 의 글에서도 언급했지만 제 호스팅서비스는 여전히 비트버킷입니다. 프로그램은 소스트리를 여전히 사용하고 있습니다. 왜 그런지는 모르겠지만 전 이게 좋습니다. ^^



3. 사진이미지 https://unsplash.com/


프로그램에 사용할 때 무료인 사진을 찾는 일은 생각보다 어렵습니다.

모노리얼에서는 늘 새로운 배경화면이 나왔으면 좋겠다고 생각했고, 무료로 사용할 수 있는 이미지여야 좋았습니다.

물론 당연하게도 그 사진은 이뻐야죠. 인터넷에 찾아보면 몇 개의 무료로 사용할 수 있는 라이센스를 갖고 있는 이미지사이트들이 있습니다.


앱을 개발하시기 전에 사용할 자원이 사용해도 되는 것인지 확인하시기 바랍니다.

가장 좋은건 역시나 정당한 대가를 지불하고 사용하는 것입니다.

그림, 사진 이미지 뿐 아니라, 버튼이미지, 폰트 등도 라이센스를 꼭 확인하시기 바랍니다.



4. 광고붙이기 https://apps.admob.com/

기존 유료앱을 만들 때는 생각하지 않았기 때문에 얼마전 처음으로 앱에 광고를 부착했습니다. 예전에는 애플에서 iAd라는 서비스를 했었는데 이제 더이상 지원하지 않아서

다른 회사의 광고플랫폼을 부착할 필요가 있었습니다. 그래서 선택한건 제일 큰 회사꺼 쓰자는 생각에. 구글의 애드몹을 선택했습니다.


만드시고자 하는 앱이 무료앱이라면 광고 부착을 많이 생각하실텐데요.

전 애드몹을 선택했지만 광고플랫폼 회사가 애드몹만 있는 것은 아닙니다. 다른 몇 개의 회사에서 지원하는 광고플랫폼을 잘 비교해보고 추가하시기 바랍니다.



5. 분석도구 https://console.firebase.google.com/

제가 선택한 툴은 파이어베이스입니다. 구글애널리틱스가 있는데. 향후에 구글이 파이어베이스라고 하는 서비스로 모든 것을 대동단결? 할 것이라는 소식을 저의 조언자께서 해주셔서 파이어베이스로 붙였습니다.


사용자분석은 이젠 그리 특이한 개념이 아닙니다.

실제로 자신의 앱이 어떤 사람이 어디에서 어떤 버튼을 누르며, 하루 몇 시간을 사용하는지 분석하는 일은 당연한 수순이 되고 있습니다.

전에는 저도 급한 맘에 자세히 알아보지 않고 분석도구를 추가하지 않았는데요. 앱에 관한 사용자분석은 반드시 해야하는 부분이라고 생각합니다.

물론 전 기존에 일단 출시하고 사용률이 좀 올라가면 부착할 생각이었지만. 이번에 경험해보니 처음부터 부착하더라도 부담없는 작업으로 되어 있습니다.

기획단계에서 이러한 서비스들도 함께 고려해 보시기 바랍니다.



6. 소개글 작성

소개글 작성은 영어와 한글이 있습니다.

전 영어를 유창하게 잘하는 편이 아닙니다. 그래서 상품설명의 문구를 작성하더라도 글을 감흥이 느껴지게는 작성할 수 없습니다.

그래서 애초에 영어는 감성이 없는 설명식으로, 한국어는 좀 감성적으로 작성하였습니다.

소개글은 아직도 수정 중인데요. 계속 변화를 줄 생각입니다. 사용자 입장에서 스토리와 기능을 적절하게 섞는 설명은 여전히 저에겐 너무 어렵습니다.

이번엔 영어 번역은 집단번역 서비스 플리토(https://www.flitto.com/)를 이용하지 않고, 근처 지인에게 간단한 검수만 받았습니다.

앱등록시 스크린샷은 전처럼 https://launchkit.io/ 서비스를 이용했습니다.


최근 앱스토어 관리 웹사이트 아이튠즈커넥트(https://itunesconnect.apple.com/)  의 변경으로 모든 사이즈를 다 업로드할 필요 없이.

5.5인치 하나만 업로드 해도 앱에서 크기별로 특별한 레이아웃의 차이만 없다면 심사가 가능하며, 각 디바이스별로 알아서 보여집니다.

그래서 5.5인치 디바이스용 하나만 업로드 한 후 전체 크기별 디바이스에 적용하였습니다.



7. 인앱결제

모노리얼 앱스토어에는 인앱결제 마크가 있는데 실제로 인앱결제는 없습니다.

광고제거 기능을 추가 했었는데 8월달이 지나는 것이 싫어서 일단 출시하자는 생각에 광고제거 인앱결제를 빼고 출시했습니다.

언제나 완벽보다 완성이 낫다는 생각에 -_-; 기능은 추후에 업데이트 하면 되는 것이니까요.

인앱결제 때문에 같은 사유로 몇 번이나 리젝을 당했기 때문이었습니다. 전 당황했습니다. 전 아무리 해도 잘 됐거든요 -_-;

나중에 확인해보니 제 핸드폰은 터치ID가 없는데 터치ID 기능이 있는 경우 비밀번호를 입력하려고 하다가 취소를 하면(?) 뭐... 여하튼 그런 과정을 하면 제대로 작동 안하는 오류가 있다는 것을 알게 되었습니다. 아직 고치진 못했죠.... -_-; .  그래도 앱의 사용에는 문제가 없어서 일단 인앱결제는 빼고 출시했습니다.


많은 앱들이 광고제거를 위해 인앱결제를 붙이고 있지만 유료, 무료버젼을 따로 만드는 경우도 있습니다.

컨텐츠가 쌓이는 경우에는 유료를 구매했을 때 쌓였던 컨텐츠에 대한 고민 때문에 인앱결제가 유용합니다.

그러나 환율계산기처럼 자료가 쌓이는 형태가 아니라면 선택은 오롯하게 팀의 결정이겠지요.

앱을 만드실 때 결제부분을 어떻게 하실 지도 같이 고민하시기 바랍니다.

저 같은 경우 막연하게 인앱결제로 해야지 라고 생각했다가 생각보다 긴 시간을 이 곳에 썼습니다.

차라리 처음부터 인앱결제는 없이 출시하고 추후에 붙였더라면 출시시기가 훨씬 당겨졌을 것입니다.



8. 홍보 - 아직 모르겠음.

마케팅은 정말 어렵습니다. 어떻게 알려야할지 제 앱의 포지션을 어떻게 잡아야할지는 정말 어려운 부분입니다.

앱 소개에 기능만을 쭈욱 나열한 순수히 개발자적인 소개글을 보고

마케터로서 조언해주시는 분은 '사람은 제품을 그렇게 선택하지 않는다'는 것이었습니다.

명확한 상황과 포지션을 고민해보라고 합니다. 그래서 지금 고민 중입니다.




마무리


이번 글에는 프로그래밍적인... 코드를 어떻게 작성해야지 하는 부분은 언급하지 않았습니다.

그것까지 쓰면 내용이 너무 많이질꺼 같아서 ^^;

앱의 화면에 버튼을 어떻게 만들고 탭 했을 때 어떻게 보여질지 같은건. 그런건 구글에서 하나 하나 찾아보셔도 되는데.

전체적인 흐름을 언급한 글은 별로 없길래 한 번 작성해봤습니다.


전문가분들에겐 별거 아닐 수도 있겠지만,

첫 시작에 어떤거부터 해야하지 고민하시는 분들에게는 전체적인 흐름이 이렇다는 것을 말씀 드리면 도움이 될꺼 같았습니다.

이러한 도구나 플랫폼의 구성, 선택? 같은 것들은 오롯이 팀의 결정입니다.

취할게 있으면 취하고, 버릴게 있으면 버리면 됩니다.

다만 취할 수도 있었는데, 생각 못해서 고려대상에서 제외되지 않길 바라는 마음에서 이렇게 정리해보았습니다.

긴 글 읽어주셔서 감사합니다. ^^


참고글 JustOneLine 개발개요 http://blog.eedler.com/10


모노리얼 : 일상을 새기다 http://goo.gl/Ti93mz 

하루 한 편 당신만을 위한 글을 써보세요.^^

JustOneLine 개발관련 개요


안녕하세요. 혼자면서 자신을 팀이라고 부르는 아이폰 앱을 만드는 팀 eedler입니다.

작업 중인 아이폰용 앱이 출시되었습니다.

iOS 앱을 제작하는 과정에서 알게 된 여러가지를 남겨볼까 합니다.

공유의 목적이라기 보다는 작업을 하면서 알게된 여러가지 사항을 머리 속에서 한 번 정리하고

추후에 유지보수 등의 작업을 할 때 참고하기 위함입니다.

개발자 관련 일을 하신다면 대부분 아는 내용일텐데요. 하지만 처음 iOS로 앱을 개발하기 위해 공부 또는 준비하는 분이시라면 아래 내용을 한 번 참고하시기 바랍니다. 다른 분들은 제가 겪었던 시행착오들을 조금이라도 덜 겪게 되길 바랍니다.



앱소개

이름 : JustOneLine

앱스토어 : https://goo.gl/q5wpte

개요 : 생각을 한 줄로 작성하는 앱.





순간순간의 생각을 간단하게 메모하기 위한 앱입니다.

단순하게 작성하는걸 좋아하는 제작자의 성격대로 극단적으로 한 줄만 쓸 수 있는 앱을 만들었습니다.

글을 작성시 랜덤한 형식으로 저장된 사진과 함께 간단한 카드 형태로 표시되며, 이를 페이스북이나 트위터에 쉽게 공유 할 수 있습니다.

또는 사진첩에 저장해서 배경화면 등으로 사용가능 합니다.



앱출시배경

처음엔 단순한 의도였습니다.

일주일에 두 개 정도 영어와 한글이 함께 보이는 페이스북페이지 운영이 목적이었습니다.

주소 : https://www.facebook.com/Justoneline-555549504615174

그런데 명언만 올리자니 심심해서 이미지를 삽입하려 했는데 이미지를 구하는 것도 힘들었고, 이미지편집 프로그램으로 사진에 글씨를 넣는 것도 상당히 불편했습니다. 그래서 화려하진 않지만, 글을 쓰면 간단하게 표준적인 형태를 제공해주는 앱이 필요했습니다.

기존 사진 수정 앱들이 사진에 글씨를 넣게 해주지만 기록의 의미가 약했습니다. 

사진에 글을 쓰는 개념이 아닌 글을 쓰면 이를 사진 위에 보여주는 개념입니다.

랜덤한걸 좋아하는 제작자의 성격대로 자신의 사진을 배경으로 쓰거나 직접 글자의 정렬 등을 설정해서 저장하는 개념은 처음부터 제외했습니다.

환경설정에서 랜덤의 범위를 설정할 수 있으나, 기본적으로 모든 것은 랜덤하게 표시됩니다.



작업도구 및 환경, 서비스

내용들은 아래 항목입니다.

하나씩 다시 소개하겠습니다.


0. 컴퓨터 -> MacBookAir

1. 할일관리 -> https://trello.com

2. 소스관리 -> https://bitbucket.org/https://www.sourcetreeapp.com/

3. 사진이미지 -> https://unsplash.com/, https://pixabay.com/https://tinypng.com/

4. 개발환경 -> Xcode7, Swift2, iOS 9.0, SQLite

5. 앱 소개글 작성 -> https://www.flitto.com/https://launchkit.io/




0. MacBook Air

2011년도에 대세에 휩쓸려서 구매한 맥북입니다. -_-;

11인치 모니터, i5 1.6 GHz, RAM 4GB, SSD 126G 의 사양입니다.

다른건 없습니다. 외부모니터도, 매직마우스도 없습니다.

느립니다. 화면은 작습니다. 특히 Storyboard를 편집할 때는 스크롤의 압박을 받게 됩니다.

마우스를 구매하고 싶었으나 돈이 없어서 터치패드로 끝까지. ㅋㅋ

코드 작성이라던지 레이아웃 편집을 할 때 살짝 끊기는 현상만 있을 뿐 의외로 개발이 불편하진 않았습니다.

시뮬레이터를 돌릴 때도 약간 기다려주면 문제 없이 잘 돌아갔습니다. 이 부분에는 애플에게 감사해야겠습니다.

사실 5년 전 프로그램으로 이런 비주얼감 넘치는 IDE는 좀 무리일까 생각했었는데. 생각보다 무리 없이 돌아가서 행복했습니다.

어여 돈 많이 벌어서 장비를 업하고 싶네여. ㅋㅋ




1. 할일관리 https://trello.com

우선은 할 일을 적어놓는 칠판이 필요했습니다.

저희가 사용했던 서비스는 trello.com 입니다.


웹사이트와 앱을 이용해 팀간에 공유해야 할 내용을 포스트잇 형태로 정리할 때 유용합니다.

각각의 리스트에서 다른 리스트로 드래그앤드롭으로 옮기면서 작업이 가능하며, 팀원간에 실시간으로 반영됩니다.

기본적인 기능만을 사용한다면 무료로 사용가능합니다.


아래는 JustOneLine을 만들 때 사용했던 보드입니다.

저 같은 경우 1. 할일, 2. 하고있는일, 3. 완료된일, 4. 배운점. 네 개의 리스트를 만들고

할일에 목록을 작성 후 작업 하기 전에 하고있는일로 이동시키고 작업합니다.

작업이 완료되면 완료된 일로 옮기며 작업했습니다. 추후까지 기억해야 할 내용이나 재미있었던 내용은 배운점 리스트로 이동해서 잊지 않도록 수시로 확인했습니다.

처음엔 할일에만 목록이 너무 길어서 가슴이 갑갑하지만 시간이 지날 수록 하나씩 빼내서 작업하는 맛이 있습니다.

태스크관리나 이슈관리툴로는 다양한 서비스들이 있지만 저희 같은 극소수의 인원들이 작업하는 경우 https://trello.com 가 맞다고 생각하여 적용하였습니다.

기존 회사에 다닐 때는 Redmine(https://redmine.org/) 을 회사 서버에 설치하여 사용하였으나, 소수인원의 팀이 사용하기에는 오히려 초기세팅부터 부담되어 제외되었습니다.

그 외에 할일관리툴이라면 Wunderlist(https://www.wunderlist.com/) 서비스가 좋습니다.

trello.com와 wuderlist는 성격이 약간 다르지만 프로젝트를 진행함에 있어서 소수인원이 할일관리를 하기에는 더없이 좋습니다.

체크리스트, 댓글, 파일첨부, 기한관리, 멤버도 관리 가능합니다.

기기간의 데이터연동이 자유로워 스마트폰앱과 노트북을 이용한 웹. 이곳저곳에서 작업하는 경우 매우 유용합니다.

다들 좋은 서비스들입니다. 무엇보다 무료이니까요.




2. 소스관리 https://bitbucket.org/https://www.sourcetreeapp.com/

소스버젼관리로는 Git을 사용하고 있습니다.

Git은 분산버젼관리시스템으로 최근에 많은 곳에서 사용되고 있습니다.

소스코드를 어떤 특정시점으로 되돌리는 것도 가능하고, 기기간의 소스코드 공유, Branch를 만들어서 테스트나 새로운 기능의 시도 후 머징하는 것까지

Git을 사용해야 하는 이유는 넘치고 있습니다. 개인이 혼자 개발하는 경우 귀찮아서 버젼관리를 사용하지 않는 개발자분들을 몇 분 뵌적이 있는데, 저는 사용하실 것을 적극 추천드립니다. 최근엔 툴도 좋아져서 그리 귀찮지 않게 사용 가능합니다.

Git을 호스팅으로 제공하는 서비스들이 있습니다. 대표적인 곳이 https://github.com/ 이며 이미 많은 개발자분들이 사용 중입니다.

제가 선택한 서비스는 https://bitbucket.org/ 입니다.

팀원이 5인 이하라면 private 공간을 무료로 사용할 수 있습니다.

소스트리(https://www.sourcetreeapp.com/)는 bitbucket과 함께 Atlassian이 제공하는 프로그램입니다. 

명령어로 작동하는 git을 툴로서 사용하기 쉽게 제공하는 프로그램입니다.

SourceTree는 기존에 다니던 회사에서 동료의 추천으로 사용하게 되었습니다. Xcode를 사용하니 그 안에 있는 SourceControl을 사용하면 되는데 Xcode를 처음 사용하는 저는 약간 어색했고, 예전 웹 관련 작업을 할 때부터 사용해오던 소스트리가 그냥 익숙해서 좋았습니다. 그냥 쓰던거 쓰는걸 좋아하는 제 성격상 별 고민없이 그냥 소스트리를 선택했습니다. 프로그램상에서 커밋, 푸시, 등등의 기능을 손쉽게 버튼 하나만으로 사용 가능합니다. 최근 나온 다양한 IDE 또는 에디터들은 Git을 포함하고 있는 경우가 많이 있습니다. 아니면 플러그인 형태로 제공을 하던지. 처음 배우시는 분들이라면 Git이든 SVN이든 어찌됐건 다른 사람과의 협업을 위한 관리시스템은 꼭 다뤄보시기 바랍니다.




3. 사진 이미지 https://unsplash.com/https://pixabay.com/

앱에 사용할 이미지를 구입해야 하는 상황이 왔습니다.

그래서 저렴한 금액의 이미지소스 사이트를 여기저기 찾아보던 중 https://www.graphicstock.com/ 을 찾게 되었습니다.

그러나 제가 이미지를 결제해서 사용하더라도 저희 앱을 사용하는 사용자들이 앱화면을 캡춰해서 공유할 경우 저작권이 애매해지는 경우가 발생하였습니다. 저는 정당히 지불하였으나, 앱의 사용자들이 해당 이미지를 구매한 것이 아니므로, 함부로 공유하면 안되는 결론이 되서,

결국은 CCO 이미지를 사용하기로 하였습니다. 너무 많이 사용해야 해서 양심이 좀 찔렸지만, 저희는 가난한 개발팀이라 -_-;;

상업적으로 무료로 사용할 수 있는 이미지를 구하는 사이트는 다양하지만 저희가 선택한 사이트는 https://unsplash.com/https://pixabay.com/  두 군데입니다. 무료이미지 관련 내용은 http://blog.eedler.com/9 에서 다시 정리하였습니다.

이미지를 웹상의 서버에서 제공할지 아니면 이미지사이트의 API를 이용할지, 앱 리소스에 포함시킬지 고민했습니다만,

제가 남미여행 중에 생각한 아이디어라서 인터넷이 되지 않는 환경을 고려해야겠다고 생각했습니다. 그에 따라 용량을 차지하지만 앱의 리소스에 포함시키기로 하였습니다. 앱을 개발할 때 사용하는 이미지는 대부분 PNG, JPG가 대부분일 것입니다. 하지만 그 파일들은 높은 퀄리티가 보장될 수록 용량을 많이 필요로 합니다. 저는 이미지를 100장 정도 사용할 예정이었는데 만약 이미지당 500kb라고 하면 용량이 너무 커지고. 사진이미지에 수십메가의 용량을 사용하긴 싫었습니다.

그래서 이용한 곳이. https://tinypng.com/ 입니다.

png나 jpg 파일을 올릴 경우 사람 눈으로 봐서는 구분 못하는 정도로 이미지가 압축되며, 사이즈가 줄어듭니다. 많게는 70% 이상.

물론 하나씩 이미지관련 프로그램으로 조정 후 리사이징이 가능합니다. 다른 분들은 가능하시겠지만 저희는 그런 것조차 쉽지 않은 디자이너의 유전자가 조금도 섞이지 않은 순수 무감각, 무센스를 자랑하는 개발그룹이므로. -_-

사용 방법은 간단합니다. 사이트가 접속 후 Drop 공간에 파일만 Drop 해주면 바로 처리되고 다운로드 할 수 있습니다.




4. 개발환경 Xcode7, Swift2, iOS 9.0, SQLite

iOS 앱을 개발할 것이기 때문에 Xcode의 사용은 당연했습니다. 버젼 7.x 입니다.

언어의 선택은 Swift와 Objective-C 에서 선택해야 했는데. 어차피 둘 다 할 줄 몰랐고, 새로 배워야 하는 입장에서는 애플에서 밀고 있는 Swift를 익히고 적용하는 것이 앞으로를 위해서도 더 낫겠다고 판단하였습니다.

데이터를 저장할 공간에 대해서 고민을 하게 되었습니다. 첫번째 앱 CCWidget(http://goo.gl/YUbPqd/) 의 경우 저장해야 할 데이터가 환경설정된 값 정도로 적었기 때문에 학습의 목적으로 PropertyList에 저장하기로 했고, Widget과의 연동은 AppGroup에서 하니 데이터의 저장공간이 특별히 상관 없었습니다. 그런데 JustOneLine 앱의 경우 글이 계속적으로 쌓이는 형태의 앱이다보니 DB적인 형태가 필요했습니다.

iOS에서의 DB는 CoreData 를 이용해서 처리한다는 것을 찾게 되고 데이터의 CRUD를 구현하였으나, 세세한 접근이나 세팅이 오히려 저에겐 부담이었습니다. 웹작업을 할 때 주로 SQL Query를 직접 작성했던 저로서는 Query를 직접 작성하는게 오히려 편했고, DB파일을 iCloud에 단순 저장할 수 있는 형태가 좋았습니다. 따라서 SQlite 파일을 직접 생성하고 쿼리로 제어할 수 있는 FMDB(https://github.com/ccgus/fmdb)를 적용하게 되었습니다.

아래 항목은 제작하면서 사용했던 작업방식, 라이브러리, 패턴, iOS 클래스 또는 프로토콜 등의 목록입니다.

구글링을 해보니 대부분 영어 자료였습니다. 예상했던 것보다도 한글 자료를 찾기가 힘들어서 각 항목에 대해서는 추후 하나씩 다시 사용법을 작성하려고 합니다.

- View (기본적인 뷰, subview를 담기위한 컨테이너 역할, 키보드액세서리뷰)

- UILabel, UIButton, UITextField, UITextView, UIImage (전반적 내용표시, 입력, 수정, 삭제)

- UITableView (리스트 표시용)

- PageViewController (상세내용 카드표시용)

- NSUserDefaults (환경설정 저장용)

- PickerView (환경설정 선택창용)

- NSFileManager (파일 제어용)

- Sqlite3 (데이터저장용)

- FMDB (sqlite3 제어용)

- FontAwesome (아이콘표시용)

- Localizable.string (다국어지역화)

- Singleton Pattern, Delegate Pattern (클래스디자인)


5. 앱 소개글 작성 -> https://www.flitto.com/https://launchkit.io/, App Icon Resizer

앱스토어에 제품을 올리기 전에 해야할 일

- 아이콘 만들기

- 설명글 작성하기

- 스크린샷 준비하기 

등등이 있습니다.


아이콘 만들기

앱스토어에 제출을 위해서는 다양한 크기의 아이콘 파일이 필요한데, 단순함을 추구하는 저희의 철학대로 최대한 간단한 형태의 아이콘을 만들었습니다.

아이콘선별과정 : http://blog.eedler.com/11

불편한 사항은 앱에는 홈스크린과 검색 또는 알림센터 등에 나오는 아이콘 등 다양한 크기의 아이콘을 함께 제공해야 합니다.

그럴 때 사용한 프로그램이 App Icon Resizer 입니다. 원래는 유료프로그램으로 알고 있는데 제가 다운받을 때는 무료이벤트 중이었습니다. 앱스토어에서 보여질 메인 아이콘 1024크기의 png파일 하나만 있으면 자동으로 각 종류에 필요한 아이콘파일로 리사이징 해줍니다. 물론 크기가 변경되면서 이미지의 깨짐현상을 어느정도 감수해야 하는데, 사람 눈으로 보기에 별 차이가 없어서 무시하기로 했습니다.


설명글 작성하기

한글(무조건 좋은말), 영어... 응?-_-;

설명글을 작성해야 했습니다. 일단 앱의 버젼이 영어, 한국어 두 개의 환경에 반영되도록 만들었고, 영어는 피할 수 없다는게 사실이므로,

한글로 작성한 소개글을 영어로 번역하는 작업이 필요했습니다. 하지만 저희는 영어를 유창하게 하는 사람이 없고, 있다해도 이런저런 비교를 위해 번역을 의뢰하기로 하였습니다. 간단한 앱 소개글이라 직접 작성해도 되지만 아무래도 다른 사람들 의견이 들어간 내용을 참고해서 그대로 쓰던, 수정을 하던 하는 것이 옳다고 판단하였습니다.

이용했던 서비스는 플리토(https://www.flitto.com/)입니다.

플리토는 집단지성을 이용한 번역서비스입니다. 누구라도 번역의뢰를 할 수 있으며, 누구라도 번역가가 될 수 있습니다. 이 곳에 번역하고자 하는 텍스트를 올리면 글자수에 준해서 금액을 지불하게 됩니다. 포인트 구매 후 해당 포인트를 번역비용으로 지불하게 되는데요.

단순 앱 소개글 정도의 내용이라면 2,000원 내외로 가능하므로, 참고를 위한 단순 번역의뢰로 상당히 매력적입니다. 번역가를 지정할 수도 있고, 번역비용의 견적을 문의할 수도 있는 다양한 기능이 있습니다. 번역해준 포인트를 모아서 다른 물품을 구매할 수도 있습니다. 외국어를 공부하시거나 어느 정도 외국어에 능력이 되시는 분이라면 지하철에서 오고가며, 번역요청된 글을 번역하셔도 소일거리(?)로서 상당히 좋습니다.


스크린샷 준비하기

최근 앱의 스크린샷은 디바이스나 시뮬레이터에서의 단순 캡춰 말고도, 다양한 형태의 이미지를 올리는 경향입니다.

그 중 가장 많은 형태는 텍스트를 넣고, 아래 캡춰이미지가 들어가는 아래 같은 형태입니다.


게다가 앱스토어의 등록을 위한 스크린샷은 다양한 디바이스 크기를 만족해야 합니다. 그 디바이스들마다 해상도도 다 다릅니다.

물론 인터넷에 찾아보면 기기별 해상도를 템플릿으로 만들어놓은 포토샵용 파일들도 있으나, 저희는 포토샵을 그리 잘하는 인원이 없고,

아이폰 기기 이미지도 크기마다의 스크린샷을 만드는게 여간 힘든 일이 아니었습니다.

그래서 저희가 선택한 서비스는 https://launchkit.io/ 이었습니다.


해당 사이트에 가면 스크린샷빌더라는 서비스를 제공하는데 기기별 해상도와 기본적 프레임을 제공해주며, 캡춰한 이미지를 선택해주기만 하면 기기별로 다운로드가 가능합니다. 


그런데! 두둥! 유료-_-; 1년 99달러였습니다. 가난한 팀에게 적은 돈은 아니지만 앱을 하나만 만드는게 아니고 유지보수도 생각하니 버젼별로 관리도 쉬워서 이용하게 되었습니다. 전체적으로 서비스는 만족스럽습니다.




이상 기본적인 개요에 대한 설명이었습니다. 각 틀에 대한 간단한 소개만 했습니다.

생각보다 글이 길어져서 사용했던 기능들에 대한 보다 자세한 소개는 각각의 포스트를 다시 작성하도록 하겠습니다.

이 글 또는 JustOneLine 앱 관련해서 궁금하신 사항이 있으시면 언제라도 justoneline@eedler.com 으로 문의 주시기 바랍니다.

JustOneLine 많은 이용바랍니다. eedler였습니다. 감사합니다.^^

JustOneLIne 앱스토어 링크

  1. 해랑 2016.06.21 15:32 신고

    완전 멋있으십니다. ㅎㅎ 혼자개발은 아니지만 따로 혼자 프로젝트 해보려고 할 때마다 게으름에 부딪혀서 실패했었는데.
    여러가지로 자극도 받고 좋은 정보들 얻어서 갑니당~~!!1

    • yongho.yu 2016.06.21 15:57 신고

      예상보다 글이 너무 길어져서 작성하는 저도 좀 당황했는데요... 좋게 봐주셔서 감사합니다.^^

  2. Kyeongan 2016.06.22 06:28 신고

    생활코딩보고 왔는데, 글 너무 잘 읽었습니다. 우연히 테마도 저와 같아서 놀랐구요. :)

    • yongho.yu 2016.06.22 15:06 신고

      테마. 이게 제일 이뻐서.^^;; 도움이 되셨다면 좋겠네요. 감사합니다.^^

  3. kon 2016.06.22 08:45 신고

    정말 좋은내용이네요. 즐독 했습니다. 좋은 포스팅 감사합니다!

iOS - 앱 상단 상태바를 없애자.


상태바가 뭔가 하면.

바로 이겁니다.

앱의 기획의도에 따라 상태바가 보이지 않는게 더 어울릴 때가 있는데요.

그럴 때 해당 상태바를 손쉽게 없애는 방법을 안내하겠습니다.


의외로 쉽게 없애는게 가능합니다

각 View 의 ViewController 클래스에 아래 소스만 추가해주면 됩니다.

override func prefersStatusBarHidden() -> Bool {
        return true
 }

return 을 true 인가 false 인가 라고 설정하면 반영됩니다.


하지만 모든 ViewController에 해당 함수를 넣는 것도 약간은 불편한데요.

쉽게 Xcode에서 설정할 수 있습니다.


1. info.plist 에 View controller-based status bar appearance 를 NO 로 추가한다.


2. 프로젝트 설정에서 Hide status bar 에 체크한다.


각 View 마다 함수를 override라는 방식보다는 전체를 없애야할 경우 편합니다.

물론 특정 View에서 상태바가 필요하다면 전체 hide 설정 후 해당 View에서만

위에 함수 prefersStatusBarHidden 에서 false 를 반환해주면 해당 뷰만 Status bar 가 보이게 됩니다.


아래는 Status Bar 제거를 설정한 화면입니다.


설정에서의 특징은 LaunchScreen 에서도 상태바가 제거된다는 겁니다.

LaunchScreen은 따로 클래스를 만들어주기 불편한데 해당 설정은 시작 화면에서도 제거를 해주니 편합니다.


설정과 함수를 통해서 전체를 없애고 필요한 곳에 표시하든.

전체는 있게하고 필요한 곳에서만 제거하든. 각자 필요대로 사용하시면 됩니다.


이상 eedler 개발팀이었습니다.^^

+ Recent posts