목록프로그래밍 (95)
개발자 블로그
layout preview 안보임.. stackoverflow에도 같은 증상을 겪는 사람이 있는데, 답변대로 해봤지만 여전히 안보임.. 휴.. https://stackoverflow.com/questions/73772547/ Android Studio Dolphin | 2021.3.1 does not show layout preview I'm using Android Studio Dolphin | 2021.3.1 After updating Android studio chipmunk | 2021.2.1 to Android studio Dolphin | 2021.3.1 my all project design preview and layout preview not showing. If a... stackove..
왜 느림? 왜 이렇게 많은 시간이 걸리는지 확인하기 위해 파이프라인 실행 결과를 살펴보겠습니다. 제목이 스포일러가 된 것 같은데.. 소스코드 체크아웃 하는 부분이 8분 31초나 걸리고 있습니다. 전체 런닝 타임이 12분 30초인걸 감안하면 거의 60% 정도의 시간이 여기에 소요된다는 것을 알 수 있습니다. 체크아웃 항목을 클릭하면 자세한 내용을 볼 수 있습니다. 주요 내용을 옮기면 대략 아래와 같습니다. Receiving objects: 98% (28461/29041), 2.71 GiB | 5.79 MiB/s Receiving objects: 99% (28751/29041), 2.71 GiB | 5.79 MiB/s Receiving objects: 100% (29041/29041), 2.71 GiB | ..
✔ Firebase 관련 안내 이 예제에서는 배포 도구로 Firebase App Distribution을 사용합니다. 아직 Firebase 구성을 시작하지 않았다면 먼저 Firebase 프로젝트 설정을 완료해주세요. https://console.firebase.google.com/ ✔ App Distribution 관련 안래 Firebase App Distribution을 사용하기 위해서는 몇 가지 설정을 먼저 진행해주셔야 합니다. 여기서는 해당 절차들에 대해서는 설명하지 않습니다. 자세한 내용은 아래 링크를 참고하세요. ● Firebase App Distrubution 개요 - https://firebase.google.com/docs/app-distribution?hl=ko ● 테스터를 위한 설정 -..
YAML이 뭔데? 야, 근데 YAML이 뭐냐? https://ko.wikipedia.org/wiki/YAML 좀 더 경량화 된 json? 읽을 때는 '야믈' 또는 '야멜' 정도로 발음합니다. ('야믈' > '야멜' 인듯?) 어쨌든 파이프라인 구축에 있어서 YAML이 뭔지는 중요하지 않습니다. 중요한건 command입니다. json과는 다르게 대신 띄어쓰기가 중요하다(의미를 가진다)라는건 기억하세요! 다시 처음부터... 이제 본격적으로 빌드 파이프라인을 생성해 봅시다. 이전에 classic editor로 만들었던 빌드 파이프라인은 삭제합니다. 그리고 다시 "New pipeline" 버튼을 클릭해서 파이프라인 생성을 시작합니다. ✔ 참고 "GUI로 만들기" 항목과 중복되는 부분 중 중요하지 않은 단계들은 생..
✔ 참고 실제 운영환경에서는 GUI로 빌드 파이프라인을 생성하지는 않습니다. 따라서 이 페이지 내용은 그냥 가볍게 살펴보셔도 괜찮습니다. Classic Editor vs YAML 기본적으로 YAML을 사용해서 빌드 파이프라인을 작성하는걸 권장합니다. 이름이 Classic Editor라서 이게 직접 스크립트를 작성하는 것 같지만, GUI 방식이 맞습니다. YAML은 직접 스크립트를 작성하는 방식입니다. YAML을 사용해야 좀 더 세부적인 내용을 건드릴 수 있어서 YAML 방식을 추천하는 것 같습니다. 일단은 돌려보자! 백문이 불여일견! 일단 돌려봅시다. 전 단계에서 "New pipeline" 버튼을 클릭하면 아래 화면이 표시됩니다. 우리는 일단 GUI 방식으로 구축을 할 것이기 때문에 이미지 맨 밑에 보이..
✔ 빌드환경 이 페이지에서 설명하는 내용은 안드로이드 앱 빌드를 기본으로 합니다. ✔ 형상관리 도구 이 페이지에서 설명하는 내용은 VCS로 Azure DevOps Repos git을 사용합니다. ✔ APK 배포 방법 생성된 APK 배포를 위해서 Firebase App Distribution을 사용하고, 세부적인 구현 방식은 gradle을 사용한 앱 배포 방식을 사용합니다. 위와 관련하여 자세한 내용은 아래 링크를 참고하세요. https://firebase.google.com/docs/app-distribution/android/distribute-gradle 빌드 파이프라인? Build Pipeline은 trigger branch에 변경(push, merge)이 발생했을 때 자동으로 빌드가 수행되도록 하..
Translated by Google Translate. In my app, I was receiving notifications by gmail using nodemailer for the part that needs monitoring. In the past, it was working fine without any problems, but at some point the mail was not being sent. So I looked up the error log and found the following log. (It may be slightly different from the original text by deleting or modifying sensitive information.) S..
내 앱에서 모니터링이 필요한 부분에 nodemailer를 사용해서 gmail로 알림을 받고 있었다. 기존에는 아무런 문제 없이 잘 동작하고 있었는데, 어느 순간부터 메일이 발송되지 않고 있었다. 그래서 에러 로그를 찾아보니 아래와 같은 로그가 찍혀있었다. (민감할 수 있을 것 같은 내용은 삭제 또는 수정해서 원문과는 조금 다를 수 있다.) Send mail error: { Error: Invalid login: Username and Password not accepted. Learn more at https://support.google.com/mail/?p=BadCredentials - gsmtp at SMTPConnection._formatError (myprojects/node_modules/no..
길게 설명 안한다. 이거 모르는 흑우 아직 없제? 여기서 예언 하나.. 당신은 분명 속으로 'x발..'이라고 말했을꺼다. 내말이 맞지? ㅋ 응~ 내 얘기야.. 이 것 때문에 오늘 삽질 존나게 했네.. ㅅㅂ
IDE에서 기본적으로 설치되는 플러그인 외에 별도의 플러그인을 사용해본적이 최근에는 없는 것 같다. 아주 오래전 Visual Studio 6.0을 사용하던 시절에는 코드 자동완성 같은 기능이 IDE 자체에 없었기 때문에, 그 때는 자동완성 플러그인을 사용하긴 했었다. 아마도 그게 마지막 플러그인이었던 것 같네. Android Studio는 그냥 그 자체로도 대단히 훌룡한 IDE지만 찾아보니 유용한 플러그인이 있어서 추천하는 포스팅을 작성해보려고 한다. 플러그인 이름은 "SonarLint". "SonarQube"는 아는 사람이 있을지도 모르겠네. 소나큐브는 별도의 서버에 설치를 해야 되서 사용이 그리 간단하지 않지만, SonarLint는 SonarQube와 같은 기능을 별도의 서버 없이 아주 편리하게 제공..
뭐 대부분의 문제가 그렇겠지만, 이 문제 역시 바보 같은 나의 실수 때문에 발생한 문제였다. RecyclerView.Adapter의 getItemCount() 함수만 호출 안되는 것이 아니고, 다른 override 함수들인 onCreateViewHolder(), onBindViewHolder() 함수 역시 모두 호출이 되지 않았다. 브레이크 포인트를 걸어보고, 로그를 찍어봤지만 역시 호출이 안된다는 것이 확인됐다. 구글링을 해보면 LayoutManager 설정을 빼먹은게 아니냐는 글이 많고, 실제로 가끔 겪는 실수이긴한데, 이번에는 그 문제가 아니었다. 그리고 LayoutManager 설정을 빼먹었을 때는 Logcat 메시지에 아래 이미지처럼 친절하게 알려준다. 이번에 getItemCount()를 비롯해..
안드로이드 스튜디오의 새로운 버전이 출시 되었다. 뭐 새 버전 출시야 계속 반복되는 일이지만, 버전 네이밍 룰을 변경한걸 보면 뭔가 큰 변경이 생긴 것 같기도하고.. 이번 Android Studio 버전의 이름은 Arctic Fox이다. 한국어로는 북극여우 또는 흰여우. 그래서인지 이제 Android Studio를 실행시키면 잠깐 뜨는 로딩 화면에 흰여우가 그려져있다. 'A'부터 시작해서 'B', 'C', 'D'... 의 알파벳 순으로 동물의 이름으로 버전네임을 정할꺼라는데.. 'B'는 뭐가 될까? 'Bear'? 기대가 되네. 서론이 좀 길었다. 암튼 Android Studio를 업데이트 하고나니 아래 이미지처럼 한글이 깨진다. 별로 놀랍지는 않다. Android Studio를 업데이트 하면 자주 겪게되..
완전한 해결 방법은 아니지만 혹시나 도움이 될까 싶어서 공유한다. Node.js 환경에서 MySQL(mariaDB)에 연결할 때 발생하는 에러인데, 아래는 전체 에러 로그 캡처 화면이다. 메시지는 이렇다: Error: Cannot enqueue Query after fatal error. 치명적인 오류가 발생 한 뒤에는 쿼리를 큐에 넣을 수 없다.. 정도로 번역이 가능할 것 같은데, 왜 치명적인 오류가 발생한건지는 모르겠다. Node.js와 MySQL(mariaDB)를 이용해서 서비스를 운영하고 있다면 잘 알테지만 일정시간동안 서비스 요청이 없으면 DB connection이 끊긴다. 그러면서 node.js 서비스도 종료가 되고. 그래서 많이들 이용하는게 아마 PM2가 아닐까 싶다. 나 역시 PM2를 사용..
Initially, it was a project that did not use "Automatically manage signing". Then, while working on another project recently, I realized that "Automatically manage sigining" is convenient, and I tried to change the existing manual signing to Automatic, so an error occurred. TheThe contents of the error are as follows. After selecting Team, "(AppName) has conflicting provisioning settings." is di..
최초에는 "Automatically manage signing"을 사용하지 않고 있던 프로젝트였다. 그러다가 최근에 다른 프로젝트를 진행하면서 "Automatically manage sigining"이 편하다는걸 알고 기존에 매뉴얼로 사이닝 하던 걸 Automatic으로 변경하려고 하니깐 발생한 에러다. 에러 내용은 아래와 같다. Team을 선택하고나면 (AppName) has conflicting provisioning settings. 라고 뜨면서 "자동 사이닝을 선택했지만 Provisioning profile이 메뉴얼로 명시되어있다.." 뭐 대충 이런내용의 상세 메시지를 보여준다. 그러면서 Provisioning profile 값을 "Automatic"으로 변경하라고 알려준다. 그래서 PROVISI..
당겨서 새로고침을 위해서 사용하는 SwipeRefreshLayout은 일반적으로 RecyclerView와 함께 사용하는 경우가 많지만, 이번에는 ScrollView로 감싸고 있는 내용을 새로고침 하기위해서 SwipeRefreshLayout을 사용하는 방법을 설명하려고 한다. 그냥 단순하게 ScrollView를 SwipeRefreshLayout으로 감싸기만 해서는 원하는 대로 동작하지 않는다. 아래로 스크롤은 정상적으로 동작하지만 다시 위로 올리기 위해서 Swipe Down 터치 동작을 하게 되면 ScrollView의 스크롤 업 대신에 SwipeRefreshLayout의 Refresh 동작이 트리거 되기 때문이다. 일단 레이아웃은 아래와 같다. 그냥 단순히 ScrollView를 SwipeRefreshLay..
잘 되던 아이폰 앱 빌드가 갑자기 이런 에러를 내 뱉었다. "Error were encountered while preparing your device for development. Please check the Devices and Simulators Window." 메시지대로 [Devices and Simulators] 창을 확인해보면 상세한 에러 내용을 볼 수 있다. "Failed to prepare device for development." "If you are certain that Xcode supports development on this device, try disconnecting and reconnecting the device." 대충 해석하면 니 아이폰이 Xcode가 지원하는 기..
전에는 발생하지 않던 문제였는데 Admob 버전을 업데이트 하면서 발생한 문제인 것 같다. 전체 에러 메시지는 아래 이미지 처럼 *** Termainating app due to uncaught exception 'GADInvalidaInitializationException, resion: 'The Google Mobile Ads SDK was initialized without AppMeasurement. Google AdMob publishers, follow instructions here: https://googlemotileadssdk.page.link/admob-ios-update-plist to include the AppMeasurement framework and set the -Obj..
Xcode 시뮬레이터에서도 FaceID 사용이 가능하다. 아래 이미처럼 [Features] > [Face ID]에서 [Enrolled]를 체크해주면 된다. 그런데 예상했던 Face ID 인식화면 대신에 아래 이미지처럼 "암호를 입력하십시오."라면 화면이 뜨면서 Face ID를 등록해주세요. 라는 메시지가 표시되었다. 혹시나 설정이나 개발자 메뉴에서 뭔가를 더 설정해줘야 되는 줄 알았는데 그게 아니고 info.plist 파일에 Key 항목을 추가해줘야 된다. 위 이미지 처럼 "Privacy - Face ID Usage Description" 항목을 추가해주고 다시 앱을 실행하면, 최초 한 번 Face ID를 사용하도록 허용하겠냐는 대화상자가 뜨고, 허용을 하면 Face ID 인식 화면이 정상적으로 뜬다. ..
stackoverflow.com/a/36281377 Emoji are not inserting in database node js mysql Hello I am here to discus one thing. I am building up a web service that makes a goal for inserting emoji data into database field. I am working with Node JS + Mysql. I set charset to UTF-8 or utf8... stackoverflow.com 참고로 서버 환경은 node.js + mariaDB(mysql) 입니다. 위에 답변처럼 DB에 연결할 때 charset을 'utf8mb4'로 추가해주니 이모티콘(이모지, emoji..
새로 아이폰을 구입해서 맥북에 연결하고 앱을 빌드하고 실행했는데 "ㅇㅇㅇ의 iPhone is not available."이라는 메시지와 함께 "Please reconnect the device."라는 메시지가 나왔다. 일단 결론부터 말하자면 내 경우에는 연결상태의 문제는 아니었고, Xcode 버전와 아이폰 iOS 버전이 맞지 않아서 발생한 문제였다. Xcode의 [Windows] > [Devices and Simulators] 메뉴를 실행해서 보면 제대로 된 메시지를 볼 수 있다. Xcode를 업데이트 하라고 친절하게 알려준다. (진작에 이렇게 메시지를 보여줄 것이지....) Xcode 버전별로 지원가능한 iOS 버전은 아래와 같다. 현재(2021년 1월) 기준으로 최신 iOS는 14.3 버전이기 때문에..
구글 플레이 스토어에 앱을 등록하기 위해서는 앱에 광고가 포함되어있는지 여부를 반드시 알려야 한다. 근데 앱에 광고를 안 넣었는데도 아래 이미지처럼 플레이 스토어에서 광고 SDK가 포함되어있다고 알리는 경우가 있어서 해결방법을 공유하려고 한다. 이 앱에는 광고가 없지만 "앱에 광고 SDK가 있습니다"라고 경고 표시가 보인다. 물론 "아니요, 앱에 광고가 없습니다."를 선택하고 넘어가면 되긴하지만.. 저 경고 표시가 너무 신경쓰여서 견딜수가 없다. gradle 의존성을 살펴보면 "com.google.android.gms:play-service-ads-identifier:17.0.0@aar"이 포함되어있는걸 볼 수 있다. 이 것 때문에 광고 SDK가 포함되어있다고 경고가 표시된 것 같다. 앱 수준의 buil..
기존 프로젝트에서는 이상이 없었는데, 최근에 만든 프로젝트에서는 '@string/appbar_scrolling_view_behavior'를 인식할 수 없다고 뜬다. 해결방법은 간단하다. 안드로이드 스튜디오에서 app 수준의 build.gradle 파일을 오픈한 뒤 dependencies에 아래 라인을 추가해준다. implementation "com.android.support:design:29.0.0" 그런다음 "Sync"를 수행하면 깔끔하게 해결!
지금까지 몇 번의 코딩 테스트를 봤었는데 문제 유형은 100% 똑같았다. API 알려주고 거기서 데이터 받아다가 화면에 리스트로 뿌리는 문제다. 이 유형에서 벗어나는 코딩 테스트는 한 번도 없었다. (참고로 경력이다. 신입의 경우에는 잘 모르겠다.) 오픈소스는 retrofit2, okhttp3, glide 이 정도 경험있으면 되고, 안드로이드 UI 쪽에서는 recyclerview를 사용해본 경험이 있으면 누구나 다 풀 수 있는 문제다. 여기에 추가적으로 디테일 화면을 구현한다던가 아니면 딥링크를 구현한다던가 아니면 테스트 코드를 작성한다던가.. 정도의 간단한 문제 몇 가지가 추가적으로 붙을 수 있다. 문제는 시간인데 시간을 분 단위로 굉장히 타이트 하게 주는 회사도 있었고, 며칠씩이나 넉넉하게 주는 회사..
배터리 최적화 예외 목록에 등록하기 위해서 "ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" 인텐트를 실행했을 때 뜨는 대화상자다.혹시나 해당 권한 요청을 고려하는 개발자에게 도움이 될까 싶어서 추가한다.여기서 허용을 하게 되면, 배터리 최적화 예외 목록에 "최적화 하지않음"으로 추가 된다. 참고로 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 인텐트를 실행하기 위해서는 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 퍼미션이 필요하다. 그리고 (중요) 해당 퍼미션이 선언 된 앱은 Google Play에 앱을 등록할 때 거부될 수도 있다. 해당 퍼미션이 앱 사용에 있어서 반드시 필요한 경우에만 승인을 해준다고 한다. 자세한..
포맷 한 번 했더니 내 설정이 다 사라져서..-_-;; 일단 필요한 것들 우선으로 여기에 정리해두려고 한다. 근데 티스토리 편집기 너무 갑작스럽게 완전 개편됐는데..?? 좀 사용자들이 서서히 적응할 수 있도록 해주는게 어떨까 싶은데.. 뭐 물론 나도 개발하는 입장에서 그냥 싹 갈아엎는게 개발 측면에서 부담없긴하다만.. 흠흠.. 1. 편집중인 코드 탭 여러줄로 표시하기 [intellij] 파일 여러개 열때 tab 여러줄로 보기. 예전에 썼던 notepad++에서 찾아서 썼던 것과 같은 기능인데요, 파일이 뭐가 열렸는지도 모르겠고, 파일 갯수가 많아서 project에서 찾기 번거로울경우, 보다는 연거 같은데.. 안보이는 경우에 좌우 넘겨서 하다 보면, 또 뭘 열었는지 한눈... todactodac.blogs..
권고(?)라는 표현이 맞을지는 모르겠다. 그냥 강제사항이라고 보면 될 것 같다.SMS 앱.. 그러니깐 문자메시지 앱이 아닌 앱의 경우에는 RECEIVE_SMS 퍼미션을 제거해야 된다. 자세한 내용은 아래 링크를 참조.https://support.google.com/googleplay/android-developer/answer/9047303?hl=ko 내가 대응한 부분은 본인확인을 위한 인증코드를 자동입력 해주는 부분이다. 게임 앱이기 때문에 SMS 관련된 기능은 전혀 없지만 처음 게임 시작할 때 본인확인 하는 부분에서만 사용하고 있었다. 일단 RECEIVE_SMS 권한은 제거 해야 된다. 그리고 인증코드 자동입력은 새롭게 추가된 "SMS Retriever API"를 사용하면 퍼미션 선언 없이도 기존처럼..
웹사이트 또는 블로그를 운영중인 사람이라면 "리퍼러(Referrer)"가 무엇인지는 이미 알고 있을거라고 생각한다. (잘 모르면 아래 링크 클릭!)위키백과 - HTTP 리퍼러간단하게 말하면 방문객이 어떤 경로로 유입되었는지 알 수 있는 정보다. 웹사이트 관리자라면 잘 알고 있을것이고, 지금 글을 작성하고 있는 티스토리 블로그에서도 관리자 페이지를 통해 이 정보를 볼 수 있다.아래 이미지는 티스토리 블로그의 관리자 페이지 > 통계 > 경로 > 유입로그를 캡처한 화면.저기서 빨간색으로 표시한 것은 web을 통한 방문이 아니라 스마트폰의 구글 검색 위젯을 통해 들어온 유입니다.내가 구현하려고 하는 것도 저것과 비슷한거고. 리퍼러를 추가하려는 Activity. 단순한 도움말 화면이다. 여기에 리퍼러를 추가하려는..
시크릿 모드를 표현해야 하는데 Material Design - Icons에는 적절한 아이콘이 없더라.그래서 직접 만들어봤다. 디자이너가 아니라서 좀 허접하긴한데,, 뭐 이정도면 어쨌든 의미 전달은 충분하지 않나.. 하는 개인적인 생각이다.필요하신 분은 마음껏 사용하시길.. 상업용 가능, 변경 가능, 출처 표시 안해도 됨.512x512px, 투명 배경 PNG 이미지.
"iOS"(아이폰)에서 구글 애드몹(Admob)을 사용할 때 발생하는 에러에 대한 에러코드와 설명. 안드로이드는 광고 요청 실패에 대한 에러코드 설명이 공식 문서에 있던데 iOS 버전은 따로 없는건지 아니면 내가 못찾은건지 모르겠다. 일단 안드로이드 버전은 아래 링크에서 확인 가능하다. Android onAdFailToLoad 에러코드 - 바로가기 참고로 아래 에러코드들은 내 앱에서 발생한 에러들만 확인한거라서 전체 목록은 아닐 수 있다. 에러코드 설명 1 Request Error: No ad to show. 2 Request Error: A network error occurred. 11 App is in background and background loading is disable. Ignoring..