2019-04-09 17:32:00 (2019-04-20 04:55:29)

나는 클라를 배우고 싶지 않은 사람이라 어지간하면 안하려고 하는데 왜 우리나라는 안드로이드 대비 아이폰 개발자 씨가 말라서 자꾸 아이폰 개발을 할 일이 생기는지 모르겠다. 이 말을 벌써 몇 달 째 하고도 또 하고 있지만 말이다. 내가 다니는 곳이 문제인지 왜 가는 곳마다 이러나 모르겠다. 왜 내가 들어가면 아이폰을 개발할 일이 생기고 아이폰 개발자를 구하려고 하지만 못 구하며 결국 내게 일이 돌아오는지 모르겠다. 내가 뭘 알고 있으면 말도 안 해, 어차피 나도 백지부터 시작해야하는데 왜 늘 내게 오지. 죽어도 못한다고 해야하는데 하라 그러면 하고 치우는 내 탓인가?

 

아이폰 개발 죽어도 안하겠다고 말했던거 치고 회사에서 이러니 저러니 매번 말이 달라지는데 나름대로 노력을 하지 않는 것도 아니라서 이제는 포기하고 적응하기로 했더니 나름 또 할만하다. 남의 코드 대충 고쳐서 어거지로 돌아가게 하려니 속터졌던거지 백지부터 차근차근 필요한 부분만 정리해서 얹고 있자니 꽤 재미있다. 이래서 자꾸 새로운거 생기면 내게 오는 걸까. 기본적으로 개발 언어는 뭐든 재미있으니까 어쩔 수 없다.

 

처음 objc를 접했을 때는 java를 메인으로 쓰던 시기라 불만이 참 많았다. 언어는 c랑 비슷하기는 한데 어거지로 비틀어 강제로 객체화 시켜놨으면서 또 완전 객체지향도 아니고 어정쩡하다고 생각했고 애플에서는 툭하면 이거도 안 돼, 저거도 안 돼, 차라리 아예 안 되면 모를까 코드로 만들 수는 있지만 앱스토어에 올리려고 하면 리젝시키곤 해서 어쩌라는 건가 싶은 심정이었다. 이제는 앱스토어 승인도 빠르고 개발자 자율성을 많이 존중해줘서 훨씬 할만해졌더라.

 

아직은 objc를 쓰지만 swift도 잠깐 해봤더니 재미있었다. 다음에 시간되면 기존 앱을 전부 swift로 이전할까 싶다. 구글 검색 결과도 누가 많니 하더니 이제는 누가 봐도 swift가 훨씬 많더라. 버전별로 코드가 다른 게 좀 걸리지만 어느 정도는 컴파일러가 자체적으로 수정해주기도 하거니와 유저들이 같이 고민해주니까 괜찮겠지. 난 내 코드는 물론 오픈 소스를 갖다쓸 때도 warning이 안 떴으면 하는 사람이라 내가 만들지 않은 코드도 warning을 못 고쳐서 안달인 사람인데 objc 오픈 소스는 유지보수를 한 지 너무 오래되어서 ios 10.0 이전 타깃이라는 경고가 뜨는 게 영 신경쓰이더라. 굳이 남이 만든 코드 unlock해서 고치자니 이게 의미가 있나 싶고 swift 오픈 소스를 갖다 쓰기에는 아무리 애플에서 호환에 문제 없다 그래도 당장 며칠 전에 xcode 업데이트 했다가 빌드가 안 됐던 걸 겪고 나니 별로 그러고 싶지 않더라.

 

내가 예전에 개발 잠깐 했을 때는 vib 그만 쓰고 새로 나온 xib 쓰세요 그러던 시절이라 이번에 다시 시작하면서 참 이거저거 많이 추가됐다 생각했는데 본격적으로 개발하기 시작하니까 정말 뭐가 많더라. 전에도 언급했던 storyboard나 asset, vector image같은 좀 쓰다보면 알게 되는 그런 차이도 워낙 많아서 많이 바뀌었다고는 생각했는데 역시, 내부적으로도 참 많이 달라졌다. 예전 코드 옮기면서 하나씩 찾아보니까 callback 개념이 있는 코드를 블록 형태로 쓰도록 바뀌었다면서 예전에는 이랬지만 지금은 추천 안한다는 코드도 눈에 보이는 대로 바꿔넣고 있다. 똑같은 속성도 대입해도 되고 대입 함수를 써도 된다는데 뭐가 맞나 모르겠다. 보통은 번거로운게 나중에 나온 방식이니까 번거로운 쪽으로 쓰고 있다.

 

