앱을 오랫만에 단말에 담다보니 단말에 설치된 앱의 인증서와 작업중인 xcode에 적용한 인증서가 달라서 그런지 아래의 팝업이 뜨면서 실행이 되지 않는다.



App installation failed


This application's application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed. 



증상 해결을 위해서 단말에 설치되어 있던 앱을 삭제하고 다시 담아보니 정상적으로 설치가 된다.


안드로이드 API 23+ 이상은 매니페스트에서 퍼미션 설정을 해도 해당 기능을 그대로 사용할 수 없다.


따라서 런타임 시 동적으로 권한을 허용하는 형태로 사용자에게 퍼미션 허용 여부를 확인 받아야 한다.


아래의 내용을 참고해서 데모를 하나 만들어보니 잘 작동한다. 흠...


참고

 - https://developer.android.com/training/permissions/requesting.html

 - http://stackoverflow.com/questions/8854359/exception-open-failed-eacces-permission-denied-on-android


Xcode 로그가 잘찍히기는 하지만 가끔 구분이 어려울 때가 있어서 로그가 좀 구분되게 찍히는 방법을 찾아봤다.


뭔가 애드온이라도 붙여서 로그 레벨별로 찍어주는 게 있을까 싶었는데, 찾을 수가 없었는데...emoji를 넣어서 구분하는 방법을 써보니 꽤 유용하다.



NSLog(@"😃 SUCCESS");

NSLog(@"😡 FAILURE");


요렇게 해놓으니 눈에 잘 들어온다. 


ㅋㅋㅋ 아이 좋앙~



맥에서 이모지 입력하는 단축키이다. 


1) 매버릭 이상:  ctrl + command + space

2) 마운틴 라이언 이하: option + command + T


사파리에서 PDF 링크가 있는 경우 바로 다운로드가 안되고 바로 파일을 브라우저에서 여는 경우가 많다.


가끔 골치아팠는데, 해결책이 여기 있네.


http://apple.stackexchange.com/questions/57039/how-make-safari-download-pdf-files-instead-of-opening-them-in-page



바로 다운로드 받게 하고 싶을 때

defaults write com.apple.Safari WebKitOmitPDFSupport -bool YES


다운로드 후 실행되지 않도록 하고 싶을 때

defaults write com.apple.Safari AutoOpenSafeDownloads -bool NO


다시 되돌리고 싶을 때는 옵션을 다시 변경한 뒤 사파리를 재실행하면 된다.



맥에서 이슈는 엘 캐피탄까지 된다는 이야기가 있다. 시에라에는 적용이 안되는 듯...



소규모 프로젝트 관리를 위해서 GitHub의 이슈트래커 등을 사용해도 될 듯하기는 하다.


잘 만 사용하고, 소통하면 되지 싶지만 한 번 프로젝트 관리하는 툴, 사이트를 검색해봤다.



JIRA - https://www.atlassian.com/software/jira

Trello - https://trello.com

Pivotal Tracker - http://pivotaltracker.com/

Asana - https://asana.com/

YouTrack - https://www.jetbrains.com/youtrack/

StackField - https://www.stackfield.com


JIRA 10인 이하 10불, YouTrack은 10인 이하 무료, Asana는 15인 이하 무료 등등 대부분 무료 차지 플랜을 제공하므로 5~10인 미만의 프로젝트에서는 사용하기 쉽고 관리가 편리한 곳을 선택하면 될 듯 싶다.


JIRA는 막연하게 복잡하고 비싸다고만 생각했는데, 소규모로 사용할 경우에는 비용이 크지 않아서 다소 의외였다.


그런데, 무료 플랜은 private 지원하지 않는 경우도 있으니 확인해봐야 할 듯. 


설치형

Redmine - http://www.redmine.org

Phacility - https://www.phacility.com



네이버에서 요비(Yobi)라고 오픈 소스 프로젝트로 협업 프로그램을 만들었는데, 검색해보니 개인 프로젝트로 이동해서 요나(Yona)로 변경이 되었다고 한다.


홈페이지가 마음에 든다. 딱 21세기형...내 스타일이야. ㅋㅋㅋ


요나(Yona)

홈 - http://yona.io

데모 - https://repo.yona.io

깃헙 - https://github.com/yona-projects/yona



----------------


< 2017.02.08 업데이트 >


