웨이브 테이블을 그려보고 싶어졌다.


음성 번역을 위해서 사용자의 음성 입력 시 입력된 음성에 따라서 웨이브 테이블 파동을 화면에 뿌려주는 기능.


입력된 음성의 크기에 따라서 다르게 파형의 크기를 조절하는 커스텀이 필요할 듯.


대충 검색해봤는데, 좀 더 자세하게 자료를 정리해봐야 할 것 같다.



출처 - http://stackoverflow.com/questions/5032775/drawing-waveform-with-avassetreader

음성 입력을 받아서 다른 언어의 음성으로 번역해주는 방법이 있는 지 찾아보았다.


러프하지만 되기는 할 듯...데모 한 번 만들어 봐야 겠다.


 - 네이버 기계번역은 SMT방식이고, 파파고는 NMT방식

 - 번역 프로세스: 음성입력 > 텍스트변환 > 번역 > 텍스트 입력 > 음성변환

 - 주요 메뉴

  1) 말하기: 사용자 음성 입력

   2-1) 원문: 입력된 텍스트

   2-2) 번역: 번역된 텍스트

  3) 들려주기: 번역된 텍스트를 음성 출력


음성인식 API(CLOVA): https://developers.naver.com/docs/labs/vrecog/

기계어번역 API: https://developers.naver.com/docs/labs/translator/

음성합성 API: https://developers.naver.com/docs/labs/tts/

App Transport Security 설정 부분이 추가되어서 보통 간단하게 Allow Arbitrary Loads 만 허용(YES) 형태로 사용하기도 하는데, 실제 보안을 위해서 허용하는 목록을 추가하려고 할 경우에는 도메인을 입력해야 한다.


테스트 서버의 경우 별도의 도메인이 없이 고정 IP로 되어 있어서 예외 목록에 넣어보았더니 적용이 안됀다.


일단 예외목록에는 도메인만 된다고 한다.


흠...


출처 - http://stackoverflow.com/questions/30903923/app-transport-security-and-ip-addresses-in-ios9


UITextField의 입력된 텍스트의 복사 및 붙여넣기를 막기 위해서 찾아본 글.


문제는 실제 클립보드 기능을 막는 효과가 있지만 키보드에서 단축키를 지원하면 복사 및 붙여넣기가 다시 가능해진다.


키보드에 해당 단축키 표시 부분을 막는 작업과 함께 해주어야 한다.


iOS 7이전과 이후 적용에 대하여 잘 설명되어 있다.



출처 - http://stackoverflow.com/questions/15745824/uitextfield-how-to-disable-the-paste/15746164#15746164



- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {

    

    BOOL isDisableCopyAndPaste;

    

    if ([[UIDevice currentDevice].systemVersion floatValue] < 7.0) { // iOS 6 이전

        if (action == @selector(paste:))

            return NO;

        if (action == @selector(select:))

            return NO;

        if (action == @selector(selectAll:))

            return NO;

        isDisableCopyAndPaste = [super canPerformAction:action withSender:sender];

    }

    else {    // iOS 7 이후

        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

            [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO];

        }];

        isDisableCopyAndPaste = [super canPerformAction:action withSender:sender];

    }

    return isDisableCopyAndPaste;

} 


키보드 상단에 한 줄로 단축키 아이콘이 있는 부분이 있는데, 이게 텍스트 입력을 막아도 클립보드 붙여넣기 버튼을 눌러버리면 입력이 되어 버린다.


관련해서 해당 부분을 없애려고 찾아보니 이런 방법이 있다. 검색 바를 클릭하여 키보드가 나타날 때에도 유효하다고 한다.


출처: https://forums.developer.apple.com/thread/4664



  1. - (void)textFieldDidBeginEditing:(UITextField*)textField  
  2. {  
  3.     UITextInputAssistantItem* item = [textField inputAssistantItem];  
  4.     item.leadingBarButtonGroups = @[];  
  5.     item.trailingBarButtonGroups = @[];  
  6. }  


앱을 오랫만에 단말에 담다보니 단말에 설치된 앱의 인증서와 작업중인 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. 



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



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


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



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




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

(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 버전으로 변경 후 인증 관련 이슈가 모두 사라졌다.


으앙~



XCODE에서 프로젝트를 하나 생성해서 작업하는데, 다음과 같은 로그가 콘솔에 계속 찍힌다.


nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available


흠...이 것 말고도 로그가 좀 찍히기는 하는데, 아무튼 실행에는 문제가 없지만 거슬린다.



빌드 설정에서 다음과 같이 체크를 해준다. (Xcode 8.1에서 해결되었다고 하지만 실제로 해결되지 않았다. 증상이 반복됨)


>> http://stackoverflow.com/questions/37800790/hide-strange-unwanted-xcode-8-logs/39461256#39461256



일단 위와 같이 스킴 설정 화면에서 OS_ACTIVITY_MODE를 disable 로 체크해주니 사라졌다.

 

+ Recent posts