티스토리

일용직 코딩노동자
검색하기

블로그 홈

일용직 코딩노동자

onedaycodeing.tistory.com/m

안드로이드 관련 개발내용을 포스팅합니다.

구독자
12
방명록 방문하기
공지 IOS 포스팅 시작합니다. 모두보기

주요 글 목록

  • 페피 솔플 보호되어 있는 글입니다. 공감수 0 댓글수 0 2025. 3. 9.
  • iOS Swift 디바이스 uuid 받아오기 (앱 재설치 후 값 동일하게) let keychainKey = "com.ex.uniqueDeviceIdentifier" // UUID를 가져오는 메서드 (없으면 생성 후 저장) func getDeviceIdentifier() -> String { // 먼저 Keychain에서 UUID 불러오기 시도 if let uuid = getUUIDFromKeychain() { return uuid } else { // 없으면 새로 생성 후 Keychain에 저장 let newUUID = UUID().uuidString saveUUIDToKeychain(uuid: newU.. 공감수 0 댓글수 0 2024. 10. 23.
  • 시드피나하 호기심 솔플 보호되어 있는 글입니다. 공감수 0 댓글수 0 2024. 7. 8.
  • 낮은 그래들 버전의 안드로이드 14 버전 타겟팅 지금부터 5년전에 만든 프로젝트가 있는데 안드로이드 14를 타겟팅하면 에러를 뱉어낸다. 현재 그래들 버전이 낮아서 14를 타겟팅 할 수 없다고 한다... AAPT2 process unexpectedly exit이런 에러도 같이 보였다..  그래들 버전을 올리기 위해 안드로이드 스튜디오 내부의 해당 기능(AGP Upgrade Assisteant)을 통해 그래들 버전을 올려주었다. 하지만 또 다른 문제가 나타났다. kxml 관련 파일이 누락되었다나 뭐라나.. 클래스를 찾을수 없다고한다.. 구글링과 스텍오버플로우 형님들 답변을 쫒아가 이것저것 proguard-rules.pro파일에 추가 해주었다. -keep class org.kxml2.io.KXmlParser { *; }-keep class org.kxml2.. 공감수 0 댓글수 0 2024. 6. 20.
  • biometric를 활용한 안드로이드 생체인증 그래들에 의존성 추가합니다. implementation 'androidx.biometric:biometric:1.2.0-alpha04' private lateinit var executor: Executor private lateinit var biometricPrompt: BiometricPrompt private lateinit var promptInfo: BiometricPrompt.PromptInfo 전역변수로 선언해줍니다. executor = ContextCompat.getMainExecutor(this@MainActivity) 인자값으로 Context 넣어 줍니다. biometricPrompt = BiometricPrompt(this@MainActivity, executor, object : .. 공감수 0 댓글수 0 2024. 2. 23.
  • 안드로이드 14 java.lang.SecurityException: Writable dex file '/data/data/packageName/code_cache/.overlay/base.apk/classes3.dex' is not allowed. 안드로이드 14를 넘어오면서 앱을 빌드해서 테스트폰에 실행 후 두번째 앱 빌드부터 에러가 발생하며 팅기는 현상이 발생했다. dex파일이 읽기/쓰기가 가능해서 보안문제가 발생 한 것 같습니다. dex파일을 읽기전용으로 변경해줌으로 오류가 해결되었습니다. 앱을 한번 삭제 후 해당 코드를 적고 재빌드 해주시면 됩니다. val dexOutputDir: File = codeCacheDir dexOutputDir.setReadOnly() 공감수 2 댓글수 0 2024. 2. 7.
  • Xcode linker command failed with exit code 1 (use -v to see invocation) 에러 Podfile파일을 열어보면 맨 위에 # Uncomment the next line to define a global platform for your project # platform :ios, '10.0' 공감수 0 댓글수 0 2023. 10. 30.
  • Xcode 15버전 Sandbox: bash(43130) deny(1) file-write-create 에러 Sandbox: bash(43130) deny(1) file-write-create 프로젝트경로/Pods/resources-to-copy-backhome.txt 해당 에러가 발생했다.. 이게 또 뭔 에러인지 찾아보니 Targets - Build Settings에 가서 Filter에 User script라고 검색해보면 User Script Sandboxing라고 나오는데 이걸 No로 변경해주면 된다. 공감수 2 댓글수 1 2023. 10. 24.
  • Xcode AVFoundation,AVKit import 에러 Cannot load underlying module for 'AVFoundation' 라는 에러가 갑자기 뜨는분들이 계실겁니다. Show live issues 체크해제! 해주세요 공감수 0 댓글수 0 2023. 6. 20.
  • 안드로이드 BLE 통신 예제 by Kotlin 안녕하세요 이번에는 BLE 통신예제를 해보도록 할게요. 우선 메니페스트에 권한을 먼저 넣어주겠습니다. 그리고 권한 체크도 꼭 해주세요. permissions = arrayOf( Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.BLUETOOTH_ADVERTISE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.POST_NOTI.. 공감수 2 댓글수 4 2023. 6. 16.
  • Xcode 아카이브 에러 PhaseScriptExecution failed with a nonzero exit code 본인프로젝트폴더/Pods/Target Support Files/Pods-ProjectName/Pods-ProjectName-frameworks.sh 해당 경로에 가서 Pods-ProjectName-frameworks.sh 파일을 열어본다. Command + f 를 통해서 source="$(readlink "${source}")" 해당구문을 찾는다. source="$(readlink -f "${source}")" 바꾼다 Xcode 업데이트 될때마다 문제가 생기는거 같은데 개발자들좀 못살게 안했으면 좋겠다.. 끝 ... 공감수 0 댓글수 0 2023. 6. 13.
  • iOS Swift의 생명주기 안드로이드에서 생명주기가 있는데 iOS에도 비슷한 맥락의 생명주기가 있습니다. 안드로이드 생명주기는 https://onedaycodeing.tistory.com/50 안드로이드(android) 생명주기(life cycle) 안드로이드에서는 생명주기라는게 있습니다. onCreate() - onStart() - onResume() - onPause() - onStop() - onDestory() - onRestart() 7개의 생명주기가 있습니다. 우선 onCreate()는 저희가 항상 쓰는 해당 클래스에 진 onedaycodeing.tistory.com 해당 게시글을 참고해주세요. override func viewDidLoad() { super.viewDidLoad() //뷰가 화면에 완전히 로드되면 호출.. 공감수 0 댓글수 0 2023. 5. 3.
  • Swift StoryBoard UICollectionView,UIPageControl를 이용하여 배너 만들기 이번 게시글은 안드로이드에서 사용하는 ViewPager 같은 느낌의 녀석입니다. 인디케이터까지 포함하여 만들어보도록 하겠습니다. 보통 흔히 배너광고같은걸 넣을때 많이 쓰시는데요 차근차근 해보겠습니다. Collection View를 하나 스토리보드에 넣어주세요.대충 위에서10 좌우 16 높이 168로 지정해줬습니다. 여기 이 네모박스가 Collection View Cell인데요좀 보기편하게 늘려줄게요 그리고 이 cell안에 이미지뷰를 하나 넣어주겠습니다. 전부다 0으로 걸어줬어요이런식으로 이미지가 들어가있습니다. BannerCell이라는 클래스를 하나 만들어주세요. import Foundationimport UIKitclass BannerCell : UICollectionViewCell{ overri.. 공감수 0 댓글수 0 2023. 4. 25.
  • iOS StoryBoard(스토리보드)에서 스크롤뷰 사용하기(ScrollView) 스크롤뷰를 검색하셔서 뷰컨에 하나 넣어줍니다. 사이즈에 맞게 최대로 늘려주세요. 오토레이아웃도 잡아주세요! 내용을 넣어줄 View를 하나 스크롤뷰 안에 넣어주세요. 이 View도 스크롤뷰 크기에 맞게 늘려주세요. 넣은 View를 Content Layout Guide에 저렇게 4개를 걸어주세요. 이번에는 Frame LayOut Guide에 Equal Widths를 걸어주세요 가로 스크롤이라면 Equal Heights를 걸어주시면 됩니다. 그다음에 뷰컨트롤러를 클릭해주세요. 좀 편하게 보기 위해서 Height를 1500으로 늘려줬습니다. 이렇게 라벨들을 몇개 넣어줬는데요 반드시 View안에 내용들에 오토레이아웃을 잡아주시고 마지막 뷰에는 바텀에 제약도 걸어줘야 스크롤뷰가 높이를 인식해서 스크롤이 가능해집니다.. 공감수 0 댓글수 0 2023. 4. 19.
  • 안드로이드 글라이드로 이미지 URL 로드 시 변경 안될때 이미지 url로 이미를 로드하게되면 캐시가 남아서 변경된 이미지 url을 로드해도 안되는 경우가 있습니다. RequestOptions requestOptions = new RequestOptions(); requestOptions.diskCacheStrategy(DiskCacheStrategy.NONE); requestOptions.skipMemoryCache(false); requestOptions.signature(new ObjectKey(System.currentTimeMillis())); Glide.with(mContext) .load(imageList.get(position)) .apply(requestOptions).into(imageView); 해당 옵션으로 로드해주시면 새롭게 로드하게 되어.. 공감수 0 댓글수 0 2023. 4. 18.
  • 안드로이드 뷰페이져 인디케이터 사용해보기 인디케이터는 배너광고같은 뷰페이져에 있어서 밑에 점처럼 생겨서 현재 몇번째 이미지를 보여주고있는지 보여주는 역할을 합니다. 이런식으로 밑에 검은 점같은게 보이나요? 이런식으로 표기해줄수있습니다. 프래그먼트에도 많이 사용하십니다. 우선 뷰를 그릴 클래스를 하나 추가하겠습니다. class IndicatorView: LinearLayout { private var mContext: Context? = null private var mDefaultCircle: Int = 0 private var mSelectCircle: Int = 0 private var imageDot: MutableList = mutableListOf() private val temp = TypedValue.applyDimension( /.. 공감수 0 댓글수 0 2023. 3. 29.
  • Swift 애플 스피치 이용하여 STT 만들어보기. 우선 info에 권한을 넣어줄게요. NSAppleMusicUsageDescription 앱에서 음성 인식을 사용하기 위해 마이크에 접근해야 합니다. NSMicrophoneUsageDescription 앱에서 마이크를 사용하여 음성 인식을 처리합니다. NSSpeechRecognitionUsageDescription 앱에서 마이크를 사용하여 음성 인식을 처리합니다. 그리고 import 및 전역셋팅 해주겠습니다. import Speech import AVFoundation private let speechRecognizer = SFSpeechRecognizer(locale: Locale.init(identifier: "ko-KR")) private var recognitionRequest: SFSpeechAu.. 공감수 0 댓글수 0 2023. 3. 29.
  • Swift에서 구글 STT 이용해보기 Part - 4 (Finish) 이제 pod 추가부터 해보도록 하겠습니다. https://onedaycodeing.tistory.com/88 cocoapods(코코아) 설치 및 라이브러리 추가 및 설치가 끝난 후에 추가/ SnapKit IOS에서 외부 라이브러리를 사용할때 쓰이는 cocoapods를 사용해보도록 할게요. 터미널을 열어서 sudo gem install cocoapods 를 입력하여 cocoapods를 설치해줍니다. 패스워드를 입력하라고 나온다면 맥 로 onedaycodeing.tistory.com 코코아가 처음이신분은 해당 게시글을 참고해주시고 와주세요. Podfile에 pod ‘googleapis’, :path => ‘.’ 한줄 넣고 저장해주세요. 아직 pod install 하시면 안됩니다.. 해당 압축 안에있는 파일들.. 공감수 0 댓글수 2 2023. 3. 28.
  • Swift에서 구글 STT 이용해보기 Part - 3 Part - 2 게시글까지 무리없이 따라오셨다면 이제gcloud 명령어를 사용해볼겁니다. 우선 gcloud 명령어를 바로 터미널에 입력하시면 명령어가 없다는 에러 메세지를 만날 수 있습니다. https://cloud.google.com/sdk/docs/install?hl=ko gcloud CLI 설치 | Google Cloud gcloud CLI 설치 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에는 Google Cloud CLI 설치를 선택하고 유지하기 위한 안내가 포함되어 있습니다. Google Cl cloud.google.com 해당 홈페이지에서 본인꺼에 맞는 패키지를 다운받아주세요. 그다음에 터미널을 열어주세요. 해당 명령어를 차례대로 입력해주시면 됩니다.. 공감수 0 댓글수 0 2023. 3. 28.
  • Swift에서 구글 STT 이용해보기 Part - 2 https://console.cloud.google.com/ Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com 다시 이 화면으로 오시면 맨위에 검색하는 검색창이 있을겁니다. 검색창에 speech to text 를 치시면 이런식으로 나오는데 빨간 동그라미를 보고 클릭해주세요. 사용 버튼을 눌러주시면 됩니다. 그러면 이렇게 관리 항목이 보입니다. 그러면 그 다음 화면에서 왼쪽에 사용자 인증 정보라는 메뉴가 보입니다. 클릭해주세요. ㄱ ㅏ ㄱ 도 눌러주세요.. ㅗ o ㅗ 그러면 위에 사용자 인증 정보 만들기 메뉴가 보입니다 이거 눌러주세요. API키 를 선택하여 만들어주세요. 나온 API키는 메모장에 잘 보관해주세요 나중에 소스코드에서 사용 할 예정입.. 공감수 0 댓글수 0 2023. 3. 28.
  • Swift에서 구글 STT 이용해보기 Part - 1 우선 구글 콘솔 페이지에 들어가서 등록먼저 해주셔야해요! https://console.cloud.google.com/ Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com 구글 클라우드 콘솔페이지에서 구글아이디로 로그인 하신 후 프로젝트를 만들어주세요. 프로젝트 이름과 기타 셋팅을 하신 후 만들기를 눌러주세요. 원래 화면으로 돌아오시면 이런 화면이 보이는데 여기서 대시보드를 클릭해주세요. 대시보드에 들어가셔서 왼쪽에 보이는 많은 메뉴들중에 결제를 찾아주세요. 결제 계정이없다면 이런식으로 나올거에요. 만약 이미 결제계정을 등록하고 결제수단 신용카드까지 등록하셨다면 상관없이 생략하셔도되요! 결제 계정 연결을 눌러주세요. 조직 니즈를 선택하고 약관 체크하.. 공감수 0 댓글수 0 2023. 3. 28.
  • 안드로이드 targetSdk 33 onbackpressed deprecated onbackpressed가 33부터 deprecated 되었습니다.. 정말 귀찮게 하는 구글선생님 이군요. 리스너만들기 val backEvent = object : OnBackPressedCallback(true){ override fun handleOnBackPressed() { //뒤로가기 동작처리 finish() } } 리스너등록 this.onBackPressedDispatcher.addCallback(this, backEvent) 끗..! 공감수 0 댓글수 0 2023. 3. 14.
  • iOS 16이상부터 생긴 아이폰 개발자 모드 활성화 하기 설정 - 개인정보 보호 및 보안 - 맨 하단 까지 스크롤 개발자 모드 켬으로 바꾸기 폰 재부팅 이후에 하시면 활성화가 완료됩니다. 공감수 0 댓글수 0 2023. 3. 6.
  • C++ 타이머로 지연시간 주기 void timer(int s){ clock_t start = clock(); clock_t end = clock(); while(true){ end = clock(); if(double(end - start) / CLOCKS_PER_SEC == s){ break; } } } main에서 호출하여 인자값으로 초 단위로 넣어주면 지연시간이 생성된다. 공감수 0 댓글수 0 2023. 2. 1.
  • Mac에서 SSH 접속 시 Host key verification failed. ssh-keygen -R 접속 시도 IP 충돌해서 생기는 문제인듯 하다. 키를 초기화 시켜주면 말끔히 연결됩니다. 공감수 0 댓글수 0 2023. 2. 1.
  • Mac gcc --version Error invalid active developer path gcc --version 해당 명령어를 터미널에 했을때 M1부터는 에러가 나는건지 맥의 업데이트 영향인지 에러가 발생한다. xcode-select --install 해당 명령어를 터미널에서 실행시켜서 설치해주면 gcc 명령어를 사용 가능하다. 공감수 0 댓글수 0 2023. 1. 30.
  • 코틀린 HTML 태그 제거하기. fun removeTag(str: String?): String? { var str = str str = Normalizer.normalize(str, Normalizer.Form.NFKC) var mat: Matcher // script 처리 val script = Pattern.compile("]*>.*?", Pattern.DOTALL) mat = script.matcher(str) str = mat.replaceAll("") // style 처리 val style = Pattern.compile("", Pattern.DOTALL) mat = style.matcher(str) str = mat.replaceAll("") // tag 처리 val tag = Pattern.compile("])*>") m.. 공감수 0 댓글수 0 2023. 1. 3.
  • 코틀린 타이머 사용하기 및 타이머 종료 lateinit var mTimer : Timer 이렇게 우선 전역으로 만들어주세요. fun funTimer(){ //타이머 2초로 설정 ms단위 mTimer = timer(period = 2000){ runOnUiThread{ //ui변경 작업은 여기에서 } } } 이렇게 하시고 funTimer함수안에서 설정한 초 마다 실행한 작업을 작성해주시면 됩니다. timer에서 에러가 나시는분들께서는 kotlin.concurrent.timer 이런식으로 해보시는것도 추천합니다. 임포트가 안되면 간혹 그렇게 에러가 나는 경우가 있더라구요. 종료같은 경우는 mTimer.cancel() 해당 구문을 원하는 시점에서 사용해주시면 타이머가 종료됩니다. 공감수 1 댓글수 0 2023. 1. 3.
  • 안드로이드 내장메모리에 있는 텍스트파일 읽어오기 fun readTextFile(path: String?): String? { var line: String? = null // 한줄씩 읽기 var msg = "" val saveFile = File(path) // 저장 경로 try { val buf = BufferedReader(FileReader(saveFile)) while (true) { val line = buf.readLine() if(line == null) break msg += line + "\n" } buf.close() return msg } catch (e: java.lang.Exception) { e.printStackTrace() return "NOT FILE" } } 인자값으로 경로를 넣어주시면 리턴값으로 텍스트 파일의 텍스트를.. 공감수 0 댓글수 0 2022. 12. 30.
  • 안드로이드 13 미디어 권한 세부화 및 알림권한 안드로이드 13부터는 미디어(비디오,오디오,이미지)의 권한이 세부화 되고 알림허용을 하겠다는 권한이 추가됬습니다. val REQUEST_CODE = 0x0000001 fun onCheckPermission() { var permissions : Array permissions = arrayOf( Manifest.permission.READ_MEDIA_VIDEO, Manifest.permission.READ_MEDIA_AUDIO, Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.POST_NOTIFICATIONS ) ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE) } overrid.. 공감수 0 댓글수 0 2022. 12. 13.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.