공부방/iOS2019. 10. 14. 17:24XCode 11.1 update Crash RealmSwift

XCode 11.1 업데이트 이후 갑자기 RealmSwift 에서 아래와 같은 메시지를 출력후 앱이 죽었다. Terminating app due to uncaught exception 'RLMException', reason: 'Primary key property ...... 찾아보니 RealmSwift를 업데이트 해주면 괜찮다고 한다. Podfile 의 pod 'RealmSwift', '3.18.0' 로 버전을 업데이트 해준다. 만약 해당 버전을 못 찾는다면 pod repo update 를 입력후 pod install 이나 pod update 를 해주면 된다. 참고 : https://github.com/realm/realm-cocoa/issues/6250

iOS fixed header and horizontal UIScrollView in UICollectionView (iOS 가로 스크롤 뷰가 포함 된 CollectionView)
공부방/iOS2019. 10. 10. 18:00iOS fixed header and horizontal UIScrollView in UICollectionView (iOS 가로 스크롤 뷰가 포함 된 CollectionView)

Android 도 같은 프로젝트를 만들었는데, iOS 도 비슷하게 만들면 어떨가 해서 만들어 보았다. 테이블 레이아웃처럼 사용 가능하면서 동시에 recycle 되기 때문에 갯수에 상관없이 성능상 큰 지장 없이 사용 가능 하다. 누군가에게 도움이 되길 바란다. Full Source Code : https://github.com/JeonGuKang/iOS-Fixed-Header-Horizontal-Scroll

Android fixed header and horizontal scroll in recyclerview (안드로이드 horizontal scroll RecyclerView)
공부방/Android2019. 10. 7. 13:00Android fixed header and horizontal scroll in recyclerview (안드로이드 horizontal scroll RecyclerView)

개발을 하다가 아래와 같은 테이블 구성 기능이 필요한 View 가 필요했는데 , 대부분 TableView를 추천해 주었다. 하지만.. 문제가 되는건 역시 성능 이슈, 저런 튜플 데이터를 몇 백개를 보여주고, 그게 보여질 여러 타입의 View 들중 하나라면? 단순하게 ScrollView 에 모든 View 들을 넣고 Scroll을 한다면 어마어마하게 버벅일 것이며, 심할 경우 뷰가 로딩 될때까지 몇초의 시간이 걸릴수 있을 것이다. 이러한 부분을 개선하기 위해서 Observer를 이용해 그림 1 처럼 Recyclerview에 아이템들의 스크롤이 마치 한개의 스크롤 뷰처럼 동작하고, 다른 Type 의 View 들을 붙여도 성능상에 이슈가 거의 없다. 풀 소스 코드는 아래에서 확인 가능하다. https://git..

공부방/Android2019. 9. 30. 21:08How to get Android first visible item positions in StaggeredGridLayoutManager

