Develop 251

[C언어] Implementation-Defined Behaviour

키워드Undefined Behaviour, Unspecified Behaviour, Implementation-Defined Behaviourㅤ프로그램의 이식성A 환경에서 실행하는 프로그램을 B 환경에서 실행하려고 할 때, 전환 과정에 노력이 덜 필요할수록 이식성이 좋다고 표현함. 이식성을 표현하기 위해 3가지 Behaviour(=Behavior)를 정의.ㅤex) Intel 맥에서 돌아가던 프로그램을 ARM 맥에서 돌리는 과정이 쉬운가?ㅤUndefined Behaviour코드가 어떻게 동작할지 보장하지 못하는 상태. 지금은 잘 동작하는 것처럼 보여도 다른 상황에서는 문제가 발생할 수 있다. 이식성 측면에서 가장 위험한 요소.ㅤUndefined Behaviour 의 경우, 컴파일러가 컴파일 자체를 실패시키..

[C언어] stdint.h 를 통한 타입 작성과 CLANG Header 읽기 개고생

키워드type, stdint.h, implementation-defined behaviour, int32_t, 이식성ㅤ타입을 정확하게 쓰기여러 임베디드 샘플코드를 보면 타입이 단순히 int 처럼 작성하는게 아니라, int32_t 이렇게 작성하는 것을 볼 수 있다. 이게 더욱 정확하게 bit수까지 포함해 타입을 작성하기 때문에 정확한 개발이 가능하고, 이후 컴파일러나 환경 변화로 인해 타입 별 bit 수가 변경되더라도 손쉽게 핸들링이 가능하기 때문에 유용한 방법이라고 한다. ( = 이식성을 높이기)ㅤ이걸 자동으로 해주는게 stdint.h 헤더파일이다.stdint.h 헤더를 통해 타입을 define하는 경우, 코드에서 sign여부와 길이를 정확하게 명시한 타입을 사용할 수 있다.ㅤ아래는 xcode에서 std..

[C언어] 함수의 타입변환은 무죄

