분류 전체보기

Development/iOS

iOS 앱의 생명주기 (iOS app lifecycle)

생명주기 상태 iOS 12 이하에서의 앱 생명주기 내용을 정리하고자 한다. 먼저, iOS 앱의 생명주기에는 5가지 단계가 존재한다. Not Running, Inactive, Active, Background, Suspended Not Running 단어 그대로 현재 앱이 실행되어 있지 않은 상태이다. ( 메모리에 존재 X ) Inactive 앱이 실행은 되어 있지만, 특정한 상황에 의해 ( 멀티태스킹 윈도우로 이동, 전화가 오거나 알람이 실행 ) 실질적으로 사용자가 앱과 상호작용이 불가한 상태이다. Active 앱이 실행되어 현재 사용자의 이벤트를 받을 수 있는 상태이다. Background 홈 화면으로 진입하거나, 다른 앱을 실행하여 실질적으로 앱이 동작하지 않는 상태이다. 앱과 서버와의 데이터 동기화..

Development/iOS

RSA 암호화를 통한 전자서명 구현

증권사 프로젝트를 하면서 비대칭키 암호화 방식을 이용한 전자서명 메커니즘을 구현해야 하는 일이 생겼다. 대칭키 암호화만 쓰다가 비대칭키라.. 어떻게 이게 되는거지 싶었다. 사실 아직도 이해가 안가는 부분이 좀 많긴 한데, 이것저것 시도해보면서 구현은 성공해서 정리를 좀 하려고 한다. 나는 비대칭키 암호화 알고리즘으로 RSA 를 선택했다. 비대칭키 암호화 방식의 대표적인 방식 중 하나였기 때문에, 레퍼런스가 많을 것으로 생각하고 선정했다. 여하튼, 먼저 RSA 암호화에 사용할 공개 키와 개인 키를 생성해준다. var publicKey: SecKey? var privateKey: SecKey? let keyPairAttr: [NSString: Any] = [ kSecAttrKeyType: kSecAttrKe..

Development

비대칭 키의 개인 키와 공개 키는 어떻게 사용할까?

증권사 프로젝트를 하며 비대칭키 암호화를 사용해야 할 일이 생겼다. 구현을 해야 하는데 대칭키 암호화만 쓰다보니 비대칭키 암호화의 개념에 대해 뜬구름 잡듯이 알고 있어서 열심히 찾아봤다. 비대칭키 암호화는 키가 하나인 대칭키 암호화와는 다르게 개인 키, 공개 키가 한 쌍을 이루어 총 2개이다. 개인 키는 타인에게 노출되어서는 안되는 키이며, 그와는 반대로 공개 키는 타인에게 공개하는 키이다. 위 개념을 알고나서 나는 당연하게도 공개 키로 암호화를 하고, 복호화는 개인 키를 사용하겠구나라고 생각했다. 물론 이렇게 사용을 하기도 하지만 다른 방법이 하나 더 있었다. 위와는 반대로 개인 키로 암호화를 하고, 공개 키로 복호화를 하는 방법이다. 그럼 여기서 드는 의문점은, 암호화란게 보통 정보를 제 3자에게 노..

Development/iOS

iOS 16.4 이상에서 WKWebview 디버깅 안될 때

오늘 웹뷰 디버깅을 해봐야 할 일이 생겨서 Safari에서 보려는데 계속 "검사할 수 있는 응용프로그램 없음" 만 뜨고 웹뷰가 잡히지를 않는 것이었다.. 맥북 문제인지 빌드할 때 뭐가 잘못된 건지 싶어서 재부팅, 재빌드도 해봤지만 안되었다😓 찾아보니까 iOS 16.4부터 WKWebview에 웹뷰 디버깅 여부를 설정할 수 있는 프로퍼티가 추가되었다고 한다. 기본 값이 false라고 하니 따로 설정해주지 않았다면 iOS 16.4 이상부터는 안 되는 게 맞는 듯하다. if #available(iOS 16.4, *) { webView.isInspectable = true } 요로코롬 수정해 주면 다시 웹뷰 디버깅을 할 수 있다.

Development/Java

Java 에서 RSA 복호화 시 Decryption error

Android에서 RSA 암호화 후 암호화한 데이터를 서버로 보내서 복호화를 하려고 하는데 계속해서 오류가 났다,,, BadPaddingException: Decryption error 나 같은 경우에는 클라이언트에서 RSA 키 쌍 생성 후에 공개 키(Public Key)는 서버에 저장, 개인 키(Private Key) 는 암호화 후 클라이언트에 저장을 했다. 공개 키나 암호화 한 데이터를 전달할 때 인코딩하면서 문제가 생긴건가 싶어서 Android 와 서버에서의 값을 모두 비교해봤지만 전부 동일했고, 심지어 Android 에서 바로 복호화 했을 때는 정상적으로 복호화가 되었다...! [Android] public static String encrypt(String plainText, String st..

Development/Java

Java Base64 Decode 시 "illegal base64 character a"

RSA 암호화를 이용한 모바일 앱과의 인증절차 기능 개발 도중 Android 앱에서 넘긴 Base64 인코딩 문자열을 Java 에서 Base64.getDecoder().decode() 를 사용하여 디코딩하려는데 Exception 이 발생했다. java.lang.IllegalArgumentException: Illegal base64 character a 찾아보니까 Base64로 디코딩 하려는 문자열에 개행(줄 바꿈)이 되어 있어서 나는 오류라더라... String.replaceAll("\\r\\n|\\r|\\n","") replaceAll() 메서드를 이용해서 개행 특수 문자를 빈 값으로 변경해 주면 해결된다.

Development/iOS

iOS 파일 앱에서 앱 폴더가 보이지 않을 때

앱 내에서 다운로드 한 파일들은 기본적으로 앱 별도의 저장공간에 저장이 된다. 회사 내부에서 사용중이던 앱은 해당 앱의 저장공간을 파일 앱에서 조회할 수가 있었는데 고객사 앱 중, 파일 앱에서 저장공간을 조회할 수 없는 앱이 있었다. 예전에 이 문제와 관련해서 설정을 한 기억이 있었던 것 같은데,, 조금 헤매서 글로 남긴다. 1) 앱의 info.plist 파일에 키 값을 설정한다. Application supports iTunes file sharing Supports opening documents in place 위의 두 값을 info.plist 파일에 YES로 설정해준다. 나 같은 경우엔 Supports opening documents in place 이 값을 빠져있어서 조회가 안됐다. 보통은 저 ..

Development/iOS

iOS MDM 인증서 발급 및 프로파일 생성 (1)

허허.. 회사에서 iOS MDM 개발을 하라는 업무를 줘서 난데없이 MDM을 개발하게 되었다... (이땐 MDM이 뭔지도 몰랐다) MDM이란?? Mobile Device Management 의 약자로, 쉽게 말해서 그냥 기기 관리 시스템?? 이라고 생각하면 된다. MDM 개발하라는데... 진짜 정보가 없어서 눈물나는 와중에 그나마 찾아낸 정보들로 어렵게 개발을 하긴 했다..ㅋㅋㅋ 이 글을 작성하는 목적은 사람은 망각의 동물이라 하지 않던가... 나중에 내가 잊을 확률이 99.9% 이기 때문에 작성하기도 하고, 보편적으로 MDM 개발을 하는 경우는 드물지만, 나처럼 MDM 정보가 필요한 소수의(?) 사람들을 위해 작성한다. 아래는 내가 MDM 개발을 하며 참고했던 사이트들이다. 현재 작성중인 글을 읽고도 ..

따봉냥이
'분류 전체보기' 카테고리의 글 목록