레드마인을 로컬에 설치해서 테스트를 해보고 있다.


  • 국내 커뮤니티 - http://www.redmine.or.kr/projects/community
  • 플러그인 - http://www.redmine.org/plugins?page=1



서버 하나 만들면서 테스트해보고 싶은데, 일반적인 저가 호스팅은 짜여진 환경만 제공이 되어서 디지털오션이나 AWS에서 제공하는 것 같은 VPS(Virtual Private Server) 서비스를 검색해보기로 했다. 


https://www.digitalocean.com

https://amazonlightsail.com



일단 둘 다 월 5불에 제공하는 서비스가 나쁘지 않지만 좀 더 싼 곳(?)이 있나 알아봤는데, 뭐 사양을 좀 낮추면 월 1.5불짜리도 있긴 하다.


사실 고정 IP 주고, DNS 설정이 가능하도록 제공되는 기가 트래픽 서비스가 월 육천원이면 비싼 건 아닌데, 사람 욕심이 참 그렇다. (점심 한끼도 안되는 돈인데 말이지...)


저가 업체 비교를 해보니 비슷한 사양에 3불 대(512메모리에 1TB 트래픽)까지는 있어 보인다.


흠...그런데 안정성이나 속도도 중요하니, 처음 들어본 업체를 선뜻 선택하기도 애매하다.



기타 다른 사이트 발견한 곳. 약간씩 조건이 다르긴 한데...가격은 대충 5~10불 정도에 쓸만한 VPS 서비스를 제공한다는 점.


국내

퍼니오 - http://fun25.co.kr/vpsserver/


일본

코노하 - https://www.conoha.jp/ko/

vultr - https://www.vultr.com

카고야 - https://www.kagoya.jp/cloud/vps/

에이블넷 - http://www.ablenet.jp/index.html


퍼니오는 1년 가격 기준으로 보면 하드웨어는 짱짱한데, 사설IP에 월 트래픽이 300GB 정도라는 점이 좀 걸린다. (뭐 테스트라서 트래픽 이슈도 없을 테지만)


코노하의 900엔은 초저가를 지향하는 내게 좀 초과 예산이긴한데 일단 트래픽 무제한에 가격 테이블은 깔끔하다.


카고야는 좀 느리다는 느낌이 있는데...오늘 접속도 안됌. 흠...


에이블넷은 트래픽 무제한에 월 458엔이면 좋기는 한데, 초기 설치비 있네. (연 단위 결재 기준으로 948엔짜리는 초기설치비 무료 이벤트하네)



크흠...이번 주에 좀 더 알아보고 선택해야징.


====================================================================================================


2017.01.12 수정


음...디지털오션의 서비스를 이용하기로 했다.


5불을 넣고 테스트를 해보니...일단 사용하는 서비스를 일단위로 사용 서비스와 시간을 측정해서 가격을 감해나가는 방식으로 과금이 이뤄진다.


월정액의 개념으로 매월 빠져나가는 방식이 아니고, 한 번 입금하고 일별로 차감하는 방식이다.

(남은 금액이 얼마일 때 알림을 설정해놓으면 알림을 준다.)


실제 Droplet 생성 후 가동 시간을 기준으로 하기 때문에 테스트할 때만 켜고 삭제하는 형태로 이용해도 된다.


생각보다 테스트용으로는 저렴하고 안정적으로 테스트 환경을 구축해서 이용할 수 있을 것으로 보인다.




기존에 안드로이드로 개발하고 왔던 프로젝트에서 서비스 런칭 일자가 다가와 iOS도 개발이 필요하다는 연락이 왔다.


그 프로젝트 룸에서 작업을 하기위한 로컬 환경을 만드려면 윈도우를 VMWare에서 패러렐즈로 이사해야한다.


용량을 확인해 봤다. 남은 용량 38.9기가 바이트...흠. 21기가 이상의 빈 공간이 더 필요하다.


중복 파일들을 검색해서 삭제한 뒤, 100MB이상의 큰 용량부터 sorting 해서 파일을 하나씩 보면서 삭제 해나가기 시작했다.


휴지통을 비우고, 폴더를 정리하고 났더니 용량이 48기가가 좀 넘게 남았다. 아직 12기가.


아이튠즈의 동기화 백업되어 있던 디바이스 이미지 목록을 모두 날렸다. 10기가만 더 확보하면 된다.


안드로이드의 이미지들을 몇 개 비우고, iOS 시뮬레이터를 모두 초기화 한 뒤에 확보한 용량을 다시 본다. 이제 57.8기가.


