2월, 2018의 게시물 표시

CryptoSwift 사용하여 암호화 및 복호화 하는 방법

일단 관련 모듈을 사용할 수 있는 환경을 만들자 cocoapods 를 이용하여 설치한다. 해당 프로젝트 터미널에서 $ pod init Pod 파일이 생성된다. pod 'CryptoSwift' 추가한 다음 파일을 저장하고 터미널로 나온 다음에 다음 명령으로 설치를 하자 $ pod install 그럼 해당 프로젝트 폴더에 확장자 .xcworkspace 가 생길 것이다. 이걸 클릭하여 프로젝트를 Xcode 에서 연다. 이제 프레임워크를 열 수 있다. import CryptoSwift 상단에 추가하면 이제 암호화 및 복호화를 할 수 있다. 암호와 복호화에 사용되는 키와 벡터가 있는데 이건 꼭 맞아야 하고 256비트로 하려면 32자 이어야 하고 128비트로 하려면 16자로 정해야 한다. 암호화 방법 do {   let aes = try AES(key: DEFINE_KEY, iv: DEFINE_IV)   let chiperText = try aes.encrypt("암호화할 문자열".bytes).toBase64() } catch { print(error) } 복호화 방법 do {   let aes = try AES(key: DEFINE_KEY, iv: DEFINE_IV)   let e64_data = Data(base64Encoded: chiperText) ?? Data()   let decryptData = try aes.decrypt(e64_data.bytes)   let decryptText = String(bytes: decryptData, encoding: .utf8) } catch { print(error) } 문자열을 찍어보니 암/복호화 잘 된다.

음악 플레이 하는 도중에 앱을 실행하면 중단되지 않도록 하는 방법 조치기

음악이나 라디오 또는 팟캐스트를 들으면서 교대근무 같은 앱을 실행하면 음악이 중단이 된다. 예전에는 아래 코드를 AppDelegate에 넣으면 중단되지 않고 내 앱에서 버튼 효과음까지 같이 실행되었었다. do {     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)     try AVAudioSession.sharedInstance().setActive(true) } catch { print(error.localizedDescription) } 하지만 앱을 실행하면 중단이 될 뿐이었다. 각종 검색을 해보아도 위와 같은 코드만 나올 뿐이지 답은 없어 보였다. 이 때문에 xcode 도 제거하고 다시 설치 해보았다. 백그라운드 모드를 on 안 시켜서 그렇나? 역시나 마찬가지였다. 혹시나 하여 최근에 만들었던 다른 앱으로 구동해보았다. 음악이 중단되지 않고 버튼 효과음이 나올때 중단되는 것이다. 한줄기 희망을 보았다. 위의 코드를 메인뷰컨트롤러에 넣어 보았다. 역시나 중단이 된다. 혹시나 실행될때 위 코드로 실행을 했더니 중단이 되지 않는다. 각각의 효과음을 위 코드 블럭으로 싸고 실행하였다. 결과는 대성공이다. ㅋㅋㅋ guard let url = Bundle.main.url(forResource: "touch", withExtension: "mp3") else { return } do {     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)     try AVAudioSession.sharedInstance().setActive(true)     let touchPlayer = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp

Android Studio & Git

안드로이드 스튜디오는 깃과 연동이 된다. 하지만 설정을 잘못하면 엄청 꼬인다. 기존 설정을 날리는 방법을 안드로이드 스튜디오에 없는거 같다. .git 과 .gitignore 파일을 삭제하면 된다. 나의 경우는 전달 받은 소스에 깃 파일이 상위 루트 디렉토리에 하나 있고 하위 app 폴더에 하나 또 있어서 두개의 깃이 나온 상태 였다. 터미널에서 모두 삭제한 다음 다시 소스를 열었더니 초기화 되었다. 이제 VCS Enable을 하니까 상위 폴더에만 .git 파일이 생겼다. 이제 정상이 된거 같다.

안드로이드 스튜디어 윈도에서 작성한 소스 맥에서 사용하기

안드로이드 소스를 받았다. 윈도에서 작성한 소스였다. 이를 폴더로 인포트 시켰더니 오류를 많이 토해낸다. 직감적으로 뭔가 설정이 꼬인 거 같다는 생각이 들었다. 이럴땐 기존 설정을 날리고 다시 잡는게 최적의 방법이라는 걸 오랜 경험을 통해서 어렴풋이 알고 있었다. 기존 설정을 날리는 방법은 무엇이 있을까? 생각보다 간단한 방법이 있었다. 안드로이드 스튜디오 메뉴창에서 build - clean project 를 해주면 된다. 괜히 힘 빼지 말고 다른 운영체제에서 작성된 소스는 이것부터 하자.

구형 엘지폰에서만 오류나는 현상 조치

신형 단말기와 구형 단말기에 앱이 구동되고 있는 상황이다. 모두 엘지폰이다. 하지만 같은 소스에 로직을 수정했는데 신형 단말기는 잘되는데 구형 단말기에서 오류가 난다. 오류 수정을 위해 그동안 삽질은 스튜디오 버전을 낮춰보기도 하고  NDK 버전도 낮춰 보기도 했다. 하지만 모든게 똑 같았으며 같은 소스에 버전체크를 하면서 바이패스 코드를 넣기도 했다. 하지만 그부분만 넘어가면 또 다른 오류를 토해 냈다. 보안 때문에 MDM 및 SSL-VPN, VGuard 등에서 오류를 토해내었다. 해당 모듈의 회사는 그 이전 버전도 지원하다고 하였다. 구형 엘지폰의 API 버전은 19 였다. 문제의 해결방안이 더이상 없을 정도로 모든 경우의 수를 다 시도했으며 우리의 희망은 꺼져 가는 듯 했다. 나에게 이런 시련이 왜 닥치는걸까? 하며 원망도 했다. 하지만 회사 사무실에서는 더이상 시도할 방법이 나오질 않았다. 토요일 새벽 4시에 잠에서 깨었다. 기존에 잘되던 소스와 안되는 소스를 비교하기 시작했다. com.android.support:multidex:1.0.0 이 추가 되었다는 걸 발견했다. 이문제는 보통 MultiDex 일명 64K 참조 문제라고 한다. 안드로이드 앱 파일(APK)에는 DEK(Dalvik Executable) 파일 형식의 실행가능한 바이트 코드가 포함이 되는데 이 파일이 단일 파일내에서 참조될 수 있는 메소드의 총 개수를 65,535개로 제한되어 나타나는 문제이다. 안드로이드 5.0(API 레벨 21) 미만에서는 multidex 지원 라이브러리로 사용하며 이상에서는 여러개 파일의 DEK 파일을 로드 하는 것을 지원한다. 1. build.gradle(Module: app) android { defaultConfig { multiDexEnabled true <- 추가, API 21 이상일 경우 이것만 추가하면 됨, 하지만 이하일 경우 3번 수정해야 함 } dexOptions { javaM