이번에 Flutter Engine에 대해 계속 내용들을 공부하고 있는데, 자꾸 헷갈리는 내용이 있어서 계속 찾아보다가 그냥 글로 정리했다.ㅤ바로 Dart는 Native Machine Code로 컴파일 되지만, 실행 시점에 Dart VM은 여전히 사용된다는 것이다.내가 배웠던 바에 따르면 Flutter의 장점이 Native Machine Code로 변환되어 실행이 되기 때문에, VM을 사용하는 리액트 같은 JS 언어보다 성능적으로 우수하다는 것이였는데, 그 배움이 부정당하는 듯한 문장이였다.ㅤDart 가 VM 을 사용한다고…?ㅤ그래서 GPT 한테도 열심히 물어봤다. 근데, 더 헷갈리는 답변인, “Native와 VM이 결합되어 사용됩니다” 라는 두루뭉술한 답변을 남겼다. 아니 이게 무슨말이냐 GPT왈 : “..
ㅤ플러터 엔진의 C, C++ 코드는 iOS 환경에서는 LLVM 을 통해 컴파일이 된다고 한다.읭 LLVM??ㅤLLVM이라는 키워드는 Xcode에서 개발을 진행하면서 종종 봤던 키워드이다. (LLDB도 많이 봤던 것 같다!) 공부를 하다보니 clang 이라는 키워드와 LLVM 이라는 키워드가 자주 나왔는데, 평소에는 자주 지나쳤던 이 이름들에 대해서 한 번 정리해보는 시간을 가지면서, 그 흔적을 여기에 정리해두려고 한다 :)ㅤLLVM 이란?LLVM 은 컴파일러와 툴체인의 집합이며, 두문자가 아니라, LLVM 자체가 그냥 프로젝트의 이름이다. (오호) 물론 처음에는 low-level virtual machine 이라는 이름에서 출발했지만, 기능이 확장하면서 풀네임이 그 기능을 다 표현해내지 못하면서 두문자만..
벌써 올해도 절반이나 지나가버렸다. 그치만, 올해에는 벌써 배운 것도 너무 많고 이룬 것도 너무 많아서 좀 뿌듯한 기분!ㅤ달리기를 시작했다.3월부터 달리기를 시작했다. 처음에는 진짜 1km 6:30 페이스로 조금만 뛰어도 너무너무 숨차고 힘들었는데, 매일 주말 일요일에 여의도 공원을 달리고, 아침 6시 30분에 크로스핏 하러가기 전에 3-5km 달리기를 하거나 40분 사이클을 주 2~3회 하다보니 체력이 많이 늘었다. 달리기 실력에도 욕심도 생기고, 또 달릴 때 그 속도감이 주는 쾌감이 좋아서 꾸준히 하게 되었던 것 같다.ㅤ매번 달리기를 하러 나갈 때 마다 체력이 올라오는게 느껴졌고, 630 그룹에서 500 그룹으로 올라가면서 “내가 체력이 그지였던건 그냥 유산소를 안해서였구나”를 뼈저리게 느꼈다. 진짜..
플러터에서 애플 로그인 회원탈퇴를 할 수 있는 로직을 아래에 작성해놨다!! 필요한 사람은 참고하자!!ㅤ 갸아아아악 진짜 이걸로 고생했다. 🥺🥺💦ㅤ이번에 앱 출시를 위해서 앱스토어에 심사를 올렸다가, 회원가입이 있으면 회원탈퇴도 있어야 한다는 심사 기준으로 인해 리젝을 받았다.당연히 Sign_In_With_Apple 패키지에서 해당 기능을 함수로 구현해뒀을 것이라 생각하고, 바로 회원탈퇴 기능 구현 후 심사 재제출을 하려고 했는데, 오잉? 그런 기능은 제공되고 있지 않았다. (흑흑따)ㅤ파이어베이스나 다른 기능들처럼 또 다른 패키지의 방식으로 해당 기능을 제공할 것이라고 생각했는데, 왠걸? 특정 URL로 POST 쿼리를 날려야 이를 구현해준다고 되어있다. (나 웹 방식은 진짜 감도 안온단말이야…) 그치..
ㅤ이번에는 URL에서 이미지를 받아와 파일의 형태로 다루면서 뷰에서 이미지를 보여주고자 하여, 아래의 작업을 처리해주고 있었다.파이어베이스에서 이미지의 URL을 받아옴URL에서 이미지를 다운받아, 로컬에 임시 파일로 저장File 타입의 변수에 해당 파일을 불러오기Image 위젯에 이미지 파일을 보여주기ㅤ그리고, URL에서 이미지를 다운받아 저장하는 코드는 아래의 코드를 사용해주었다.Future downloadImageToFile(String imageUrl) async { try { // HTTP GET 요청을 통해 이미지 데이터 다운로드 final response = await http.get(Uri.parse(imageUrl)); if (response.statusCo..
ㅤ이번에 개발을 진행하면서 Sign In With Apple 기능을 붙이려고 했다. 그런데, 정말 예상치 못하는 상황에 Exception이 계속 발생했다. ㅜㅜㅜ 원인을 찾지 못해서 이걸로 2일 이상은 날린 것 같다.ㅤ간단하게 결론만 말하자면, iOS Configuration을 새로 만들자.ㅤFirebase에서 Sign in With Apple을 적용하려고 했으며, Flutter로 개발을 해주고 있었다.우선 설정은 다음 사항들을 진행했다. 다른 블로그 글들, 유튜브 튜토리얼에서 잘 설명되어있었다.FirebaseSign in with Apple 추가하기Apple DeveloperApp Identifier 등록Sign in with Apple 체크Service Identifier 등록Sign in with ..
이번에는 아래와 같은 UI를 만들어보고 싶었다. 내가 선택한 텍스트필드에 포커스가 가고, 다음 버튼을 누르면 새로운 필드가 열리며 여기로 포커스가 이동하는 방식을 구현하고 싶었다.ㅤㅤ내가 만들고자한 서비스에서는 텍스트필드의 개수가 정해져있었기에, step 으로 나눠 Visibility 위젯으로 이를 숨겨놨었다. 기타 부수적인 코드를 다 제거하면 아래처럼 작성이 되었다.ㅤList focuseNodeList = [FocusNode(), FocusNode(), FocusNode()];...Visibility( visible: 첫 번째 step 부터, child: Column( children: [ Visibility( visible: viewmodel.focusedStep == ..
이번에도 30분동안 싸운 간단한 문제가 있었다. 이번에 내가 구현하려 했던 부분은 데이터 삭제 후 뷰 새로고침이였다. 되게 간단한 문제였는데, 요녀석이랑 싸우게 된 이유는 자식 위젯에서 데이터를 지우는 로직을 호출하고, 부모 위젯에서 뷰를 업데이트를 해야한다는 점이였다.ㅤㅤ처음에는 단순하게 자식 위젯에 있는 버튼을 누르면 로직을 처리하고, 이에 따라 setState를 호출해 뷰를 업데이트해주려고 했다. 그런데, 분명 setState 함수까지 호출이 잘 되었다고 나오는데 뷰는 제대로 업데이트가 되지 않는 문제가 있었다.// 자식 위젯 코드onPressed() async { await removeLogic() .whenComplete(() { setState(() {}); });}ㅤ여기에서 갖가지 위치에 ..