XCode의 Derived 폴더를 싹다 비워버렸다. 육십쩜오기가.


'됐다.'


시간을 보니 11시 26분을 가리키고 있길래 자리에서 일어났다.




11시 30분 예약에 맞춰서 치과로 갔다.


"이런 나이에 이렇게 이가 상한 사람은 드물어요."


치과 의사는 그제 받았던 스케일링의 연장선으로 오늘 잇몸 치료를 겸사한다면서 다시 그 매서운 소릴 내는 녀석을 내 입 안으로 넣어 미친듯이 치석을 긁어내면서 이야기했다.


이 사이나 잇몸 사이로 그 녀석이 들어올 때마다 따끔하고 연마를 위해선 지 호스로 뿌려대는 물이 계속 들어오는데다가 입을 벌리고 있어서 그런지 '꿀떡 꿀떡' 소리를 내면서 침을 겨우 삼켰다.


이 의사는 늘 내가 입을 벌리고 있는 순간에만 이야기를 했다. 회전하고 있는 송곳 같은 기계를 들고 입을 벌리게 한 채로 이야기를 하면 누구나 겁을 먹을 수 밖에 없는데 말이지.


아무튼, 앞니를 제외하고 나머지 충치는 다시 파견 나가기 전까지 치료를 하기로 했다.


"방금 치료하셨으니까 점심 식사는 한 30분 정도 뒤에 하세요."


다음 예약 날짜와 시간을 확인한 뒤 계산을 하고 나올 때 데스크의 아가씨가 이야기 한다.


"네, 그럴께요. 고맙습니다."



점심 시간이라 다들 밖으로 나간 참이어서 혼자 자리에 앉았다.


이제 VM을 패러랠즈로 이사 시킬 참이다.


VMWare의 툴을 제거하고 종료 시킨 뒤 패러랠즈를 실행해서 Converting을 시작한다. 기본 설정이 완료된 뒤에 이번에는 패러랠즈의 툴을 설치한 뒤 재부팅하여 이사를 완료했다.


이번에는 3기가 정도 메모리를 할당해본다.


자아, 이제 프로젝트에 바로 들고갈 만큼 준비가 되었다.




https://developer.android.com/guide/practices/screens_support.html#support

https://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts



하나의 앱으로 핸드폰과 태블릿 양 쪽에서 모두 사용하고 싶어하는 사람들이 많다.


여기서 설계의 문제가 발생한다.


하나의 앱에 양쪽에서 최적화한 화면을 구성하려면 리소스를 다르게해서 구현해야 하는 경우가 있는데, 이럴 경우에는 하나를 지원하는 앱보다 더 많은 리소스가 포함되게 된다.


아이콘이나 인트로 화면 하나 정도야 상관이 없지만 네이티브로 화면의 양이 상당한 경우 그 리소스도 사용자에게 데이터 부담이 된다.

(요즘 네트워크 빠르고 무제한 요금제 사용하거나 와이파이로 받으면 뭐 문제가 되나? 하면 할 말은 없지만 아무튼 앱 사이즈를 줄이는 것도 중요한 부분 중 하나이다)


그냥 폰의 화면을 늘려서 사용하면 되지 않냐는 사람도 있기는 한데, 그렇게 사용해도 문제는 없을 수 있다.


하지만 폰과 태블릿이 가지는 몇 인치의 차이가 물리적인 화면 영역으로 인해서 사용성이 다르기 때문에 실제로 보여주면 당황하는 사람들이 나오기도 한다.



이런 부분에서 서로 의견은 분분한데, 타겟에 맞게 앱을 따로 패키지를 생성하고 배포하여 리소스를 타겟에 최적화한(폰과 태블릿의 분리) 형태로 제공하는 것이 좋다고 생각하는 사람과 하나의 앱으로 배포하고 관리하여 운영상의 이점을 가지지 않느냐고 생각하는 사람이 있다. 


듣기에는 양쪽다 이유가 서로 수긍할만하고 맞는 말로 들린다.


뭐...원하는 대로 만들어주기야 할 텐데, 이건 의사 결정 또는 설계의 문제라고.



폰/태블릿 구분 방법

http://stackoverflow.com/questions/9279111/determine-if-the-device-is-a-smartphone-or-tablet