objc가 나온지 10년도 넘었겠다 알면 알 수록 예전 코드와 요즘 코드가 전부 뒤섞여서 복잡하다는 건 확실히 알겠더라. 이래서 swift를 만들었구나 싶었다. 난 이번에 개발 시작해서 firebase 연동하면서 cocoapods라는게 있다는 걸 처음 알았는데 swift랑 섞이니까 swift 전용 라이브러리 저장소가 분리되어 있다는 것도 알았다. NS가 붙어있는 오브젝트는 잡스가 애플에서 나가있던 시절 회사에서 만들었던 코어에 있던 개념이고 아닌 건 어쩌고 저쩌고 별 걸 다 알아가고 있다.

 

이제 개발에 필요한 건 어느 정도 알았다고 생각했는데 animation 수정하면서 기존에 쓰던 로직을 좀 간략화하려고 찾아보니 CAAnimation을 선언해서 addAnimation 하는 방식이 있지만 이건 예전 방식이고 이제는 UIView에 animateWithDuration을 추가하는 방식을 쓴다는데 전자는 애니메이션을 정의해서 더해주는 거라 원하는 대로 동작하는데 후자는 애니메이션 진행 후 형태로 지정 시간동안 바뀌는 방식이라 360도 회전을 루프시키려고 하니까 한 바퀴 회전한 상태와 원래 상태가 같은 상태라 바뀌지 않는대서 180도씩 회전하도록 재귀 방식으로 구현한 예제가 있길래 그대로 해놓긴 했는데 메모리 문제는 없을지 걱정하고 있다.

 

기존 코드가 제대로 작동하기는 하는데 허점이 많아서 이걸 고쳐야하나 고민하면서 일단 찾아라도 보자 싶은 마음에 이거저거 찾아보다보니 자꾸 잡지식이 늘어나는 것 같다. 예를 들자면 GPS 신호 받을 때 허용, 허용안함 외에 앱이 실행 중일 때만 허용이 생겨서 유저가 선택한 방식에 따라서 후처리 해줘야하는 부분이 있는데 사용자가 허용안함을 눌렀을 경우에 현재 제대로 작동하지 않는다던지 정상적으로 사용하고 싶으면 허용을 누르라던지 뭔가 설명을 해줘야 할 거 같은데 아무 반응 없이 빈 화면이 떠있다던가 하는 거 말이다. 내가 사용자라면 이거 왜 동작 안하나 싶은 일이 있을 수도 있을 거 같은데 또 한편으로는 기획하는 사람도 컨펌내는 사람도 지금까지 몰랐던 주의사항을 굳이 내가 넣어야하나 싶기도 하다. 그러면서도 일단 지금까지 말도 안 되게 대강 나오던 안내 메시지는 그럴듯하게 바꿔놓기는 했는데, 어쩔까나. 이런 고민 없이 있는 코드 그대로 가져다 쓰면 개발이 훨씬 빠를텐데 내 무덤을 내가 파는 기분이로다.

 

오늘은 애니메이션 이벤트가 background 모드에 들어갔다 foreground 모드로 돌아오면 멈춘다는 걸 알았다. gps 같은 건 잘 동작하길래 알아서 돌아가나보다 했더니 background 사용 권한이 괜히 있는 게 아닌가보더라. 하긴 gps는 앱을 종료하기 전에는 계속 작동하니까. 난 뷰가 다시 보이는 거니까 viewDidAppear이나 viewWillAppear에서 처리 가능할 줄 알았는데 예상 외였다. 예전에 개발하던 언어에서는 그랬었는데 여기서 Appear은 사용자 입장에서 시각적으로 사라지는게 아니라 프로그래밍적으로 다른 화면이 보였다 나타나는 걸 말하나 보더라.

 

