일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- FocusNode
- struct
- Android
- fastlane
- 갤럭시폴드
- delegate
- PG결제
- MVVM
- reject
- BloC
- GetX
- IOS
- Xcode
- abstact
- 성능 개선
- reactivex
- copy on write
- shorebird
- appstore
- error
- 무선빌드
- Codemagic
- flutter web
- SHIMMER
- TextInputFormatter
- DevTools
- Codepush
- Swift
- Equatable
- FLUTTER
- Today
- Total
목록분류 전체보기 (34)
뚝딱뚝딱 모바일
안녕하세요. 오늘은 간단한 팁을 알려드리겠습니다. UX에 관심 있는 분들이라면 한 번쯤 찾아보셨을 TextField Focus 이동시키는 법입니다. 주로 사용하는 곳은 전화번호 인증 화면이 있을 것 같습니다. 이건 제가 개발한 지구하다 앱의 인증 화면입니다. 예시 화면으로 가져와봤습니다. 전화번호를 적고, 인증번호 전송버튼을 누르면 인증번호 TextField로 Focus가 바뀝니다. 되게 사소하지만, 유저 입장에서 좋은 UX라고 생각됩니다. 뭐 Focus 하나 가지고... 적용하지 않아도 유저 입장에서 TextField 한번 클릭하면 되는 건데... 라는 생각이 드실 수 있습니다. 하지만, 이러한 사소한 UX들이 모여 유저 입장에서 쓰기 편하다!라는 느낌을 받을 수 있으면, 훨씬 좋은 효과 아닐까 싶습니..
SwiftUI를 활용하여 만들다 보면, Git에서 변경된 파일로 UserInterfaceState.scuserstate 파일이 계속해서 잡히는 것을 보실 수 있을 겁니다. 이게 도대체 뭐길래 이렇게 자주 잡히지 짜증 나서 조금 찾아봤습니다. UserInterfaceState.scuserstate가 뭔데? UI 상태를 저장하고 있는 파일입니다. 파일을 제거해버리고 Xcode Preview에서 화면을 조금 건드리면 다시 파일이 생기는 것을 보실 수 있습니다. 그럼 어떻게 무시할까? 다행히 이 파일은 프로젝트를 구성하는 필수 요소가 아니라고 합니다. 복잡하게 생각할 것도 없이 gitignore에 추가해 줍시다. *.xcuserstate 이렇게 추가해 주시면, 계속 파일이 변경되었다고 깃에서 추적하지 않습니다.
안녕하세요! 다른 글들을 보시면 많이 언급하기도 했고, 개인적으로 정말 좋아하는 ReactiveX에 대해 알아보겠습니다. ReactiveX CROSS-PLATFORM Available for idiomatic Java, Scala, C#, C++, Clojure, JavaScript, Python, Groovy, JRuby, and others reactivex.io ReactiveX란? ReactiveX는 Reactive Extenstion의 줄임말로, 옵저버블 스트림을 활용한 비동기적 프로그래밍을 위한 API라고 설명할 수 있습니다. 처음 이 문장을 보시면, 단번에 이해가 어려우실 수 있습니다. 하지만 이 문장을 이해하신다면, ReactiveX (이하 Rx)의 개념을 이해하신 거나 마찬가지인 Rx를 ..
안녕하세요! 오늘은 PG 결제 웹뷰를 만들다 만난 이슈들에 대해서 적어볼까 합니다. 찾으면서 자료도 많이 없었고, 황당한 이슈도 만나서 기록해두려 합니다. PG결제 웹뷰 같은 경우에는 미리 구현된 상태였습니다. 제 개인폰에서 제가 가진 카드들로는 매우 잘된 상태였습니다. 하지만 여러 카드사를 다 테스트해보아야 했기에, 회사 다른 분들에게 테스트를 요청하였고, '대응 다 했으니 오류 안 뜨겠지~'라는 안일한 마인드로 기다리고 있었습니다. 하지만 오류는 이 생각을 비웃으며 떴고, 저를 매우 답답하게 하였습니다. 간단한 코드 설명 오류에 대해 설명드리기 전에, 간단하게 제가 짰던 코드를 먼저 알려드리겠습니다. inappwebview를 통해 웹뷰를 구성하였고, 그 안에서 Android는 shouldOverrid..
안 그래도 바쁜 연말에 App Store 리젝을 두 번이나 당했습니다. 사유는 권한을 허용하기 위해 뜨는 Alert 코멘트에 권한을 사용하는 이유에 대한 설명과 예시가 없다고 합니다. 해결 방법 info.plist에 들어가 리젝 사유가 되는 권한 부분을 찾습니다. 저희 앱은 위치 권한이 문제였습니다. 그래서 아래 두 항목의 코멘트를 수정하여 주었습니다. 여러 사람들의 자료와 이야기를 들어보니, 왜 필요한지, 어디에 사용되는지, 허용하지 않아도 앱을 쓸 수 있는지 같이 세세하게 내용을 작성하면 좋다고 합니다. (심사해 주시는 분에 따라, 허용 관점이 조금씩 다른 것 같더라고요) 이를 다 적었는데도 리젝을 당하셨다면, 어디에 사용되는지 적는 부분에서, 앱에서 표기되는 기능 이름과 같은 지 확인해 주셔도 좋을..
안녕하세요! 오늘 글은 Error가 아닌 Warning이긴 하지만, 알아두시면 좋을 것 같아 적게 되었습니다. 어떤 상황에서 뜨나? 주로, 비동기적 상황에서 context를 사용하려할 때 뜹니다. someFutureFunction().then((_) async { String example = await awaitFunction(); context.read().add(SampleEvent()); // Bloc 코드 }); 예시 코드입니다. 이렇게 async 함수 안에서 await 후에 context를 사용하는 코드가 존재한다면, 노란 밑줄이 코드 밑에 쳐지면서 Warning이 생겨납니다. 해결법 사실 해결법은 매우 쉽습니다. context를 사용하는 코드 부분을 mounted가 true일 때만, 실행해..
이번에는 추상 클래스에 대해 정리해보려 합니다. 추상 클래스란? 추상 클래스는 추상 메서드를 가질 수 있는 클래스를 뜻합니다. 추상 메서드는 몸체가 없는 함수를 뜻합니다. 아래와 같은 함수를 추상 메서드라고 합니다. void something(); 일반적인 클래스는 추상 메서드를 가질 수 없지만, 추상 클래는 이를 가질 수 있습니다. 그리고 추상 클래스는 선언할 때 abstract 키워드를 사용하여 선언합니다. abstract class Vehicle { void honk(); } 특징 추상 클래스는 상속(extends) 또는 구현(implements)할 수 있습니다. class Car extends Vehicle { @override void honk() { // TODO: implement sound..
오늘은 정말 자주 쓰이는 라이브러리인 Equatable에 대해 알아보겠습니다. 활용도가 정말 높은 라이브러리이니 알아만 두셔도 좋을 것 같습니다. equatable | Dart Package A Dart package that helps to implement value based equality without needing to explicitly override == and hashCode. pub.dev 다른 언어를 접해보셨던 분들이라면, Equatable은 언어 자체적으로 존재해야 되는 거 아닌가? 왜 라이브러리로 따로 존재하지? 싶으실 겁니다. Dart에서는 모든 클래스들은 Object를 상속하고, 이 Object에는 operator 함수가 존재해 override 함으로 수정할 수 있기 때문에,..