해당 글은 개발 중심의 1년 단위의 회고 이며,

지난 글은 다음과 같습니다. 

2020년 회고 - https://bmwe3.tistory.com/1768

2019년 회고 - bmwe3.tistory.com/1754

2018년 회고 - bmwe3.tistory.com/1745

글 후반(#7이후) 에는 사소하고 개인적인 내용이니 넘겨도 괜찮습니다.

#1 Pillz 약먹자 신규 앱 출시(21.7.9)

https://apps.apple.com/kr/app/pillz-약먹자/id1551505433

작년에는 '앤트'라는 루틴 관리앱을 출시했었고 올해는 앤트 앱을 개발하면서 쌓은 노하우를 기반으로

약먹는 것을 도와주는 앱을 개발 및 출시했다.

앤트에 비해 데이터 관리의 복잡도가 증가했으며, UI 구성 역시 복잡해졌다

다른 디자이너와의 협업을 통해서 앤트와 차별점을 주려고 했다.

약먹자의 월별 신규 사용자 유입 지표. 다행히 앤트보다 사용량이 많다

 

#2 ios 개발자로서의 성장

  • ios 개발 관련 글도 많이 보고 Rx도 시도해보고 요즘은 combine을 시도해보는 중이다.
  • 혼자 토이프로젝트만 하니까 ios 개발에 대한 자극을 스스로 만들어내려고 노력하고 있다.

 

#3 github 지표

- 당연히 지난 기간에 비해서 커밋수는 많을수 밖에 없는데 ios 관련 코드의 비율을 많이 끌어올린 점. 신규 런칭한 앱에 대한 기록이 반영되어 있다는 점(약먹자)에서 20년보다 나아졌다고 할수 있겠다.(21.12.27 10.00 기준, 작년은 804회)

 

#4 블로그 포스팅

- ios 전업을 했을 때 관련 공부를 더 많이 하고 글을 더 많이 남길 수 있을거라고 생각했는데 성장이 더딘 것인지, 생각보다 많이 남기지는 못했다. 내년에는 조금 더 신경 써보도록 할 예정이다.

- user default : https://bmwe3.tistory.com/1769

 

[ios][swift]Userdefaults 사용

개발 환경 : Xcode 12.1 사용언어 : swift UserDefaults을 사용해서 사용자 정보를 저장하는 방법을 공유하기 위한 포스팅입니다. UserDefaults란 사용자 정보를 key - value 조합으로 저장하고 읽어올 수 있도

bmwe3.tistory.com

- customview : https://bmwe3.tistory.com/1772

 

[ios][swift] custom UIView 만들기

*개발 환경 : Xcode 12.4 / 사용언어 : swift UI를 구성하다 보면 반복적인 사용 혹은 동적인 생성 해서 구성하는 경우에 custom view를 만들어서 사용하게 되는데 custom view를 만드는 방법에 대해서 정리하

bmwe3.tistory.com

- 다크모드 지원 : https://bmwe3.tistory.com/1773

 

[ios][swift][dark mode 다크모드 지원]

ios 13부터 dark mode를 지원하기 시작했다 그래서 앱 역시 dakr mode 지원을 고려해야 한다. 폰에서 다크 모드 설정하는 방법은 다음과 같다. https://support.apple.com/ko-kr/HT210332 iPhone, iPad 또는 iPod..

bmwe3.tistory.com

 

#5 온라인/오프라인 수업 듣기

[인프런]

- 캡틴판교님의 vue.js 초급, 중급을 이수함 - 한 프로젝트에서 사이드식으로 ios 이외에 vue.js를 할 일이 있어서 조금 더 심도 있게 해보려고 수강함. 다만 수강 완료후 퇴사하면서 수강한 내용에 대한 숙지가 사라짐 ㅠㅠ

 

#6 책

- 스위프트 프로그래밍 swift5 11.30

- 눈떠보니선진국 10.30

- 데모테크DemoTech 10.5

- 직장인의 은퇴 없는 실전 주식투자 9.10

#7 개인사

항암 치료중에 가장 힘든 시기를 지냈다.

항암제는 최소한의 억제력을 발휘하지 못해서 폐 늑막에 물이 차고 척추를 부서 뜨리는 상황인데 주치의는 다음 약을 결정할수 없다며

입원 처방만 내고 손을 놓아버렸다.

그래서 치료를 위해서 6월말에 디디팩토리를 퇴사하였다. - 디디팩토리 관계자들에게 너무 미안하다 ㅠㅠ

너무나 다행히 잘 맞는 약과 병원을 찾아서 암은 줄어들고 있으며 항암제의 부작용에 대한 대처를 노하후가 쌓였으며, 필라테스트와 유산소를 통해서 전반적으로 건강을 끌어올리고 있다.

#8 영화 - 엄청 봤다 

181 스파이더맨 노웨이홈 1215 여의도cgv

180 앤트맨과 와스프 1209 디플

179 가디언즈오브갤럭시 vol2 디플

178 블랙팬서 1123 디플

177 킹스맨 골드써클 1119 디플

176 이터널스 1103 여의도cgv 4d

175 백투더퓨처3 1026

174 다크나이트 0604

173 백투더퓨터 2 0 525

172 백투더퓨처 1

171 천원돌파 그렌라간 홍련 0505

170 미션임파서블 로그네이션 0404

169 배트맨 비긴즈 0320

168 타짜 0227

167 놈놈놈 0208

166 스파이더맨 뉴 유니버스 0121

165 007 퀀텀오브솔러스 0109

#9 드라마/애니

141 ssss 그리드맨 1107

140 시그널 1019

139 갯마을차차차 1018

138 천원돌파 그렌라간 1015

137 원피스 시즌4 0822

136 프라하의 연인 0602

135 다이의 대모험(13개) 0518

134 gto 0415

 

#10 마무리


20년에 큰 일을 당하고 메디트 복직도 하고 디디팩토리로의 이직도 하면서 어떻게 한해를 넘겼는데 전이의 씨앗은 어쩌지 못했다.

21년은 항암제와의 싸움으로 1년을 보내게 되었다. 항암제가 맞는지 안 맞는지, 새로운 항암제의 부작용에 대해서 또 어떻게 대처할지. 이 병원에서 쓸 수 있는지 없는지.

막상 상반기는 맞는 항암제 찾는 시간이 되었고 하반기는 잘 찾은 약을 계속 쓰기 위해서 부작용을 줄여 나가는 과정이었다. 

다행히 잘 맞는 병원과 잘 맞는 약을 찾아서 성과를 보고 있는 것이 6개월이 되어 가는 시점에서 회고를 하고 있다.

그래서 22년에는 더 많은 개발 이야기, '김동현의 몸' 말고 '개발자 김동현' '사회인 김동현'으로서 더 많은 이야기를 할 수 있길를 기대할 수 있을 것 같다.

by 무위자연 2021. 12. 27. 10:32

ios 13부터 dark mode를 지원하기 시작했다

그래서 앱 역시 dakr mode 지원을 고려해야 한다.

폰에서 다크 모드 설정하는 방법은 다음과 같다.

https://support.apple.com/ko-kr/HT210332

 

iPhone, iPad 또는 iPod touch에서 다크 모드 사용하기

조명이 어두운 환경에서 최적의 시각적 경험을 하려면 다크 모드를 켜십시오.

support.apple.com

 

애플은 다크 모드를 지원하면서 기본색에 대해서는 라이트모드 / 다크모드에서 사용될 색을 정의하고 개발자가 시스템 색을 사용할 경우 화면 모드에 따라서 다른 색을 보여주도록 지원하고 있다. 이것을 Semantic Color라 한다.

예. system Blue를 사용할 경우 다음과 같이 각각 다른 색이 표현되게 된다.

더 많은 색에 대한 정의는 다음 페이지를 참고하면 된다.

https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/color/

 

Color - Visual Design - iOS - Human Interface Guidelines - Apple Developer

Color Color is a great way to impart vitality, provide visual continuity, communicate status information, give feedback in response to user actions, and help people visualize data. Look to the system’s color scheme for guidance when picking app accent co

developer.apple.com

 

1. Assets를 이용해서 다크 모드 지원하기

1-1. 모드 별로 다른 색을 정의 하기

assets에 "Color Set"를 추가하고 라이트 모드와 다크모드에서 사용할 색을 정의한다.

Appearance는 Any, Light, Dark로 나눠지는데 그 정의에 따라서 표현되는 색이 변경된다.

사용하는 방법은 다음과 같다.

assets에 정의한 색이름을 코드상에서 사용해서 UIColor를 생성한다.

1-2. 모드 별로 다른 이미지를 정의 하기

Color set과 동일하게 이미지 역시 Any, light, dark Appearance에 맞춰서 이미지를 추가해주면 app은 해당 모드에 맞는 이미지를 보여주게 된다.

any 에서는 빨강색 차가 보여질 것이고, dark 에서는 파랑색 차가 보여지게 된다.

만일 라이트 모드와 다크모드에서의 이미지를 동일하고 색으로만 구별한다고 한다면?

이미지 속성중 "Render As"를 "Template Image"로 바꾸고 

다음과 같이 코드를 추가한다면 라이트/다크모드에 따라서 이미지는 동일하고 tintColor로 다르게 보여질수 있다.

 

2. 현재 앱의 다크 모드 여부를 확인해서 코드로 지원하기

UITraitCollection.userInterfaceStyle를 이용해서 현재 어떤 모드인지를 알 수 있고 그 모드에 따른 색을 반환하는 예제 함수이다.

이런 식으로 view가 load 되는 시점 혹은 appear 되는 시점에 동적으로 이미지 혹은 색을 변경해줄 수 있다.

 

덧> 만일 앱이 다크모드를 지원하지 않고 항상 동일하게 보여지게 하고 싶다면 다음과 같이 처리하면 된다.

info.plist에서 appearance를 "Light"로 명시하면 된다.

by 무위자연 2021. 8. 31. 13:29

*개발 환경 : Xcode 12.4 / 사용언어 : swift

UI를 구성하다 보면 반복적인 사용 혹은 동적인 생성 해서 구성하는 경우에 custom view를 만들어서 사용하게 되는데

custom view를 만드는 방법에 대해서 정리하려고 한다.

만들고 싶은 customview는 UIView를 base로 하고 Label 1개, Button 1개 있는 파란색 View로 가정한다.

만들고 싶은 custom view

< xib 없이 custom view 만들기>

1. UIView를 상속 받은 클래스 파일을 추가한다.

2.. 초기화 함수를 선언해준다. 

3.. 필요한 UI 요소들들 추가해준다. - 필요한 constraint를 추가한다.

 

UI를 모두 코드로 만드는 것에 익숙하지 않거나 스토리보드를 이용하고자 한다면 다음과 같이 추가하시면 됩니다.

< xib 를 이용해서 custom view 만들기>

1. UIView를 상속받은 클래스 파일을 추가한다.

2. 1번에서 추가한 클래스가 사용할 xib 파일을 추가합니다.

- 1과 2번의 파일 이름이 동일해야 하는 것은 아니지만 가독성을 해치지 않기 위해서 가급적 동일하게 맞추는 것이 낫습니다.

3. 초기화 함수를 선언해줍니다. 이때 어떤 xib를 읽어올지에 대한 코드가 추가되어야 합니다.

4. xib 파일로 가서 다음과 같이 owner를 지정해줍니다.

4-1. File's Owner를 선택한다.

4-2. 우측의 Identity inspector에서 NSObject를 1번 클래스 명으로 바꿔줍니다.

5. 스토리보드에 Label, Button을 추가합니다.

 

<사용하는 방법>

어떻게 customv view를 만들었는지는 상관이 없으며

해당 custom view를 사용하는 화면에서

코드로 추가한다면 customview를 생성하고 추가한다.

스토리보드에서 추가한다면 UIView를 원하는 위치에 추가한 다음에 해당 UIView의 클래스명을 custom 클래스 이름으로 바꿔준다.

최종 적용한 화면은 다음과 같습니다.

by 무위자연 2021. 5. 20. 09:50

bmwe3.tistory.com/1757?category=130713 - 신장암 수술했어요

1. 작년 5월 신장 및 대정맥 전이에 대한 수술(오른쪽 신장 전체 적출)

2. 1달 뒤 암세포 씨앗이 커진 게 발견됨

3. 1차 약 복용 시작 - 보트리엔트 - 백발로 만들어줌.

4. 12월 1차 약으로 죽일수 있는 암세포는 모두 죽였으니 남은 게 5개가 있어서 2차로 면역항암제(옵디보) 시작. 6차 접종을 했으나 효과 없었음

5. 4월 4일부터 3차약 시작 - 토리셀-

1주일에 한번 맞는 건 참을수 있는데.

마치 여자 임신 증상 중 먹덧에 가까운 부작용을 겪는 중

- 속이 비면 기분 나쁘게 미슥거리고

- 음식에 대한 예민함이 극도로 올라가 멸치에 생선 비린내를 느끼고

소고기 미역국에서 고기 비린내를 느낄 정도

- 엄청난 피로감이 있다 계속 잔다 피곤한건 아니지만 계속 잔다

- 식욕은 떨어지고 진토제를 먹으니 1주일에 한번 크게 변비가 온다

- 이 상태에서 한번 근육통이 오니까 온 몸을 돌면서 몸이 아프다

- 17-19시 사이에 심해진다. 심해질 때 잠을 자면 고비를 넘길수 있다.

- 심해질 때는 오한이 올 때가 많다 이빨이 덜덜덜 할 정도로

괴롭다...

이렇게 괴로우니 이번 약은 효과가 있기를 바라면서 오늘도 맞으러 간다 ㅠ

덧> 이런 상태를 수개월간 버텨서 두 아이를 낳은 아내와 모든 먹덧 경험한 임산부에게 경의를...

by 무위자연 2021. 4. 22. 10:34

ios 개발 전업을 선언하고 5개월 가량을 다음 정도의 spec?을 가진 앱을 2개를 유지 보수 작업을 진행하였다.

전혀 다른 성향의 개발자(혹은 복수의 개발자)가 만들어 놓은 2개 앱을 어떠한 가이드 문서 없이 보면서

이런 부분은 배워야지 혹은 이렇게하지 말아야지에 대한 회고를 정리해보려고 한다.

1. 2개 앱 Spec: 서버가 있고 안드로이드를 지원하고 앱의 화면은 크게 2가지로 구성된다.

네이티브로 구성된 화면이 있고 필요에 따라서 웹페이지를 보여주는 화면이 있다.

앱의 주요 설정 및 공지사항 등은 서버에서 내려 받아서 보여준다.

local에는 사용자 설정 정보 이외의 데이터를 저장하지 않는다.

2 카테고리 혹은 키워드 별로 정리해보았다. 

- Naming

변수 네이밍은 내용이 명확하게 반영되어야 한다.

예. isNickDuplicate 개발자는 닉네임 중복을 확인한 상태를 저장하는 변수라고 썼지만 이름만 보면 닉네임이 중복인지 아닌지로 읽힌다?

> 나는 이것을 isNickDuplicateCheck 이런 식으로 바꿔 보았다.

- 조건문 처리

early return pattern을 가급적 쓰려고 노력해야 겠다.

- uicomponent

자주 사용하는 component의 경우 base를 선언하고 필요한 스타일이나 프로퍼티를 만들어두는 것이 좋더라.

예. 빨강색 글씨에 파랑색 배경색을 가진 버튼이 기본 버튼, 회색 글씨에 오렌지색 배경을 가진 버튼이 subbutton으로 쓰인다고 하면

UIButton을 extension으로 선언해서 스타일을 미리 정의하던지 아니면 baseButton을 만들고 그걸로 UI를 구성한다면 메인 색 변경 같은 정책 변경시 쉽게 대응이 되고 화면을 새로 구성할 때도 유용하다.

- tableview cell 구성시

index를 가지고 어떤 cell을 그릴지 혹은 어떤 동작을 할지를 정해진 코드가 한 앱에 많았다. 그러니 어떤 cell이 그려지는 것이 맞는지 index 값을 보고 판단하지 못하니 가독성이 떨어지고 순서를 바꾼다고 하더라도 실수의 여지가 생긴다.

그래서 각 cell이 그려지는 바가 나타나도록 string array를 이용하거나 데이터의 특정 값을 이용해서 처리하게 수정하는 것이 좋더라.

이것은 button.tag를 이용해서 처리하는 부분에서도 동일하다. tag 0, 1,2로 처리하면 당사자도 만들 당시에만 명확하게 아는 것이지

가독성이 떨어진다. 이것 역시 처리할 array를 목록을 가지고 동작하게 하는 것이 가독성이 높아진다.

- webview

앱의 특성상 webview base를 잘 만들어 놔야 어디서든 잘 쓸 수 있다.

- 파일 및 폴더 관리, static string 등등

한 앱의 경우 하나의 폴더에 파일이 20개씩 있으니 어떤 의미를 가지는지 알수 없고 찾기도 어렵다.

controller를 구성할 때도, view 폴더를 구성할 때도 의미 없는 하나의 나열로 구성된 것은 찾기가 어렵다.

특히 xcode 11.7에서 빌드해야 한 앱은 xcode가 하나의 폴더를 여는 것 조차가 버벅인다.

이 관리는 assets 관리도 동일하다. 이미지 관리를 위한 폴더를 거의 사용하지 않고

거의 하나의 폴더를 이용하다보니 assets의 미리보기도 제 역할을 할 수가 없다.

그래서 depeth 혹은 폴더수가 늘더라도 하나의 완결된 화면 혹은 분리 가능한 폴더로 나누어서 관리하도록 하는 것이 좋더라.

> context 단위이면 좋겠다는 표현일수 있겠다.

- ui 구성시에

여러 구역으로 나눠진 UI에서 UIView를 단독으로 사용하는 것은 지양해야 하고 작은 단위가 보여서 하나의 구역을 이루는 경우

UIStackView를 적극적으로 사용하자.

UIView 하위에 UIView 한땀한땀 그리면 순서가 바뀌거나 중간에 하나의 요소가 빠지면 수정하는데 시간이 많이 걸린다.

- viewModel은 꼭 쓰자

이상하게 2 앱 모두 viewModel을 쓰지 않는다. 그러다 보니 viewcontroller안에 로직이 있다보니 UI 관련 내용과 데이터 관련 내용이 혼재 되어 있어서 가독성이 떨어지면 비동기 처리 부분이 애매한 곳들이 있다.

- 뜬금없는 snapkit?

하나의 앱은 코드의 일관성이 있어서 한명이 만든 것인지 혹은 하나의 rule을 잘 지킨 것인지 알수 없지만

하나의 앱은 최초 개발자와 최초 개발자의 코드를 따르지만 수준이 조금 떨어지는 개발자, 그리고 앞에 두 사람과 다른 소속의 한사람이 짠 코드로 나눠진다. 3번째 사람이 만든 화면은 모두 snapkit을 짜여 있다. snapkit 쓰는 것 자체가 문제는 아니지만 전반적으로 스토리보드로 짠 앱에서 혼자 아는 snapkit으로 넣는 것...

난 개인 적으로 반대하는 편이다. 정답은 없겠지만. 

- Mappable 사용시

서버에서 주는 값이 어떤 타입을 의미해서 그 비교를 하는 값들이 하드코딩된 어떤 string이라면, 다음과 enum으로 정의하고 그 enum으로 비교하는 것이 오타를 줄이는 방법이더라.

nameType을 바로 사용하지 않고 enum을 정의해서 사용하게 mapping에서 구현함.

 

- appStore.

겪었던 것중에 특이했던 것은 앱의 어떤 화면에서도 안드로이드 혹은 다른 플랫폼에 대한 내용이 나와서는 안된다. 그것이 실제 동작과 무관한 공지사항 내에 이미지여도 마찬가지다. 나오면 무조건 심사 reject이다.

- 가장 중요한 것!!!!

fastlane은 사랑이다!!!

ios 개발자는 무조건 해야 한다 https://docs.fastlane.tools/

 

덧> 이번 회고를 바탕으로 개인 프로젝트 2탄 및 곧 진행할 신규 프로젝트 개발에 잘 녹여내고 그것에 대한 회고를 남기도록 하겠습니다.

by 무위자연 2021. 4. 14. 13:07

개발 환경 : Xcode 12.1

사용언어 : swift

UserDefaults을 사용해서 사용자 정보를 저장하는 방법을 공유하기 위한 포스팅입니다.

UserDefaults란 사용자 정보를 key - value 조합으로 저장하고 읽어올 수 있도록 애플에서 제공하는 기능입니다.

An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.

출처 : developer.apple.com/documentation/foundation/userdefaults

 

Apple Developer Documentation

 

developer.apple.com

 

다음의 경우에 사용해볼 수 있습니다.

- 앱에서의 사용자성 정보를 저장한다.

- UI 데이터 설정시 마지막 실행 때 정보를 저장하고 있다가 보여준다

- db 없이 간단한 데이터를 CRUD(만들고 읽고 쓰고 삭제하는) 지원

등등등.

 

해당 기능을 지원하는  데이터 형식은 다음과 같습니다.

UserDefaults 기능을 지원하는 형식

 

사용하는 방법은 다음과 같습니다.

예시1 - string 값을 저장하고 쓴다면?

예시2 - string array를 쓴다면?

지원하는 형에 따라서 마음껏 저장하고 불러오면 된다!!

 

단, 용량 제한이 없는 것은 아니니까 필요할 때만 사용하면 좋다.

애플 문서 : developer.apple.com/documentation/foundation/userdefaults/1617187-sizelimitexceedednotification

 

Apple Developer Documentation

 

developer.apple.com

One more Things!!!

UserDefaults에 서로 연관성을 가지는 데이터를 한번에 저장하고 싶다면?

Data 형을 쓰면 되는데 이 때 codable을 상속 받은 structure를 쓴다면 아주 쉽게 get / set 이 가능해진다.

codable이 뭔지가 궁금하시다면?

bmwe3.tistory.com/1765?category=682591

 

[swift] codable를 이용해서 json 파일 읽고 쓰기

개발 환경 : Xcode 12.1 사용언어 : swift 애플은 데이터의 json으로의 encode / decode를 지원하기 위해서 codable이란 프로토콜을 지원하고 있다 (Xcode 9.0+) developer.apple.com/documentation/swift/codable..

bmwe3.tistory.com

 

by 무위자연 2021. 1. 14. 11:00

해당 글은 개발 중심의 1년 단위의 회고 이며, 

지난 글은 다음과 같습니다. 

2019년 회고 - bmwe3.tistory.com/1754

2018년 회고 - bmwe3.tistory.com/1745

글 끝(#6이후) 에는 사소하고 개인적인 내용이니 넘겨도 괜찮습니다.

#1 QT + C++ 조합으로 마음대로 다룰수 있는 수준에는 이르렀다.

- 그래서 판교에 qt 시니어만 갈 수 있는 어디로의 이직도 진행하기도 했었다 하지만 암판정으로 진행을 모두 중지했었다

 

#2 토이 프로젝트 진행 사항

#2-1 회사에서 mobile 대응의 필요성과 내가 ios로 함께 할 수 있음을 어필하기 위한 여러 가지 준비와 데모를 진행했지만 더 나아가지 못하고 마무리함

- 19년에 주로 진행했던 MLinker - https://bmwe3.tistory.com/1755

 

P5 - MLinker 회고

MLinker라는 ios app을 만들게 된 https://github.com/zapping0320/MLinker #1 시작은 ios app을 만들고 싶었고 회사에 모바일 개발 능력을 보여주고 제안도 해보고 싶었다. #2 여러 고민 끝에 firebase를 공부해..

bmwe3.tistory.com

#2-2 암으로 인해서 바뀐 여러가지 가치관 중에 "하고 싶은 일을 하고 살자" 가 있었고 개발에서는 ios 개발이였고 암을 이겨내기 위해서 해야 할일을 매일 해야 하는 상황과 복직 대비한 프로그래밍 연습까지 포함해서 앤트(AntFootPrint) 라는 앱을 출시했다.

 

‎AntFootPrint Managing routines

‎"Easily manage what you don't want to miss every day Like a diligent ant leaving a footprint AntFootPrint helps to manage your routines easily You can select color and alarm sound when you make routines. * main functions. - add, modify, delete your rout

apps.apple.com

- 현재 신규 유저는 400명이고 active user는 50명 가량 active event는 400개 정도 발생하고 있다. 21년엔 유료화 진행 계획을 진행하고 있다.

active event에 대한 차트(from amplitude)

 

#2-3 앤트로 쌓은 노하우를 바탕으로 의료쪽으로 특화된 신규 프로젝트를 준비하고 있다. 21년 1/4분기 출시를 목표로 하고 있다. 

 

#3 github 및 블로그 상황

아무래도 QT의 경우는 방문자를 끌어들이기 어렵고 하나의 제너럴한 주제를 쓰기도 어려웠다

또한 업무의 연장으로 여겨져서 github에 추가 프로젝트를 진행하거나 기여하진 않았다

ios 개발이란 명확한 주제를 가지고 ios 개발자로서의 부족함을 채워 나가는 과정에서

토이프로젝트와 블로그 포스팅은 참으로 도움도 되고 열심히 하게 된다! - 코스피 만큼이나 신기록!

2020년 최종

블로그 포스팅은 10개 정도이며 일부 글에 대한 조회수가 꽤나 나왔던 이력이 있는데 여전히 mfc 관련 예전 포스팅이 인기가 많다 ㅎㅎ

 

#4 인강은 올해도 놓치지 않았다! - 내년 하반기엔 인프런에 강좌를 등록하기를!! 

[패스트캠퍼스]

- ios all in one (완료) ios 개발자 커리어에 큰 영향를 받았으며 좋은 사람들과의 스터디 계기가 되었다!!!

[인프런]

- php 기본 a부터 z까지 (진행중) 난데 없이 php를 해야 할 때도 인프런은 준비가 되어 있다!!

- SwiftUI 개념 익히기 (완료)

 

#5 이직

QT, c++ 개발자에서 ios 전업 개발자로 이직하였다

새로운 회사 이름은 디디팩토리 이고

회사 홈페이지(리뉴얼중)와 소개(pdf)는 아래. 2달 다녀보니 자유롭고 자기 업무 이외에 피곤한 일이 없다.

ddfactory.kr/front/main

ddfactory.kr/library/ddf.pdf

현재 기획자와 안드로이드/자바 개발자 구인중이니 관심 있는 분들은 페메를 주셔도 좋고 카톡을 주셔도 좋고

donghyun.kim@ddfactory.kr에 이력서를 보내주셔도 좋습니다!!!!!!

전 회사에 대한 회고는 요기

https://bmwe3.tistory.com/1764

 

메디트(Medit) 회고

해당글은 '메디트'라는 회사를 다닌 여정에 대한 글입니다. 재직 기간 2018.1.25~2020.11.6 총평 아이센스에서 아쉬웠던 것들 채웠던 시간이다 - 하나의 프로젝트에 집중하는 것 - 기획자, 디자이너와

bmwe3.tistory.com

 

지극히 사적인......

#6 책은

- 손만 대고 마무리 못한 책들이 많다 ㅠㅠ

- 클린 아키텍쳐 10.16

- 부의 인문학 1002

- 오버더 초이스 0816

- 주민의 헌법 7.9

- 프리랜서 시대가 온다 2.17

#7 영화는

- 해리포터 비밀의 방 1226

- 007 카지노로얄 1219

- 해리포터 마법사의 돌 1213

- 스파이 1107

- 명당 1002

- 노무현입니다 0523

- 타짜 원아이드잭 0522

- 카우보이비밥 더무비 0228

#8 동영상은 

- 루팡3세 4기 1211

- 스토브리그 0215

- 동백꽃필 무렵 0110

#9 개인사로

복덩이 딸을 만났고 - 이름이 김지율 입니다(20년 7월생)

아팠다 더 살지 못할 것을 고려할 정도로.

열심히 치료 받고 있으며 아팠던 이야기는 아래~

https://bmwe3.tistory.com/1757

아팠던 이야기에 대한 2탄은 21년 1/4분기에 행복하게 썼으면 하는 바램으로 살고 있다.

by 무위자연 2020. 12. 30. 23:35

#social login에 대한 정리

  • 개발환경 : Xcode 12.2

  • 사용언어 : swift

  • 용어 정리 - login /logout으로 통일함 > api 회사마다 sign / login 다르게 쓴다.

#1 kakao

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

#2 apple

 

Apple Developer Documentation

 

developer.apple.com

#3 google

 

Google Sign-In for iOS  |  Google Developers

Get users into your apps quickly and securely, using a registration system they already use and trust—their Google account.

developers.google.com

#4 facebook

 

iOS - Facebook 로그인 - 문서 - Facebook for Developers

 

developers.facebook.com

#5 naver

 

네이버아이디로로그인 iOS 개발가이드

NAVER Developers - 네이버아이디로로그인 iOS 개발가이드

developers.naver.com

 

각 social login을 구현한 프로젝스 소스 위치는 다음과 같습니다.

github.com/zapping0320/SocialLogin

 

zapping0320/SocialLogin

Contribute to zapping0320/SocialLogin development by creating an account on GitHub.

github.com

*해당 소스에는 applicatoin id 관련 정보는 제외 되어 있으니 사용할 경우 info.list을 추가해서 사용해야 함

 

 

 

by 무위자연 2020. 12. 3. 11:17

개발환경 Xcode 12.1

개발 언어 : swift

난 swift와 storyboard로 이루어진 app을 가지고 있고 애플 와치 se를 샀다.

그래서 가벼운 마음으로 app 데이터를 보여주는 watch app이 있으면 좋다고 생각했다.

작업 당시 xcode에서 생성 가능한 watch app의 크게 선택지가 다음과 같다.

1. watch app 개발을 하기 위해서는 새로운 target을 추가로 이동한다.

2. watch만으로 동작 가능한 앱인지 아니면 app와 연동이 되어야 하는지?

난 'app과 연동한다;를 선택했다.

 

3. 그 다음에 Interface를 선택한다. 

- storyboard와 swiftUI 중에 선택한다.

- storyboard를 선택하면 Life Cycle은 WatchKit만 선택 가능하지만 swiftUI를 선택하면 "SwiftUIApp"과 "WatchKit App Delegate"가 선택 가능하다.

> swiftUI 와 "SwiftUIApp"으로 설정한 경우 app과 watch app이 통신 하는 방법을 찾지는 못했다 ㅠㅠㅠㅠ

apple 문서에서도 swiftui + watchkit app 으로 되어 있었다 ㅠㅠ

developer.apple.com/tutorials/swiftui/creating-a-watchos-app

 

Apple Developer Documentation

 

developer.apple.com

그래서 난 storyboard와 watchkit app delegate를 하기로 했다.

데이터 공유의 방향은 다음으로 정했다.

- app에서는 데이터를 CRUD 모두 한다.

- watch에서는 데이터를 RU 만 한다. 

기본적인 통신으로 고려했던 방법은 다음과 같다.

1. 현재 app 에서 데이터를 저장하는 방법은 realm이란 라이브러리를 사용하고 있으니 realm 파일을 App Group을 이용해서 공유하는 방식으로 처리한다.

- 실제 이 방법으로 widget은 공유하고 있는 상태이다.

지만 watch app에 realm이 설치하는 방법을 찾지 못하였다 ㅠㅠㅠㅠ

2. app에서 생성한 데이터를 app에 알고 있는 경로에 json 파일로 저장하고 그걸 watch에서 읽는 방법

사용자에게 노출되지 않는 app내 혹은 app group 내 경로를 맞추는 데 실패하였다.

시뮬레이터 기준으로 다음처럼 나오더라고요

- app에서 얻은 경로

file:///Users/dd/Library/Developer/CoreSimulator/Devices/01BFA962-A2AA-47FC-B1C2-A4638317799A/data/Containers/Shared/AppGroup/724A8AEB-4451-4418-9767-9F78658CEDA1/wrecords.json

- watch에서 얻은 경로

file:///Users/dd/Library/Developer/CoreSimulator/Devices/5E88A606-60DA-4412-96D6-1D386B204C46/data/Containers/Shared/AppGroup/72538C89-C6E1-4FF0-ADB0-044942559F25/wrecords.json

3. 마지막으로 WCSession을 이용해서 json 데이터를 string으로 주고 받도록 한다!!!!!!!!!!!!!!!!!! 

WCSession 

The object that initiates communication between a WatchKit extension and its companion iOS app.

와치와 app 사이에 통신하기 위한 객체... 정도인 듯하다.

출처 :developer.apple.com/documentation/watchconnectivity/wcsession 

 

Apple Developer Documentation

 

developer.apple.com

해당 내용을 구현한 애플의 샘플 주소는 다음과 같다.

developer.apple.com/documentation/watchconnectivity/using_watch_connectivity_to_communicate_between_your_apple_watch_app_and_iphone_app

 

Apple Developer Documentation

 

developer.apple.com

하지만 난 다음 포스팅이 이해하기가 쉬워서 차용했다.

martiancraft.com/blog/2018/02/notification-handling-on-watchkit/

 

Notification Handling on WatchKit

According to our own Richard Turton, notifications are one of the key interaction modes on Apple Watch. A well-designed notification quickly presents any pertinent information to the user and may also give them the opportunity to act on said information. I

martiancraft.com

적용하는 순서는 다음과 같다.

1. app에 wcsession을 제어할 수 있는 코드를 추가한다.

1-1. app delegate에 Session handler를 이용해서 지원 여부를 확인하면 좋다

2. watch 에서도 app과의 메세지를 주고 받도록 session handler를 추가한다.

gist.github.com/zapping0320/cc1fe8368f83a09091fa3797c28003b4.js"></script>

3. app에서 watch로 메시지를 보낸다.

app의 session handler의 sendMessage 를 이용해서 watch에 string을 보낼 수 있다.

4. watch에서 app으로 메시지를 보낸다.

watch에서도 3번과 유사하게 session handler의 sendMessage를 활용하면 된다.

(3,4번 공통)은 메시지를 보내면 응답으로 오는 replyHandler를 이용해서 상대방 혹은 자기가 원하는 동작을 추가해서 구현할 수 있다.

이 때 주고 받는 데이터를 나의 경우에는 json string을 주고 받아서 Encode / Decode 해서 처리하였다.

이 부분에 대해서 궁금하다면 여기를 클릭 bmwe3.tistory.com/1765

 

[swift] codable를 이용해서 json 파일 읽고 쓰기

개발 환경 : Xcode 12.1 사용언어 : swift 애플은 데이터의 json으로의 encode / decode를 지원하기 위해서 codable이란 프로토콜을 지원하고 있다 (Xcode 9.0+) developer.apple.com/documentation/swift/codable..

bmwe3.tistory.com

마치기전에

왜 개발환경을 강조하면서 시작했을까 할 수 있다.

하드웨어를 영향은 아닌 것 같고 Xcode 12.2에서는 app <> watch  메시지를 연결해주는 WCSession 디버깅이 안 된다!!!

부디 유사한 프로젝트 진행하시는 분들에게 도움이 되길 바랍니다.

 

덧> 해당 개발 사항은 하기 앱에 적용되어 있으니 한번 보셔도 좋을 것 같습니다.

https://itunes.apple.com/US/app/id1527099671

by 무위자연 2020. 11. 30. 18:26

개발 환경 : Xcode 12.1

사용언어 : swift

애플은 데이터의 json으로의 encode / decode를 지원하기 위해서 codable이란 프로토콜을 지원하고 있다 (Xcode 9.0+)

developer.apple.com/documentation/swift/codable

 

Apple Developer Documentation

 

developer.apple.com

해당 프로토콜을 이용해서 쉽게 json 데이터를 다룰 수 있다. 특히 파일 저장이나 rest api 응답을 받아서 처리할 때 유용하다.

임의의 구조체를 선언하고 codable을 상속 받기만 하면 일단 사용할 준비가 완료 된다.

다음과 같은 임의의 구조체가 있다고 가정해보자.

1. 구조체를 json string으로 

해당 구조체를 이용해서 생성한 데이터를 json string으로 바꾸어서 파일까지 저장한다면 다음과 같이 구현할 수 있다.

 

json string으로 변환했을 때까지를 출력하면 다음과 같이 나온다.

 

2. json string을 구조체로

json 으로 저장된 파일에서 원하는 구조체로 읽어 내는 것은 다음과 같이 사용할 수 있다.

 

3. Date 형식의 경우

codable 프토로콜을 상속 받더라도 json 문법에 맞지 않는 Date 같은 데이터는 처리할수가 없는데

명시적으로 처리하는 방법을 알려준다면 encode/decode가 가능해진다.

encoding 할 경우 다음과 같이 추가해준다면, Date 형식을 읽고 쓰는데 문제가 없다.

 

*처음으로 코드를 캡쳐 대신에 gist를 써보니 깔끔하네요

by 무위자연 2020. 11. 19. 11:57