소프트웨어개발 20

NotificationManager 안드로이드 타겟 33 이상 권한 문제

기존에 잘 사용하던 로컬 알림이 안드로이드13 (API 레벨 33)을 타겟으로 빌드하니 작동하지 않습니다. 이유를 검색해 보니, 안드로이드 13에서는 노티피케이션을 위한 매니페스트 권한과, 유저에게 런타임 권한을 얻어야 사용이 가능합니다. 먼저 AndroidManifest.xml 에 노티피케이션 권한을 선언합니다. 런타임에서 POST_NOTIFICATIONS 의 권한을 사용자로부터 받았는지 확인하고, 받지 않았다면, 권한을 요청합니다. if (ContextCompat.checkSelfPermission (this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { // 권한을 이미 얻었습니다. } else { v..

[안드로이드] EditText 모양 바꾸기 및 선택시 모양 변경

안드로이드에서 EditText 의 모양을 바꾸고 싶을 때가 많습니다. 최근의 안드로이드에서는 EditText의 기본적인 모양이 테마에 의해 일반적으로 언더바 형태이죠. 여기서는 약간 코너에 라운드가 있는 사각형의 모양으로 바꿀겁니다. 또한 선택되었을 때 (포커스가 잡혀 있을때) 사각형의 색상도 바꿔줄 것입니다. (변경전) (변경후) 1. res/drawable 에 xml 파일 하나 추가 res/drawable 에 EditText의 모양을 지정할 적당한 이름의 xml 파일을 추가합니다. 여기서는 edittext_rounded_corner_rectangle.xml 이라고 하겠습니다. 2. 아래의 샘플과 같은 요령으로, 원하는 형태의 EditText 형태를 작성합니다. 3. 모양의 변경을 원하는 EditTex..

[iOS] Xcode 11 과 iOS 13 업데이트 급한 불 끄기 (응급 처치)

iOS 를 개발 할 때에는 새 버전의 OS가 발표 되면 새 OS에 대응하기 위해 Xcode도 그 버전에 맞는 것으로 업데이트 해 줘야 합니다. 몇달 전 출시된 iOS 13 과 Xcode 11 의 경우 기존 프로젝트를 새로 빌드하면 눈에 띄는 것 두가지가 다크모드 (Dark Mode) 에서 UI 색상이 바뀌기도 하고 뷰를 모달 형식으로 띄울 때 뷰의 스타일이 페이지 시트 스타일로 나타나는 것을 볼 수 있습니다. 먼저 뷰를 모달로 띄울 경우 Xcode 11 에서 빌드하여 iOS 13에서 실행시키면, 아래 오른쪽 화면과 같이 페이지 시트 (Page Sheet)형태로 나오게 됩니다. 의도적으로 한 것이 아니라면 원치 않는 모습일 뿐더러 저 형태에서는 뷰를 쓸어 내리면 모달뷰가 사라져 버리므로 원하는 동작도 아닐..

[iOS] Xcode 11 에서 iOS 13 미만 지원 프로젝트 만들기

Xcode 11 로 업데이트 한 후에 새로운 프로젝트를 생성하면, 기본적으로 iOS의 경우 13.x 버전을 타겟으로 하는 프로젝트가 생성됩니다. 일반적으로 호환성을 높이기 위해 어느정도 하위버전으로 타겟을 변경하게 되는데, 이번 Xcode 11은 Xcode 10과 마찬가지로 iOS 8 이상을 지원합니다. 그런데, 문제가 있습니다. 프로젝트를 생성하고 빌드 타겟을 iOS 13 미만으로 설정하였을때, 에러가 발생하며 빌드되지 않는 문제가 있습니다. 구글을 검색해 보니 역시 같은 문제가 있고 해결할 수 있는 몇 가지 방법이 나오네요. 이 글에서는 그 중 파일을 삭제하지 않고 하는 방법을 남겨둡니다. 아래와 같이 SwiftUI가 아닌 Storyboard를 선택하여 프로젝트를 생성하였음에도 불구하고....빌드 타..

[안드로이드] 프로젝트 이름 바꾸기 (패키지 이름 변경 포함)

프로젝트를 진행하다 보면, 프로젝트 이름과 패키지 이름을 바꾸어야 할 필요가 생기기도 합니다. 처음부터 잘 지어서 변경할 일이 없다면 좋겠지만, 어쩔수 없는 경우도 있죠. 개발툴이 한번에 쉽게 프로젝트 이름을 바꿀 수 있게 해 주면 좋을텐데, 이상하게도 개발 툴들이 이쪽에는 인색합니다. 이 글에서는 안드로이드 프로젝트 (안드로이드 스튜디오 프로젝트)의 이름을 바꾸는 방법을 알아보겠습니다. (패키지 이름을 변경하는 것을 포함합니다.) 구글을 검색해보면 프로젝트 이름과 패키지 이름을 바꾸는 다양한 방법이 제시되어 있지만 잘 안되는 경우가 많습니다. 아래에는 다양한 방법중 깔끔하게 성공한 케이스의 방법을 적어 둡니다. 참고로 테스트 환경은, MacOS Mojave 10.14.4Android Studio 3.3..

[안드로이드] java.lang.ClassNotFoundException ad.loadClass 비정상 종료 해결하기

올해들어 갤럭시 시리즈가 안드로이드 9 (파이)로 업데이트 되고 있습니다.저는 가능한한 매일 Play Console 앱에서 구글플레이에 올려 놓은 앱의 상태를 확인하고 있는데요...제 앱 하나가 평소에 비정상 종료가 거의 없던 앱인데 최근 72시간 내에 비정상 종료 수가 5건이나 있다고 나타납니다.내용을 자세히 살펴보니, Android 9 버전에서 구동된 앱의 ad.loadClass 에서 java.lang.ClassNotFoundException 예외가 발생했다고 하네요.ad.loadClass 이면 애드몹에서 발생한 것으로 보여집니다. 인터넷을 검색해 보니 해결 방법은 의외로 간단합니다.아래 내용을 AndroidManifest.xml 의 application 태그 안에 추가해 줍니다. 일단 API Lev..

[iOS] 아이폰 NFC 읽기 테스트 방법

2017년 WWDC 에서 애플은 아이폰에서 NFC 를 지원하는 프레임웍을 내놓았습니다. 이름하여, Core NFC ... 이름은 거창(?)하지만... NFC 의 모든 기능을 지원하는 것이 아니라, NDEF 타입1~5의 태그를 읽는 것만 오픈하였습니다. 그래서 Core NFC는 iOS 11부터 지원하며, 기대와는 달리 iOS 12 에서도 읽기만 지원하고 있습니다. 또한 사용할 수 있는 기종은 iPhone 7 을 포함, 이후 출시된 아이폰들만 지원합니다. 그런데, 내가 가지고 있는 아이폰이 NFC 가 제대로 작동하는지 어떻게 테스트해 볼 수 있을까요? NDEF 타입1~5의 NFC Tag 데이터를 가진 NFC 카드가 있다면 간단히 테스트 해 볼 수 있습니다. 다만, 제가 가지고 있는 여러 신용카드들, 출입카드..

애플 개발자 계정 이중 인증 (Two-factor authentication) 대응 하기

애플에서 어제 메일이 하나 도착했습니다. 이제 애플 개발자 계정에 이중 인증(Two-factor authentication)을 사용해야 한다는 내용입니다. 저는 보안에 항상 민감하기 때문에 중요한 계정 들은 가능한한 이중 인증을 사용합니다. 개발자 계정을 포함한 애플 아이디 역시 이중 인증을 사용해 왔기 때문에, 그냥 쓰면 되겠구나 생각을 했으나, 애플 개발사 사이트에 접속해 보았더니... (출처 : developer.apple.com) 네, 아니랍니다. 제가 여태까지 쓰고 있었던건 이단계 확인 (Two-Step Authentication)이었고 이중 인증 (Two-factor authentication)은 다른 것이랍니다. 이중 인증을 사용하지 않으면, 이제(2019-2-28기준)는 개발자 페이지에 접..

안드로이드 스플래시 스크린 만들기

스플래시 스크린 (Splash screen) 이란 프로그램(앱)이 실행될때 잠시 나타나는 화면을 말합니다. 다른 말로는 런치 스크린 또는 로고 화면이라고 부르는 분들도 있습니다. 개발자들은 각자 안드로이드에서 여러가지 방법으로 스플래시 스크린을 만듭니다. 대체로 많이 쓰는 방법이 스플래시 액티비티를 만드는 방법입니다. 물론, 로딩이 필요한 앱들은 스플래시 액티비티에서 로딩까지 처리한 다음에 메인 액티비티로 넘어가게 하는 방법을 많이 사용할 것입니다. 하지만, 로딩이 그다지 필요하지 않은 경우에 스플래시 액티비티를 일반 액티비티를 만드는 방법대로 만든다면, 처음에 앱이 실행되면서 빈 공백의 흰색 또는 검정색의 화면 후에 스플래시 화면이 잠깐 뜨고 (임의로 지정된 시간동안 띄운다면) 사용자의 시간만 뺏는 경..

안드로이드 액티비티 애니메이션 없애기

[테스트 환경]기기 OS : Android 8타겟 SDK : API Level 27 안드로이드에서 액티비티를 띄울때, 그리고 없앨때 자동으로 애니메이션이 붙습니다. OS 버전에 따라 차이가 있는데, 페이드 인/아웃 애니메이션을 보여 줄 때도 있고, 좌우로 나타났다 사라지는 경우도 있습니다. 페이드 인/아웃의 경우는 대체로 문제가 되지 않는데, 좌우로 슬라이딩 되며 나타났다 사라지는 경우는, 팝업 용도의 액티비티와 같은 어울리지 않아 어색한 경우가 있습니다. 따라서 이런 경우는 전환 애니메이션을 작동하지 않도록 할 수 있습니다. 검색해 보면 다양한 방법이 소개되어 있지만, 여기서는 코드를 통해 간단하게 애니메이션을 제거해 보겠습니다. (1) 액티비티를 띄울때 애니메이션 없애기 액티비티를 시작하기 위한 인텐..