기존 코드에서는 이 부분 자체는 처리가 되어있지 않았다. 또 다시 이걸 굳이 보완해야하나 생각하긴 했지만, 넘어가고, 앱이 foreground인지 background인지는 AppDelegate에서 알 수 있다. 그래서인지 AppDelegate.h를 import해서 상태값을 불러와서 처리하는 부분도 있었다. 또 어떤 부분에서는 AppDelegate에서 현재 존재하는 controller를 for문을 돌려서 컨트롤러 별로 동일한 이름의 함수를 두고 nil이 아닌 함수를 실행시키기도 했다. 난 두 방식 다 그저 그래서 고치지 말까 생각했었는데 notification을 쓰면 된다더라. 이게 silent noti의 일종인 걸까? 그건 push 개념에서 나오는 건가? noti를 필요해서 쓴 건 처음인데 selector를 넘겨주면 해당 이벤트가 발생할 때 알아서 실행시켜주는 방식인가보더라. 기존에 ui단에서 소스코드 쪽으로 드래그해서 만들어 쓰는 경우는 봤는데 그 역인 것 같았다. 예제에서 함수명:을 넘겨주면 된대서 그렇게 했더니 warning이 뜨길래 찾아보니까 (id)sender가 있어야 한다던데 이게 그거랑 똑같으니까 말이다.

 

자꾸 재미있어져서 큰일이지만, 클라이언트에는 기본적으로 내가 제일 싫어하는 요소가 있으니 분명 또 싫어질거다. 부디 이 의욕 그대로 조금이라도 더 빨리 개발을 했으면 좋겠다. 아, 이제 아이폰에서 보안 안 된 서버는 접속도 안 되더라. 벌써 한참 전부터 그랬나보던데 우리 서버는 보안이 불안해서 plist에 해당 구분자를 추가해서 억지로 붙고 있는데 이거 생각하니까 또 서버를 하고 싶기도 하다. 예전 개발자가 어찌저찌 만들어서 잘 모르겠다고 나몰라라 하려고 했는데 서버가 꺼지는 오류가 생겨서 할 수 없이 복구하면서 대강이라도 건들 수 있다는 사실이 들켜버린 골치아픈 구서버... 그 골아픈 프레임워크도 하다보면 재밌어지려나. 먼 이야기 같은데 또 막상 시작하면 모를 일이지. 아이폰도 정말 하기 싫었었는걸.


번호 분류 제목 글쓴이 날짜
575 일반 친구란 좋은 거야 19/07/26 01:27
574 일반 격조했다 19/07/24 23:59
573 일반 윈도우 업데이트가 세상 거창하네 19/05/01 06:57
572 개발 갑자기 델리게이트 패턴을 이해하게 됐다 19/04/26 08:51
571 개발 이걸 어디에 적어놔야 기억을 할까 19/04/24 03:47
570 일반 사람은 바깥 바람도 쐬고 살아야 해 19/04/24 02:18
569 개발 드디어 코드 블럭을 제대로 쓸 수 있게 됐다 19/04/22 10:25
568 개발 아 진짜 재밌네 19/04/20 05:49
567 개발 점 표기법과 대괄호 표기법 19/04/19 02:52
566 개발 하 수학 공부를 좀 더 열심히 했어야 했어 19/04/15 16:07
565 개발 이번에는 통신부 함수를 분리하기로 했다 19/04/10 18:41
564 개발 알게 된 거 조금씩 적어야지 19/04/09 18:35
개발 진짜 별 걸 다 알게된다 19/04/09 17:32
562 개발 이게 최선인 걸까 싶다 19/04/08 16:35
561 개발 가끔은 재부팅도 필요하다고 한다 19/04/05 14:06
560 일반 사람은 바쁘게 지내야 하나 봐 19/03/26 15:09
559 일반 영웅 넘버는 언제 들어도 참 좋다 19/03/24 01:53
558 기록 나는 어떤 사람이 되어야 할까 19/03/23 02:37
557 기록 우울하다 말하기 전에 몸이 아픈 건 아닌가 생각해보자 19/03/21 02:17
556 일반 눈이 오고 있어요 여러분 19/03/15 19:17