함수의 이름은 함수 포인터이다.int func(int a, int b){ return a + b;}int main(void) { printf("%d\n", func(10, 20)); printf("%d\n", (*func)(10, 20)); // 함수포인터에 별 아무리 찍어도 해당 함수포인터를 가리킴 printf("%d\n", (****func)(10, 20)); // 근데 이건 안됨. 함수 이름에는 크기가 없어서 그렇다. // printf("%d\n", func[0](10, 20)); return 0;}ㅤㅤ함수포인터의 유용성여러 동작에서 공통된 동작이 있으면 함수로 빼서 사용.함수의 동작을 모두 구현하지 않고 일부를 비워둔 상태에서, 다른 사람이 로직을 구현하..

[ReactNative] iOS 아카이빙 실패 / React-Core_privacy 중복 문제

최근에 ReactNative의 iOS 빌드(아카이브) 과정에서 자꾸 못보던 문제가 발생했다. 그런데 약간 암담했던 것은, 문제점을 제대로 파악해주지 못했다는 것.[15:24:07]: ▸ ** ARCHIVE FAILED **[15:24:07]: ▸ The following build commands failed:[15:24:07]: ▸ Archiving workspace onthemood with scheme onthemood[15:24:07]: ▸ (1 failure)[15:24:07]: Exit status: 65[15:24:07]: Looks like fastlane ran into a build/archive error with your project[15:24:07]: **It's hard t..

[Flutter] iOS 아카이빙 Distribution 중 The archive did not include a dSYM for the Flutter.framework 에러 발생 해결하기

이번에 출시한 앱의 버전 업데이트를 위해 iOS 아카이빙을 진행하면서 Distribution 옵션을 선택했는데, 아래와 같은 경고 메시지를 맞닥뜨렸다.ㅤ ㅤUpload Symbols FailedThe archive did not include a dSYM for the Flutter.framework with the UUIDs [0000-0000]. Ensure that the archive's dSYM folder includes a DWARF file for Flutter.framework with the expected UUIDs. 근데 Appstore Connect 앱에서는 해당 앱이 정상적으로 Distribute 되었다고 알림이 와서, 위 경고가 어떤 내용인지 조금 더 찾아보고자 한다. 혹시 앱..

[Expo Go] 안드로이드 에뮬레이터에서 "expo go keeps stopping" 으로 Expo Go 가 자꾸 강제종료될 때

이번에는 Expo Go 문제로 잠시 찾아왔다. 사이드 프로젝트로 RN을 만져보고 있는데, iOS 에뮬레이터쪽의 실행은 문제가 없었는데 안드로이드에서는 Expo Go 앱 자체가 실행이 안되는 (스플래시 화면이 나오자마자 튕겨버리는) 문제가 있었다. 새로운 Expo 프로젝트를 만들어서 빈 프로젝트를 빌드했을 때에도 동일한 문제가 발생했다. 근데 이게 Expo 에서 앱 빌드를 안누르고 그냥 에뮬레이터 상에서 Expo 앱을 누르기만 해도 Expo Go 앱 자체가 꺼져버리는거라, 코드나 빌드 상의 문제가 있는 것 같지는 않았고 Expo Go 자체의 문제로 크게 의심되었다.문제의 원인을 찾아보기 위해서 Android Studio 에서 Logcat을 연결해 에뮬레이터 자체에서 뱉어내는 로그들을 찾아보려 했다.  그 ..

[Flutter] Equatable 패키지는 값 비교를 해주지 않는다.

어제부터 FutureProvider.family로 상태 관리 로직을 추가해보려고 수많은 뻘짓과 문서탐색과 노가다를 하고있었다. 그리고 오늘의 글을 작성하려는 목적이 여기에서의 파라미터 타입에서 시작되었다!!!ㅤUsecase를 호출하기 위한 파라미터 데이터를 묶어줄 타입을 이렇게 클래스로 만들어주고 FutureProvider로 param을 넘겨 데이터를 호출하였다.// 클래스 타입을 이렇게 정의해주고class MyUsecaseParam { MyUsecaseParam({required this.id, required this.date}); final String id; final DateTime date;}// 아래처럼 호출하였음final param = MyUsecaseParam(id: ..., dat..

[Flutter] FutureProvider의 캐싱

Riverpod 패키지의 여러 Provider 중에서 특정 데이터(상태값)을 확인하기 위해 파일IO나 네트워크 등의 비동기 처리가 필요한 경우에, FutureProvider를 활용해줄 수 있다. FutureProvider의 공식 문서를 살펴보면, 비동기 프로세싱에 대해서 캐싱 처리를 지원한다고 되어있다. 즉, FutureProvider를 사용하는 경우에, 동일한 요청에 대해서는 새로고침을 요청하지 않는다면 알아서 캐싱된 데이터를 가져와 제공하기 때문에 효율적으로 상태 관리를 처리해줄 수 있다! 다시 말해서, 한 번 비동기 로직을 수행하여 상태값을 만들어둔다면 다시 로직을 수행하지 않고 결과값을 바로 전달한다. (Dispose 시점을 잘 제어한 경우에 해당함 — @rivderpod 어노테이션을 통해 만들어..

[Flutter] 같은 열거 값 이름을 가진 서로 다른 두 Enum 간의 변환에는 findWhere을 사용하자!

이번에 Enum 간의 타입 변환을 하는 새로운 방식을 찾아서, 기록으로 남겨두려고 한다. 생각도 못했던 방식… 오호…ㅤ대충 상황은 이런 느낌이였다.레이어 분리를 위해 동일한 상태 값에 대해서 도메인 레이어에서는 Entity를 위한 enum 타입을 사용해주고 있었고, 데이터 레이어에서는 Model을 위한 enum 타입을 사용해주고 있었다.enum MyDataTypeForEntity { A, B, C, D, none }enum MyDataTypeForModel { A, B, C, D, none }ㅤEntity와 Model에서는 이 두 타입을 각각 사용해 정의해주고 있었고, 나머지는 대부분 원시값으로 속성을 사용해주고 있었다.class MyEntity { final String name; final MyD..

[Flutter] 3.24 버전부터 Swift Package Manager를 지원!

Flutter 3.24 버전에서부터 Swift Package Manager (이하 Swift PM 또는 SPM) 을 패키지 관리 도구로 공식적으로 지원하기 시작했다!ㅤ회사 내에서 플러터 업데이트나 새로운 기술에 대해 호기심이 많으신 팀원분이 계신데, 내가 이전에 iOS 개발에 대한 경험이 있다보니 “SPM을 우리도 도입하면 괜찮을까? 어떤 장점들이 있을까?” 에 대해서 나에게 물어봐주셨다. 나도 요런 부분들이 궁금하기도 하고, 애플과 플러터의 조합에 호기심도 생겨서 SPM 적용에 대한 정보 서치와 현 시점에서의 생산성 개선 정도에 대해서 테스트를 해봤다.ㅤ그 결과와 내 생각은 글 하단에 작성해뒀다!ㅤ여기 Medium 글을 확인해보면, 플러터 3.24 버전부터 Swift PM을 지원한다. 아직 Early ..

320x100