
TIL양식

① 배운 것 오늘은 첫날이라 이것저것 설치하고 면담하고 코드 잠깐 보고 집에옴 ② 회고 (restropective) 다들 친절하시고 분위기가 좋은 것 같다. 오늘 목표는 내 첫인상이 '아 얘 좀 이상한데, 같이 일하기 싫은데' 라는 느낌만 주지 말자. 그냥 '착하고 평범한 것 같다'는 인상만 주자 라는 거였는데 성공한거같다. ③ 개선을 위한 방법 내일은...

① 배운 것 기존 프로젝트가 빌드가 안됨 문제 1. targetSdk가 안깔려있음 - sdk28 설치 후 해결 문제 2. flutter_spine이라는 라이브러리때문에 컴파일이 안됨 - 해당 코드를 지우고 실행을 해봄>됨. 데브펍에 올라온 해당 디펜던시 샘플 프로젝트를 실행> 됨. 그럼 결국에 기존 프로젝트에 문제가 있다는건데 뭐가 문제인지 모르겠음. 해결...

① 배운 것 파일을 새로 받아서 spine_flutter 을 포함한 코드를 빌드 성공함. 그 과정에서 flutter clean, pub get 엄청 함.. ios AppTrackingTransparency 정책에 대해 알게되었고 플러터에서 추가하는 방법에 대해 알게됨 브랜치 이름 변경 ② 회고 (restropective) 일을 잘 못하면 어떡하지 라는 걱...

① 배운 것 마지막 글자에 받침이 있는지 확인하는 다트 코드 그룹으로 묶어서 테스트 코드작성 오늘 한 일 - 비슷한 주제의 api를 여러개 받지 말고 한 api로 통합해서 응답받음 ② 회고 (restropective) 크게 어려운 부분은 없었음. 전에 회사에서 경험한것 (어디까지는 내가 결정해도 되고 어디까지는 내가 물어봐야하는지)가 도움이 되는 것 같...

① 배운 것 uilts 클래스 매번 인스턴스화 했던것 싱글톤으로 변경 freezed 사용 시 모델 변경 후 watch로 제너레이트 파일 재생성 잊지말자 프로필 사진 업로드 방법 변경 > 기존 : base64로 인코딩 후 서버에 업로드 👉 base64는 인코딩 형식 상 binary 형식보다 33% 용량이 커짐. 업로드 버튼을 클릭 후 서버에 업로드 되는 동...

① 배운 것 Theme Widget을 알게됨 calendarDatePicker을 사용했는데 기본 Theme이 머테리얼 테마를 따라가서 보라색으로 나옴. 그래서 프로젝트 전체에 적용되는 Theme을 수정해야하는 줄 알았다. 그런데 Theme 위젯으로 calendarDatePicker를 감싸면 calendarDatePicker에만 적용되는 테마를 적용할 수 있...

① 배운 것 calendardatepicker2 라이브러리를 포크떠서 원하는대로 수정함. calendardatepicker2는 외국 라이브러리라 그런지 '월, 년' 순인데 한국 포맷에 맞추어 '년, 월'순으로 바꿈. ② 회고 (restropective) 외부 라이브러리를 원하는대로 뜯어보면서 다른사람 코드 보는 눈을 많이 키운 것 같다. 이번에 경력직으로...

① 배운 것 flutter에서 dio와 retrofit을 이용해 multipart형식으로 파일 업로드 하는 방법 **file vs multipartFile vs formData ** MultipartFile은 파일 안에 파일 이름이나 콘텐츠 타입 등을 같이 넣을 수 있는 것이고, formData는 MultipartFile 형식을 포함하여 여러 데이터를 m...

① 배운 것 오늘 이직한 회사에서 첫 배포를 했다. 서버 디벨롭 버전에서 QA 1번, 서버 릴리즈 버전에서 QA 1번 을 했는데 이렇게 하기보다는 테스트코드를 짜놓는게 좋지 않을까 싶기도 하다. 안드로이드는 빌드버전(+이후 숫자)가 매번 달라야함 이전 버전이 1.0.0+0 이였으면 다음에는 1.0.1+1 이 되어야함 ios는 메이저.마이너.패치 버전이...

① 배운 것 오늘은 지난번에 코드리뷰 했던것을 적용했다. 한 파일에 모여있었던 dataSource 코드 분리 - 스웨거 기준으로 분리 리드미 작성 리드미 내용 : 프로젝트 설명, flavor관리, 빌드방법, 버전관리, 브랜치관리,커밋컨벤션, PR올리는 방법, 배포시 주의사항 > 커밋 컨벤션 : 하나의 커밋에는 하나의 기능만! PR 올리는 방법 : 연관된 이...