간단하게 웹뷰의 속도를 개선하는 방식이 hardwareAccelerated=true 를 명시적으로 설정하는 것 정도 였는데, 지금은 딱히 설정안해도 기본 적용되고 있는 것으로 알고 있는데 그래도...느린 사이트들이 있다.


앱에서 좀 개선할 방법이 없을까 찾아보긴 했는데...



http://stackoverflow.com/questions/32304237/android-webview-loading-data-performance-very-slow

http://stackoverflow.com/questions/3652583/enhance-webview-performance-should-be-the-same-performance-as-native-web-browse

http://stackoverflow.com/questions/7422427/android-webview-slow



*. 웹 사이트 성능 및 속도 체크

 - http://www.webpagetest.org



글을 찾아서 읽어보면 볼 수록 결론은 기본적으로 웹을 빠르게 만들어야 한다. 


모바일 메인 페이지가 3~5메가 이상은 첫 로딩 시에 느릴 수 밖에 없다...


http://www.htmlgoodies.com/beyond/reference/7-tips-to-make-your-websites-load-faster.html

https://www.smashingmagazine.com/2013/04/build-fast-loading-mobile-website/

http://learntocodewith.me/posts/make-your-website-fast/

http://www.speedawarenessmonth.com/15-things-for-making-your-site-faster-for-mobile-users/



공인인증서의 개인키를 읽어보려고 했는데, 생각처럼 되지 않았다.

(Seed 방식의 블록 암호화인데...openssl 명령어로는 그냥 읽을 수가 없어서...흠)



우선 PEAR 설치 후 phpseclib를 다운받아서 실행해보았다.


1) PEAR 설치 - https://jason.pureconcepts.net/2012/10/install-pear-pecl-mac-os-x/

2) phpseclib - http://phpseclib.sourceforge.net


로컬 서버에 설정을 해서 실행해보니 생각처럼 값을 손쉽게 읽어오지는 못했다.


아마도 공인인증서의 키 암호화 방식이 일반적인 방식과는 다르게 구현이 된 것으로 보인다.



아무튼, 조금 찾아보다보니 Bouncy Castle Crypto APIs(http://www.bouncycastle.org/)라는 것이 있다는 것을 알게 되었다.


1) 설치방법 - http://www.bouncycastle.org/wiki/display/JA1/Provider+Installation

2) maven repository

 - http://repo2.maven.org/maven2/org/bouncycastle/bcpkix-jdk15on/

https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on/1.55  (실제 나중에 적용은 1.52로 변경하였다.)



파일을 다운로드 후 jar 파일들을 다음의 폴더로 옮겨주었다.


다음은 내 맥의 설정에 따른다.


/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre/lib/ext


파일을 모두 옮긴 뒤에 java.security 에 선언되어 있는 security 패키지를 Bouncy Castle Crypto로 변경해준다.


/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre/lib/security

내에 있는 java.security 파일에서 다음의 항목을 수정


security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider



근데, 다음과 같이 에러가 뜬다...훔


Exception in thread "main" java.lang.SecurityException: JCE cannot authenticate the provider BC

at javax.crypto.Cipher.getInstance(Cipher.java:642)

at CertificateTest.getPrivateKey(CertificateTest.java:129)

at CertificateTest.main(CertificateTest.java:31)

Caused by: java.util.jar.JarException: file:/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre/lib/ext/bcprov-jdk15on-155.jar has unsigned entries - org/bouncycastle/LICENSE.class

at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:462)

at javax.crypto.JarVerifier.verifyJars(JarVerifier.java:322)

at javax.crypto.JarVerifier.verify(JarVerifier.java:250)

at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:161)

at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:187)

at javax.crypto.Cipher.getInstance(Cipher.java:638)

... 2 more


아래 내용으로 해봤는데, 잘 안된다...함 더 알아봐야 할 듯.

http://stackoverflow.com/questions/16469567/securityexception-with-bouncy-castle


이슈를 해결해기 위해서 해본 작업들이다.

1) 로컬 프로젝트의 libs 폴더 생성 후 프로젝트에 추가

2) jre의 ext 폴더에 담은 후 java.security의 수정

3) 2번의 작업 후 build path에서 jre 삭제 후 다시 add library를 선택하여 다시 system jre를 추가



찾아 헤매다가 결국은 해결을 했는데, 155 버전이 아닌 152 버전으로 변경 후 인증 관련 이슈가 모두 사라졌다.


으앙~


+ Recent posts