일반 LinearLayoutManager 같은 경우는 findFirstVisibleItemPosition() 을 이용해서 바로 아이템을 가져 올수 있는데, StaggeredGridLayoutManager은 어떻게 가져 올수 있을까? StaggeredGridLayoutManager의 findFirstVisibleItemPosition의 구조는 아래와 같은데 public int[] findFirstVisibleItemPositions(int[] into) { if (into == null) { into = new int[mSpanCount]; } else if (into.length < mSpanCount) { throw new IllegalArgumentException("Provided int[]'s s..

공부방/Android2019. 9. 30. 14:35Android dynamic change StaggeredGridLayoutManager span count (span 갯수 동적으로 변경 하는 방법 )

StaggeredGridLayoutManager 를 이용해서 각 항목마다 보여지는 방식을 다르게 구성하고, 마지막 카테고리는 영상처럼 Grid 뷰로 구성하였는데, 동적으로 Span 카운트를 변경하려고 해보니, ScrollListener가 동작을 하지 않았다. stackoverflow 에서 알려주는 방식은 대충 home_rv.apply { layoutManager = StaggeredGridLayoutManager(spanCount, LinearLayoutManager.VERTICAL) adapter = this@HomeViewModel.adapter } 위와 같이 layoutManager 를 바꿔 주면서 SpanCount 를 변경해주고, adapter 또한 변경해 주라는 내용이었다. 물론 이방식도 단순하..

How to get dSYM file for release (상용 dSYM 파일 가져오는 방법)
공부방/iOS2019. 9. 30. 14:10How to get dSYM file for release (상용 dSYM 파일 가져오는 방법)

iOS에서 Fabric Crashlytics 를 이용하기 위해서는 dSYM 파일이 필요한데, 찾는 방법은 간단하다. 먼저 https://appstoreconnect.apple.com 에 나의 앱에 들어간후 활동 내역 탭 -> 모든 빌드 -> dSYM 다운로드를 클릭하여 dSYM zip 파일을 받아. Fabric 에 그대로 첨부해 준다.

공부방/Android2019. 9. 26. 20:12How to remove Android StaggeredGridLayoutManager item (StaggeredGridLayoutManager item 삭제 방법)

보통 RecyclerView 에서 아이템 삭제후에 notifyItemRangeRemoved() 또는 notifyItemRemoved() 을 이용해서 아이템의 삭제 여부를 통보 해주면 별다른 이상없이 잘 작동 하지만, StaggeredGridLayoutManager 에서는 각 뷰 타입별로 Span 을 달리 하기 위해 ItemDecoration 을 사용했는데, 여기서 out of index 에러가 나는 것이다. 찾아보니 아래와 같은 순서로 제거 동작을 수행하면 더 이상 에러가 나지 않았다. val index = arrayList.indexOf(item) arrayList.removeAt(index) notifyItemRemoved(index) notifyItemRangeRemoved(index, 1) 참고 ..

공부방/Node.js2019. 9. 26. 20:01Execution environment configuration and execution using pm2 ecosystem.config.js (pm2 ecosystem.config.js 를 이용한 실행 환경 설정 및 실행)

pm2 를 이용해서 Node.js 를 실행할때 ecosystem.config.js 파일을 셋팅한 후 셋팅값으로 실행할수 있는데 코드는 아래와 같다. module.exports = { /** * 앱 설정 */ apps: [ { name: 'APPSERVER', script: './app.js', // 앱 실행 스크립트 instances: '1', // 앱 인스턴스의 수 exec_mode: 'cluster', // 실행 모드. env: { // 환경변수. 모든 배포 환경에서 공통으로 사용한다. PORT: 3000, NODE_ENV: 'development', }, env_production: { NODE_ENV: "production", // 배포환경시 적용될 설정 지정 }, env_staging: { //..

How to insert MySQL dummy data using MySQLWorkbench (MySQL 더미 데이터 넣는 방법)
공부방/Mysql2019. 9. 26. 14:43How to insert MySQL dummy data using MySQLWorkbench (MySQL 더미 데이터 넣는 방법)

우리가 여러 게시물을 이용해 테스트를 해보고 싶을때 일일이 데이터를 삽입 하는 일은 피곤한 작업이다. 이럴때 원하는 양만큼 더미 데이터를 넣어줄수 있는데 워크 벤치에서 아래와 같이 코드를 입력해 준다. DELIMITER $$ DROP PROCEDURE IF EXISTS procedureName$$ CREATE PROCEDURE procedureName() BEGIN DECLARE i INT DEFAULT 1; WHILE i

공부방/iOS2019. 9. 24. 18:13iOS WKWeview not show keyboard when Input box call focus() issue (iOS WKWeview input focus() 호출해도 키보드 안보이는 현상)

일단 개발중인 App 이 웹뷰 하단에 버튼이 있고, 하단에 버튼을 누를시 자바 스크트 함수를 호출해서 input box 를 띄우는 작업을 하는데, 이상하게 input box 가 화면에 보여 진 상태 인데도 키보드가 나타나질 않았다. 그래서 focus() 대신 click() 도 호출해보고 iOS 쪽에서 직접 focus 도 호출해보고 별에 별짓을 다했는데, 처음 한번 키보드가 뜨고 다음 호출부터는 키보드가 뜨지 않는 문제가 있었다. 이문제의 해결코드는 다음과 같다. 아래 코드는 한줄이라도 빠지면 동작하지 않는다. 꼭 순서를 지켜 사용하기를 바란다. 해당 해결방법이 검색을 아무리 해도 안되서 고생을 했다. 다른 사람은 고생하지 말기를.... UIApplication.shared.sendAction(#selec..

image