① 배운 것 키보드가 보일때, 안보일때 ui를 다르게 하기 - textField의 포커스노드를 이용 깃헙에 이벤트 발생하면 슬랙 웹훅과 연동 [구독할 수 있는 이벤트는 여기 참고 ](https://github.com/integrations/slack#readme )슬랙에서 이벤트 구독,구독취소는 이런 식으로 슬랙에 작성한다 특정 링크를 통해 앱을 설치 ...

① 배운 것 PR 남은것을 슬랙으로 자동화 챗 보내기 https://devocean.sk.com/blog/techBoardDetail.do?ID=165255 https://tasddc.tistory.com/160 install referrer를 GA를 통해 추적 할 수 있다고 한다. 어제 알아봤던 코드와 똑같지만 referrer param이 설정된 링크를 ...

① 배운 것 원하는것 깃허브에 남은 PR을 공휴일이 아닌 월-금 동안 매일 오전 9시에 자동으로 슬랙으로 알려주는 봇을 만들고 싶었습니다. 방법 슬랙봇을 만듭니다. 권한은 이렇게 두개 넣었는데 chat:write만 넣어도 되는 것 같습니다. 위에 참고 블로그에는 call:write 권한을 넣으라 되어있는데 chat:write권한이 있어야 합니다. [깃허...

① 배운 것 오늘은 새로운 기능을 추가하기 시작했다. onValueChanged 파라미터를 넣어서 콜백을 줄때 사용 GestureDetector에서 onPanEnd : 수평 또는 수직으로 드래그 끝났을 때 실행 (스위치를 밀어서 on/off했을때) cupertinoSwitch는 크기 커스텀이 어렵다. 그래서 완전 새로 만들어서씀 ② 회고 (restrope...

① 배운 것 오늘부터 새로운 기능 추가에 들어갔다. 한 3일이면 다 할줄알았는데 생각보다 할일이 많아서 회사에서 진짜 폰도 한번 못보고 계속 일만했다. 고라우터에서 ParentNavigatorKey의 역할 goRouter에서 파라미터있는 클래스 사용법 ② 회고 (restropective) ③ 개선을 위한 방법

① 배운 것 앱잠금기능 개발 특별히 알게된 코드는 없었고 어떻게하면 팀원이 혹은 미래의 내가 더 쉽게 이해할지 고민하면서 코드를 짰다. 그리고 반복되는 위젯이나 로직은 되도록 공통적으로 쓸 수 있도록 뺐다. 정책 상 필요한 const를 빼서 관리했다. ② 회고 (restropective) 생각보다 케이스가 많아서 복잡했다.... 기한내에 못할 줄 알았는데...

① 배운 것 StatefulBuilder 믹스패널의 event(버튼 클릭, 특정 페이지에 들어옴 등)와 userProperty(유저마다 유니크한 데이터 예를들면 폰 기종, 마지막 접속기록 등) event에는 파라미터가 있다. 예를들어 어떤 버튼을 클릭한 이벤트에 예를 클릭했는지 아니요를 클릭했는지 파라미터로 넣을 수 있음 ② 회고 (restropecti...

① 배운 것 Flutter: 언제 setState를 사용해야 할까? Flutter에서 State는 위젯의 UI를 구성하는 데 필요한 정보를 담고 있습니다. 버튼의 텍스트, 체크박스의 선택 여부, 리스트의 항목 등 UI에 표시되는 모든 요소는 State를 통해 관리됩니다. State가 변경되면 Flutter는 해당 State를 사용하는 위젯을 다시 빌드하여 ...

① 배운 것 디바이스 높이가 작을때 피그마에 있는 대로 패딩을 잡으면 화면이 짤림 > 디자이너와 상의해 패딩을 좀 줄이고 고정된 패딩이 필요 없는 부분은 화면에 맞게 유연하게 패딩이 잡히도록 수정 Flutter 탭 화면, 이동 기록까지 깔끔하게 관리하는 비법: StatefulShellRoute! 혹시 Flutter로 탭 화면이 있는 앱을 만들 때, 탭을...

① 배운 것 Flutter 에러 늪 탈출기: lifecycleState != ElementLifecycle.defunct 그리고 addPostFrameCallback Flutter 개발을 하다 보면 가끔씩 알 수 없는 에러 메시지와 마주치게 됩니다. 특히 위젯의 생명주기와 관련된 에러는 디버깅하기 까다롭기로 악명이 높습니다. 오늘은 그중에서도 악몽 같은...

iOS Notification Service Extension과 커뮤니케이션 알림: 눈물의 삽질기 최근 프로젝트에서 푸시 알림을 커뮤니케이션 알림 형태로 보여주는 기능을 개발하게 되었다. 처음에는 fcm 관련 플러터 플러그인을 사용하면 될줄 알았는데 아직 커뮤니케이션 알림 기능을 제공하는 플러그인은 없어서 aos,ios둘다 네이티브로 구현했어야했다. 내가...

① 배운 것 x ② 회고 (restropective) 회사에서 사적인 자리에서는 불만을 이야기하지말고 피해야할 사람과는 피하자~ ③ 개선을 위한 방법 x

① 배운 것 x ② 회고 (restropective) 이제 회사사람들 마다 선호하는 일하는 방식을 좀알거같다. 각자맞춰서 일하자. 일정짜는건어렵다. 뭘 기준으로짜야할지......... 사실 짤 수는 있는게 그걸 책임져야한다는게 좀.... ③ 개선을 위한 방법 x

① 배운 것 캘린더 라이브러리를 이용해 디자인에 맞게 수정중 ② 회고 (restropective) 코드리뷰를 했다. 코드와 나를 분리시키는 것이 중요한것같다. 구조같은것을 팀원과 미리 이야기하는것이 좋은 것 같다. 지금은 인풋을 많이 넣기보다는 코드를 이리저리 리팩토링해보면서 아웃풋을 산출해내는게 중요한것같다. 코드를 잘 짜는건 한줄한줄 의미있게 짜는게...

① 배운 것 Dart의 part, part of 키워드 [빈 디렉토리를 깃에 추가하는 법 .gitkeep ](https://kimjingo.tistory.com/238) ② 회고 (restropective) 캘린더 만드는게 라이브러리가 있어서 생각보다 수월했다. 하지만 디테일한 부분 수정한다고 생각보다 오래걸렸다. 일단 마무리짓고 api 붙이면서 다시 수정...

① 배운 것 gorouter의 go가 이전의 인스턴스를 재활용 하는 문제 해결 context.go(A)를 했는데 첫번째는 괜찮은데 두번째 context.go(A)를 하면 이전에 만들어진 A 인스턴스가 재활용된다. 그래서 initState도 타지않고 build()위젯 외부에 만들어놓은 클래스 변수도 재정의 되지않는다. 내가 만드는 화면은 화면에 들어올때 마다...

① 배운 것 bottomsheet dialog에 safeArea를 적용하는 방법 saefaArea를 적용하지 않으면 ios에서 다이어로그가 사진처럼 밑에가 딱 붙어버린다. 패딩으로 조절하면 ios,android 따로 설정해줘야하므로 safeArea로 설정하는것이 바람직하다. inkWell이 작동하지 않을 때 해결법 ② 회고 (restropective)...

① 배운 것 동료가 라이브러리를 많이 쓰는것을 안좋아하는 타입인것 같아서 최대한 라이브러리를 안쓰고 개발하려한다. 시간이 오래걸리고 어려운것은 어쩔 수 없지만, 라이브러리 안에 코드가 간단한것은 그냥 그 자체로 필요한 부분만 우리 프로젝트에서 직접 관리한다. 캘린더, 줄 수를 기준으로 더보기 ui 끊기, 드래그 가능한 다이어로그 등등.. ② 회고 (re...

① 배운 것 ios는 갤러리에 이미지를 저장할때 파일 이름을 커스텀 할 수 없다. IMG_인덱스 번호로 ios가 정한 대로만 저장이됨. Flutter에서 addAutomaticKeepAlives와 AutomaticKeepAliveClientMixin 사용법 Flutter에서 리스트나 그리드와 같은 스크롤 가능한 위젯을 사용할 때, 스크롤이 되어 화면에서...

① 배운 것 GoRouter의 parentNavigatorKey, 하단바는 어디로 갔을까? 🤔 Flutter 개발을 하다 보면 GoRouter를 이용해 화면 전환을 구현하는 경우가 많습니다. GoRouter는 강력하고 편리한 기능을 제공하지만, 때로는 예상치 못한 동작으로 당황스러울 때가 있습니다. 특히, 하단바가 있는 앱에서 parentNavigato...

① 배운 것 플러터 ListView 속성 이해하기 플러터에서 리스트뷰(ListView)는 스크롤 가능한 위젯을 만드는 데 유용하게 사용됩니다. 이번 블로그 글에서는 ListView의 주요 속성들과 그 활용법에 대해 알아보겠습니다. ListView와 SingleChildScrollView의 차이점 ListView는 SingleChildScrollView...

① 배운 것 [stack에서 짤릴때 해결법 ](https://stackoverflow.com/questions/76672846/why-are-my-positioned-widgets-not-showing-up-outside-stack) ② 회고 (restropective) ③ 개선을 위한 방법

① 배운 것 인스타그램 화면에서 각 피드에서 댓글버튼을 누르면 같은 provider를 사용하고 있기 떄문에 처음 누른 피드의 댓글이 항상 댓글 리스트 젤 위에 떴음. 이를 해결하기 위해 댓글버튼을 누를 때마다 provider의 상태(댓글 리스트)를 리셋 시키는 방법을 고민함. 하지만 그보다 provider의 기능을 이용하기로함. 그래서 고민하다가 provi...

① 배운 것 stack Clip.none으로 쌓은 위젯은 gestrueDetect가 안먹힌다.. 그리고 stack의 child 중 positioned 위젯은 높이에 관여하지않는다. ② 회고 (restropective) ③ 개선을 위한 방법

JSON 파싱 오류의 원인 및 해결 방법 여러분은 개발을 하면서 JSON 데이터를 다루다 보면 예상치 못한 파싱 오류를 만난 경험이 있을 것입니다. 그중에서도 흔히 겪는 문제는 JSON 형식이 올바르지 않을 때 발생하는 오류입니다. 예를 들어, 아래와 같은 두 개의 JSON 데이터가 있다고 가정해봅시다. 에러가 발생하는 JSON 데이터: 정상적으로 파...

① 배운 것 statefulBuilder ② 회고 (restropective) 뷰를 완벽히 끝내는걸 목표로하지않고 1차로 뷰를 완성하고 API를 붙이고 2차로 뷰를 완성하도록 계획 한것이 잘한것같다. ③ 개선을 위한 방법

① 배운 것 ShellRoute와 StatefulShellRoute.indexed의 주요 차이점은 브랜치별 스택 관리 방식입니다. ShellRoute: 각 브랜치는 공유되는 단일 스택을 사용합니다. 즉, 한 브랜치에서 이동하면 다른 브랜치의 히스토리가 지워집니다. 이는 간단한 탭바 구현에 적합하지만, 브랜치별 이동 기록을 유지해야 하는 경우에는 적합하지 ...

① 배운 것 Dart Enum 활용팁: byName 메서드로 Enum 값 간편하게 가져오기 Dart에서 Enum은 특정 값들의 집합을 정의할 때 유용하게 사용됩니다. 예를 들어, 요일, 색상, 파일 형식 등을 나타낼 때 Enum을 사용하면 코드의 가독성과 유지보수성을 높일 수 있습니다. Enum을 사용할 때, 특정 이름을 가진 Enum 값을 가져와야 하는 ...

① 배운 것 안드로이드에서 앱을 업그레이드하면 스플래시에서 안넘어간다는 이슈가 발생. 아래와 같이 해결함. 안드로이드 - allowBackup, fullBackupContent 스크롤 위치 • extentBefore: 현재 스크롤 위치까지의 거리(뷰포트의 시작점에서). • extentAfter: 현재 스크롤 위치에서 남은 거리(뷰포트의 끝점까지). 리...

① 배운 것 [bottomsheet height wrap content ](https://velog.io/@qkrtnfks128/showModalBottomSheet-%EC%9E%90%EC%8B%9D-%EB%86%92%EC%9D%B4%EB%A7%8C%ED%81%BC-height) provider에서 watch가 제대로 되려면 state자체가 바뀌어야함. ...

① 배운 것 전면광고 vs 보상형 전면광고 전자는 그냥 전면 광고이고 , 광고를 다 봤을때 리워드를 제공하고 싶다면 보상형 전면광고를 띄워야함. 이때 보상갯수는 구글애드몹에서 설정해준다. 현재 리스트의 인덱스를 알 수 있는 라이브러리 ② 회고 (restropective) 어디서 버그가날지, 화면 이동시 데이터가 유지, 업데이트 되어야하는 부분 등 이런 부...

문제 상황 A 화면에서 B 화면으로 이동할 때, B 화면에서는 리스트를 불러옵니다. 리스트에 100개의 아이템이 있다고 가정할 때, A 화면에서 40번째 아이템을 클릭하면 B 화면에서는 30번째부터 50번째까지의 아이템만 가져와서 보여주기를 원했습니다. 하지만 Flutter의 ListView 구조상 새로운 아이템이 추가되면 스크롤 위치가 최상단으로 유지되...

① 배운 것 Dart에서 DateTime 객체의 toLocal() 메서드를 호출하면 UTC 시간을 기기의 로컬 시간대로 변환합니다. 예시: nowLocal 변수에는 기기의 시간대 설정에 따라 변환된 DateTime 객체가 저장됩니다. 주의: toLocal() 메서드는 기기의 시간대 설정을 사용하므로, 기기의 시간대 설정이 정확하지 않으면 변환된 시간도...

① 배운 것 pageview에서 페이지를 이동할때마다 그 페이지의 initstate가 새로 불린다면 각 페이지에 AutomaticKeepAliveClientMixin을 넣어보자. AutomaticKeepAliveClientMixin은 자동으로 State 객체를 활성 상태로 유지하여 위젯 트리가 변경될 때도 State 객체가 재빌드되지 않도록 도와줍니다. ...

① 배운 것 [탭바 스와이프로 이동할때 스와이프가 끝난 이후에 탭바 아이콘이 변경될 때 ](https://github.com/flutter/flutter/issues/88875#issuecomment-1423638814) 다른 화면에서 b로 go하는건 문제가 없는데 a화면에서 b화면으로 go할때만 문제가 생겼다. 문제 : Bad state: Tried t...

① 배운 것 여기저기 버그를 찾아서 엄청 고쳤다. 이제는 버그를 틀어막는 느낌이 아니라 근본적인 원인을 찾아서 구조를 해결하는 식으로 고치고있어서 좀 뿌뜻하다. ② 회고 (restropective) 클래스나 함수는 하나의 기능만 담당해야 한다는 원칙이 있습니다. 예를 들어, a와 b 두 가지 로직이 A라는 클래스나 함수를 필요로 한다고 가정해봅시다. 이때...

① 배운 것 AlwaysScrollableScrollPhysics는 Flutter 프레임워크에서 사용되는 스크롤 물리 엔진 중 하나입니다. 이 엔진은 사용자가 스크롤할 내용이 없더라도 항상 스크롤을 허용하는 동작을 구현합니다. 기본적으로, 스크롤할 내용이 없으면 스크롤이 비활성화되는 일반적인 스크롤 동작을 재정의하여, 어떤 상황에서도 사용자가 스크롤할 수 ...

① 배운 것 API에러로 인해 앱이 중단 되는 부분을 체크해 대응 - 이렇게 꼼꼼하게 체크하는 부분이 성장한 부분 같다 PR 탬플릿 고민중 리뷰받고 싶은 커밋과 함께 변경사항 문제사항 해결방안 추후 개선사항 이런식으로 적으니까 가독성이 좋은 것 같다. ② 회고 (restropective) ③ 개선을 위한 방법

① 배운 것 스크롤뷰에서 여러 scrollPhysics를 섞어서 사용하는 방법 2.인스타그램 돋보기를 눌렀을때 나오는 리스트뷰처럼 스크롤을 하면 다음/이전 아이템으로 포커스 되는 리스트뷰 구현 > 기본 원리는 'ScrollablePositionedList'를 사용하고 해당 리스트뷰를 NotificationListener으로 감싸고 scrollNotific...

① 배운 것 SliverSafeArea가 있어서 전체를 safeArea로 감싸지 않고 특정 sliver widget만 safeare를 적용할 수 있다. sliverappbar을 쓰려면 확장했을때의 크기가 고정일때만 사용가능하다. 왜냐면 expandHeight를 적어야하기 때문이다. 유동적일때는 사용하기 어려움 intrinsicsizebuilder 라이브러리...

① 배운 것 QA 기간이라 딱히 배운건 없다. ② 회고 (restropective) 개발하면서 버그를 진짜 많이 잡았는데 남들이 QA를 해주니까 + 나혼자 앱을 쓰다가 다른 사람들도 앱을 쓰다보니 (커뮤니티 성격의 앱이라..) 역시 생각지도 못한 버그가 또 많이 생긴다. 그래도 이번에는 버그를 진짜 테이프 붙이듯 덕지덕지 수정한 경우는 하나도 없는 것 같...

① 배운 것 Admob googlemobileads 관련하여 보상형 광고 vs 전면 보상형 광고 보상형 광고 : 광고를 끌 수 있는 버튼이 없다. 전면 보상형 광고 : 광고를 끌 수 있는 버튼이 있다. 베타버전임 사실 이 두개 차이말고 근본적으로 무엇이 다른지 잘 차이를 모르겠다.. 😵💫 전면광고(혹은 보상형 전면광고) 모두 상태바 아래에서 페이지...

① 배운 것 IOS Admob 에러 해결 테스트광고 ID로 빌드할때는 문제가 없었는데, 실제 광고 ID를 넣고 빌드하니까 아래와 같은 에러가 나고 광고 로드가 실패했다. code: 1 에러는 타입에러(ID는 보상형광고인데 코드 상 구현된 것은 보상형전면광고임 같은 상황)라고 해서 타입을 다시 확인해봤지만 ID와 코드 모두 보상형광고로 똑같았다. 고민하다가...

① 배운 것 Dart에서 removeWhere 메서드를 활용한 집합 필터링 예제 Dart 언어를 사용하다 보면, 집합(Set) 내의 특정 요소를 제거할 때 유용하게 사용할 수 있는 메서드가 바로 removeWhere입니다. 이번 포스팅에서는 removeWhere 메서드를 활용하여 두 집합 간의 차집합을 구하는 방법을 예제로 설명하겠습니다. 코드 예제 ...

① 배운 것 ② 회고 (restropective) 입사 3개월만에 회사가 망했다..ㅋㅋ 😂 다행히 나는 협업하던 회사로 고용승계가 될거같다. 다음엔 무조건 안정적인 걸 1순위로 두고 이직한다.. 당연히 안좋아지는 점도 있지만 ... 그래도 긍정회로 돌려보자면, 나는 원래 협업회사의 일만 했어서 일이나 실무진들이 바뀌진 않는다. 요즘 회사에 너무 매몰 ...

① 배운 것 IOS Communication push Notification 구현기 이때 실패 했던 것을 오늘 성공했다! 🙌 일단 서버측에서 해줘야할 노티 구성, info.plist 등 설정해줘야하는 것들은 위 링크 참고 일단 결론부터 말하자면 'Notification Service Extension'을 이용해 포,백,터미네이터일때 커뮤니케이션, 일반알...

① 배운 것 안드로이드에서 카카오톡처럼 커뮤니케이션 노티를 띄우는 방법 네이티브에서만 할거면 코드랩 블로그 만 참고하면 다 할 수 있을 것 같다. 중요한건..!! 안드로이드 버전 30 이후 부터는 shortCut이라는 것(앱을 꾹 눌렀을 때 나오는 부분)을 설정하고 notification에 shortCutID를 설정해줘야 카카오톡과 같이 나온다. 그렇지 않...

① 배운 것 어제에 이어서 안드로이드 메시지타입 노티 만드는중 메시지 타입 노티까지는 일단 어제 완성했는데 메시지 타입 노티에 사진을 넣는 코드는 아래와 같음 코드참고 Message에 setData로 이미지를 넣어주면댐 그러면 message.photoMimeType, message.photoUri 은 뭐냐! message.photoMimeType은 "im...

① 배운 것 네이티브에서 플러터 코드를 호출하는 방법 안드로이드에서 알림이나 shortCut을 클릭 후 특정 플러터 페이지로 넘어가는 방법 (혹은 특정 플러터 함수를 호출하는 방법) 안드로이드에서 알림을 받거나 shortCut을실행할때 각 intent를 mainactivity.kt로 넣어주고 extra에 필요한 데이터(노티 타이틀 바디 딥링크 등등, sh...

① 배운 것 shortCut과 MessageType의 알림 제목관의 관계 android shortCut의 이름이 MessageType의 알림 제목으로 자동으로 들어감 안드로이드 뱃지, 진동, 소리 구현법 안드로이드 MessageType일때 이미지와 노티 바디가 동시에 표출되지 않음 안드로이드 MessageType SmallIcon 투명배경에 흰색으로 ...

① 배운 것 IOS 알림올때 뱃지 표출하게 하는방법 안드로이드의 sharedPreferece 같은것이 ios의 userDefaults이고 이걸 활용해서 뱃지 표출을 한다. 노티에서 badge 라는 키값으로 아무숫자나 주면됨 extension(여기서는 NotificationExtension과 사용)과 연계하여 userDefault를 사용해야하는데 그러면 a...

① 배운 것 notion private에 저장해둠 ② 회고 (restropective) 오늘 위에 배운것이 프론트에서 for문을 적게 돌리기 위해 개선하는 것이였는데 그것을 요청하니 백앤드 리더분한테 따봉을 받았다 힣히 ③ 개선을 위한 방법

① 배운 것 cachednetworkimage의 캐시되는 기간 이때까지 앱이 켜져있을때만 캐시되는줄 알았는데 그게 아니라 한번 캐시되면 쭈욱 캐시되는것이였다. 따로 header에 캐시관련된 설정이 없으면 200개를 30일동안 캐시해둔다고한다. 앱에서 AdMob 광고가 표시되지 않는 이유: DNS 광고 차단과 관련된 오류 해결 앱에 AdMob을 연동하고 ...

① 배운 것 인앱결제 개발 시 삽질 1- 안드로이드 인앱 권한을 넣어서 앱 등록 상품을 만드려고하는데 '앱에 아직 인앱상품이 없습니다'라고 뜨는 경우 ->빌링 권한을 넣어서 앱을 다시 등록해야한다. 비공개 테스트로 올리면됨. 구글의 심사가 승인되면 그 다음부터는 제품을 만들 수 있다. 테스트 결제자로 등록하기 ios : 애플 스토어 커넥트의 사용자 및 액...

① 배운 것 광고 관련 app-ads.txt 파일 app-ads.txt란 : 앱 개발자가 광고 요청이 발생한 앱을 소유하고 있다는 사실을 광고주에게 증명함으로써 인앱 광고 사기를 방지할 수 있는 파일 왜 추가해야하는가 : 구글에 따르면 저 텍스트파일이 있고없고에 따라 광고 수익에 차이가 난다고한다(아무래도 인증된 앱이니 광고가 더 잘 붙는다 이런 느낌인듯...

① 배운 것 easy_localization 서버에서 문구 받아서 영문화 적용하기 기본적인 세팅은 문서 참고 파일을 에셋에 넣고 사용할 수도 있지만 앱 배포 없이 문구 수정이 필요한 경우라면 json파일을 서버에 넣어두고 그걸 이용할 수도 있다. assetLoader에 HttpAssetLoader를 설정하고 path에는 json파일이 있는 곳 주소를 ...

① 배운 것 슬랙봇을 활용해 pr approve 받을 시 슬랙 메시지 받기 워크플로우에는 이렇게 작성 ② 회고 (restropective) ③ 개선을 위한 방법

① 배운 것 android file provider authority 안드로이드에서 File Provider와 Authority 쉽게 이해하기 안드로이드 앱을 개발하다 보면, 한 앱에서 만든 파일을 다른 앱에서 사용해야 하는 경우가 종종 있어요. 예를 들어, 카메라 앱에서 사진을 찍고, 다른 앱에서 그 사진을 불러와야 할 때처럼요. 그런데 안드로이드는 보...

① 배운 것 flutter 안드로이드에서 kakaofluttersdk_user를 사용할때 카카오톡 로그인 로직을 빠르게 두번 이상 실행하면 앱이 크래시 나는 버그 현상 : 플레이스토어 ANR 크래시 리포트에 아래와 같은 로그가 찍혀있어서 확인함 원인 : 깃허브 이슈에서 볼 수 있듯이 메소드 채널이 중복 호출되면서 발생한 이슈임. 해결 : true일때만...

① 배운 것 http request 파라미터 넣는 여러가지 방법 https://velog.io/@nagosooo/Retrofit-Annotation 이것에 대해 다시 상기함 스웨거에서 파라미터 넣는 방법 알아보는법 query param path param ![] (https://velog.velcdn.com/images/nagosooo/post/408...

① 배운 것 다트에서 비동기 함수를 파라미터로 받는 방법 이 코드는 Dart 프로그래밍 언어에서 사용되는 typedef 선언입니다. 종합하면, AsyncCallback은 "매개변수가 없고, 반환 값이 없는 비동기 함수"를 나타내는 타입이 됩니다. 이러한 typedef를 사용하면 코드의 가독성을 높이고 재사용성을 개선할 수 있습니다. 이 타입의 함수는 비...

① 배운 것 안드로이드 빌드 시스템 안드로이드 스튜디오를 무당벌레 버전으로 올렸더니 자바 버전이 21로 올라가면서 AGP버전을 8로 올려야한다고 에러가 쫙 났다. AGP 버전을 8로 올렸는데 기존 라이브러리들이랑 호환이 안되서 엄청 애를 먹었다. 항상 궁금했던 AGP와 안드로이드 빌드 시스템에 대해 알아봤다. [노션에 정리했음 ](https://from-...

① 배운 것 안전하고 효율적인 API 호출: SafeApiCall 유틸리티 소개 Flutter 애플리케이션에서 API 통신은 필수적인 부분입니다. 하지만 API 호출에는 항상 성공과 실패의 가능성이 있으며, 이를 매번 일관되게 처리하는 것은 번거로울 수 있습니다. 오늘은 이 문제를 해결하기 위해 개발한 SafeApiCall 유틸리티를 소개하고자 합니다. ...

① 배운 것 인앱구매 요청 시 이전 구매요청이 끝나지 않았는데 또 다른 구매요청을 할 경우 이런 경우에 구매요청큐에 요청들이 쌓여있어 아예 새로운 요청이 거절되거나, 중간에 로직이 꼬일 수 있으므로 이번 앱에서는 아예 하나의 요청이 끝날때까지(성공하거나, 취소되거나, 에러나거나) 다른 요청을 하지 못하도록 구현했다. flutter inapppurchase ...

① 배운 것 [안드로이드 스튜디오 ladybug로 업그레이드 후 강제로 AGP 8버전으로 올려야하는 이슈 해결 ](https://stackoverflow.com/questions/79067849/flutter-3-24-3-problem-with-android-studio-ladybug-2024-2-1) 저렇게 설정해주고 프로젝트에서 flutter clean...

① 배운 것 이것을 회사컴에서도 적용해봤는데 제대로 되지 않았다. 집컴에서는 안드로이드 스튜디오 내 세팅에서 자바 버전 17 설치하고 그것을 선택해 준다음 flutter config --jdk-dir 이 명령어만 실행하면 레이디버그 버전에서도 빌드가 잘 되었는데 회사컴에서는 두번째 답변처럼 brew에서 jdk를 설치 및 환경설정까지 새로 해준 후 저 ...

① 배운 것 [안드로이드 READMEDIAIMAGE 권한 제거 ](https://medium.com/@blucky8649/android-%EC%9D%B4%EC%A0%9C-read-media-images-%EA%B6%8C%ED%95%9C%EC%9D%80-%ED%97%88%EB%9D%BD%EB%B0%9B%EA%B3%A0-%EC%8D%A8%EC%95%BC%ED%...

① 배운 것 깃헙액션을 이용해 firebase app distribution에 자동배포하기 [참고한 블로그 ](https://velog.io/@mraz3068/Apply-Android-Github-Action-CD)[CREDENTIALFILECONTENT 파일 얻는법 ](https://medium.com/codex/a-guide-to-implement-cd...

① 배운 것 플러터 프로젝트에서 깃헙 actions를 이용해 firebase app distribution에 자동배포하는것을 함 일단 안드로이드만 성공햇다 ㅋㅋ 기본적으로는 이코드를 참고했고 플러터 빌드를 위해 바뀐 부분만 주석으로 처리해두겠음 ② 회고 (restropective) ③ 개선을 위한 방법

① 배운 것 깃헙액션을 사용하다보면 workflows에서 파이썬 파일을 실행 시킬 때가 있다. 그렇다면 파이썬파일에서 깃헙 시크릿을 어떻게 사용하는지? ② 회고 (restropective) 깃헙액션은 사실 그냥 지피티한테 물어보면서 & 하다보면 느낌이 와서 그냥 해도될것같은데 하다보니 재미있어서 + 인프런에 자꾸 광고가 뜨길래 깃헙액션 강의를 듣고있는데 ...

① 배운 것 깃헙액션을 이용해 Flutter IOS Ipa 파이어베이스 앱 디스트리뷰션에 자동배포하기 참고한 블로그1 [참고한 블로그2 ](https://sujinnaljin.medium.com/ci-cd-github-actions-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-testflight-%EC%97%85%EB%A1%9C%E...

① 배운 것 깃헙액션으로 firebase app distribution 배포 성공/실패 후 슬랙 알림 받기 android 배포를 하는 job 안에서 마지막 step으로 실행하면됨 이전 단계가 실패해도 항상 슬랙을 보내기 위해 if: always() 필요 ios 버전 추출하는 step이 있는 job에서 Output으로 버전네임, 버전코드 생성 버전...

① 배운 것 지금까지는 안드로이드, ios를 각각의 workflow로 빌드 및 앱 디스트리뷰션에 배포했습니다. 이제는 두개의 workflow를 하나로 합치고 플러터를 다운 받은 후 깃헙액션 캐시에 저장해서 다음에 캐시에서 플러터를 가져와서 사용할 수 있게 해봅시다 지금까지의 안드로이드 앱 디스트리뷰션 코드 지금까지의 ios 앱 디스트리뷰션 코드 안드로...

① 배운 것 Flutter json_serializable: 여러 JSON 키를 하나의 필드로 매핑하는 방법 A api에서는 'image'라는 키값으로 이미지링크가 내려왔는데 B api에서는 'img'라는 키값으로 이미지링크가 내려온다고 가정하자. 물론 이런경우에는 백앤드에 image,img 둘 중 하나로 통일해달라고 요청하는게 제일 좋을 것 같긴하지만...

① 배운 것 Clean Architecture 도입 관련 TIL 1. 문제 상황 발견 도메인 엔티티의 필드명이 변경되면서 머지 충돌 발생했습니다: A개발자: 기존 엔티티 필드명(gold)으로 뷰 개발 B개발자: 새로운 필드명(goldAmount)으로 엔티티 변경 및 뷰 개발 결과: 동일한 뷰에 대한 코드가 충돌하며 병합이 어려워짐 2. 근본적인 원인 프...

① 배운 것 안드로이드 인앱결제 테스트는 내부테스트에서 가능 firebase app distribution에서는 불가능 ios는 테스트플라이트가 아니여도 firebase app distribution에서도 가능함 AsyncNotifier KeepAlive 시 주의점 A 페이지에서 유일하게 B AsyncNotifier을 listen한다고 가정 (keppAl...

① 배운 것 Fastlane을 이용해 Flutter IOS TestFlight로 자동배포 하기 깃헙액션을 이용한 IOS 자동배포의 단점 및 Fastlane 도입 이유 지난번에 깃헙액션을 이용해 flutter ios를 app distribution에 자동배포했음 근데 깃헙액션만을 이용하면 👇 이 과정을 직접 해야한다. > ios 배포시 필요한 인증서와 p...

Fastlane을 이용해 Flutter IOS App distribution에 자동배포 하기 지난글에서 설명한 부분은 따로 설명하지 않도록 하겠음 먼저 fastlane에서 firebase를 사용하기 위해 설정을 해줘야함 이 블로그 참고 [깃헙액션 workflow.yaml] 워크플로우는 fastlane lane이름 변경한것 말고 바뀐 부분 없음 [Fa...

① 배운 것 socket.io path vs namespace socket.io를 이용해 소켓 연결을 했는데 연결이 안되는 이슈 발생! 연결이 안되는 코드 연결이 성공한 코드 문제원인 : baseurl과 path를 구분하지 않아서 경로를 찾지못함 socket.io에서 path는 서버의 소켓 연결 경로를 정의. path는 기본적으로 socket/io이고 ...

① 배운 것 하나의 github workflow와 fastlnae 로 ios firebase app distribution과 testflight에 업로드 하기 여기와 여기에서 했던 것을 합쳐 하나의 github workflow와 fastlnae 로 ios firebase app distribution과 testflight에 업로드 하기 달라진점은, '...

Fastlane을 이용해 Flutter 안드로이드 APK Firebae App Distribution 자동배포 이전 포스팅들에서 자세한 설명은 모두 했기에 이번엔 패스 원래 플레이스토어에 자동배포하려면 appFile에 들어갈 json 키를 추출해야하는데, 나는 app distribution만 사용하기때문에 그 과정은 필요 없었다. 플레이 스토어에 자동배포...

이모지🎄🧑🎄🎊🧑🧑🧒🧒 입력 시 글자 길이 2글자 이상으로 잡히는 버그 현상 이모지 입력 시 텍스트필드에서 글자길이가 2자 이상으로 잡힘 이유 dart에서는 문자열을 utf-16으로 인코딩함 원래는 한 글자가 한 코드유닛(16비트) 단위로 인코딩 되어야하는데 이모지의 경우 2개~여러개의 코드유닛단위로 저장됨 왜냐면 utf-16은 2...

① 배운 것 비동기 함수 try-catch 비동기함수를 try-catch로 잡으려면 반드시 try문의 비동기 함수에 await를 걸어줘야함 생각해보면 당연함. 비동기 함수 작동 중에 뭔가 에러를 만났을때 그걸 기다렸다가 catch가 될 수 있게 해줘야함 아니면 그냥 실행될때 문제가 있으면 catch에 잡히고 실행중에 에러가 생기는거는 catch에 잡히지 ...