Programming/iOS2016.02.12 11:30

XCode, AppCode 등에서 iOS 앱 개발을 하다가 새로운 오류를 경험했습니다.

시뮬레이터에서 잘 되는데 실제 디바이스에서는 실행이 되지 않고 다음과 같은 오류가 발생했습니다.

AppCode

failed installing application, reason: Error Domain=JBDeviceKitErrprDomain Code=-402620392 "AMDeviceSecureUpgradeApplication failed with err = -402620392(The identity used to sign the executable is no longer valid.)" UserInfo={NSLocalizedDescription=AMDeviceSecureUpgradeApplication failed with err = -402620392(The identity used to sign the executable is no longer valid.)}. Reason: AMDeviceSecureUpgradeApplication failed with err = -402620392(The identity used to sign the executable is no longer valid.)


Xcode

The identity used to sign the executable is no longer valid.
Please verify that your device's clock is properly set, and that your signing certificate is not expired. (0xE8008018).


Device의 시간은 자동설정으로 되어 있었고 현재 시간을 표시하고 있었습니다.

Derived Data를 삭제하고 clean build 를 해봐도 같은 오류만 나올 뿐입니다.

실행 중에 발생한 오류라 인증서 문제를 생각해 볼 수 있는데요. '키체인 접근' 앱에서 확인해 보니 1년뒤 만료였습니다.

그럼 왜 안될까요....


'키체인 접근' 에서 인증서를 자세히 보니 만료된 인증서가 몇개 있었습니다. 같은 Developer의 인증서인데 만료된것과 유효한 것이 같이 있었죠.

만료된 것을 모두 지웠습니다. 그리고 XCode에서 실행하니 인증서 문제가 있다고 fix it 이 떴습니다.

fix 한 후에 실행해 보니 정상 실행됩니다~!


디바이스 실행이 안되는 오류가 있을 때에는 항상 인증서를 확인하자~!

만료된 인증서는 지워버리자~!

Posted by 초보 프로그래머
Programming/Android2015.12.23 23:27

callback lambda 를 function의 parameter로 넘겨서 사용하려고 합니다.

lambda의 정의는 간단하죠.


함수 정의

fun saveFile(value: Int, callback: (value: Int) -> Void) {

}


함수 사용

functionName(10, { value -> 

})


이렇게 하면 당연히 될줄 알았습니다. 대부분의 언어에서 return 값이 없으면 void 또는 빈값을 해서요...


https://kotlinlang.org/docs/reference/functions.html#unit-returning-functions

return 값이 없을 때는 Unit type 으로 return type 을 지정해야 한다고 되어 있습니다.


함수 정의

fun saveFile(value: Int, callback: (value: Int) -> Unit) {

}


이제 문제 없이 잘 build 됩니다.

Kotlin 에서는 void return 이 아니라 Unit return 해야 합니다.


Posted by 초보 프로그래머
Programming/Android2015.12.23 11:27

최근에 안드로이드 프로젝트를 새로 시작했습니다.

혼자하고 작은 프로젝트라서 Kotlin으로 하고 있습니다. (유지보수는 누가하지...)

Swift와 비슷해서 시작했는데 다른 부분이 더 많네요.

여러 부분에서 막히고 문서 보고를 반복하다가 방금 찾아 본 것을 남겨봅니다.


Android 에서 새로운 Activity를 실행하려고 할때 Activity 의 class type을 넣어줘야 하는데요.

Java

Intent intent = new Intent(this, MainActivity.Class);


Kotlin

val intent = Intent(this, javaClass())


위 방법은 현재 deprecated 입니다. 

현재 버전에서는 다음과 같이 사용해야 합니다.


Kotlin

val intent = Intent(this, MainActivity:class.java)


https://kotlinlang.org/docs/reference/java-interop.html#getclass

Posted by 초보 프로그래머
Programming/iOS2015.10.06 16:54



Action Extension Target을 추가하여 이전까지 문제 없이 사용하고 있었다.

오늘 업로드를 하는 과정에서 다음과 같은 오류가 발생하면서 더 진행이 되지 않는다......

검색과 삽질 끝에 해결은 했다.

Extension 자체는 Framework를 copy하지 않기 때문에 App이 가지고 있는 Framework를 사용해야 한다고 한다.

cocoapods로 Extension Target에 framework를 추가했었는데 이 부분이 문제였다.

이전 까지 문제 없다가 iOS9 출시 후 부터가 문제가 되기 시작했다.

Extension Target에서 cocoapods의 흔적을 다 지우고 다음 링크에 있는 방법대로 하면 된다.

https://hanseihee.wordpress.com/2015/01/14/xcode-cocoapods-with-today-extension/

Posted by 초보 프로그래머
Programming/iOS2015.08.28 01:31

cocoapods 0.38.2 로 업데이트 후에 pod 명령어만 실행하면 아래와 같은 오류가 발생한다.


Chopeui-MacBook-Pro:iOS-classic Chope$ pod --version

---------------------------------------------
Error loading the plugin with path `/Library/Ruby/Gems/2.0.0/gems/cocoapods-stats-0.6.0/lib/cocoapods_plugin.rb`.

LoadError - cannot load such file -- /Library/Ruby/Gems/2.0.0/gems/cocoapods-stats-0.6.0/lib/cocoapods_plugin.rb
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:126:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:126:in `require'
/Library/Ruby/Gems/2.0.0/gems/claide-0.9.1/lib/claide/command/plugin_manager.rb:106:in `safe_require'
/Library/Ruby/Gems/2.0.0/gems/claide-0.9.1/lib/claide/command/plugin_manager.rb:32:in `block in load_plugins'
/Library/Ruby/Gems/2.0.0/gems/claide-0.9.1/lib/claide/command/plugin_manager.rb:31:in `each'
/Library/Ruby/Gems/2.0.0/gems/claide-0.9.1/lib/claide/command/plugin_manager.rb:31:in `load_plugins'
/Library/Ruby/Gems/2.0.0/gems/claide-0.9.1/lib/claide/command.rb:304:in `block in run'
/Library/Ruby/Gems/2.0.0/gems/claide-0.9.1/lib/claide/command.rb:303:in `each'
/Library/Ruby/Gems/2.0.0/gems/claide-0.9.1/lib/claide/command.rb:303:in `run'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.38.2/lib/cocoapods/command.rb:48:in `run'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.38.2/bin/pod:44:in `'
/usr/bin/pod:23:in `load'
/usr/bin/pod:23:in `
' --------------------------------------------- 0.38.2

검색해보니 rvm을 업데이트하면 된다고 한다.

\curl -sSL https://get.rvm.io | bash -s stable --ruby

잘 안되서... ruby 버전을 2.2.1로 업데이트 하고 다시 rvm 업데이트를 시도 했다.

pod 명령어는 오류 없이 잘 동작함!

Posted by 초보 프로그래머
TAG cocoapods, ios, POD