지난 몇달간 저희들은 자잘한 여러 이슈들과 소위 보이지 않는 특정 문제들을 해결하는데 Corona daily builds 에 적용하는데 포커스를 뒀었습니다. 그것들은 짧은 시간안에 해결할만해 보이지 않는 그런 이슈들이었습니다. 동시에 이 플랫폼을 제대로 유지하기 위해서는 필수적으로 해결해야 할 이슈들이었죠.
그런 보이지 않는 이슈들 중에는 안드로이드 퍼미션 특히 default 퍼미션들과 관련 된 것들이 있었습니다. 이전에 저희들은 몇가지 퍼미션들을 디폴트 퍼미션으로 사용했었습니다.
- INTERNET
- READ_PHONE_STATE
- ACCESS_NETWORK_STATE
한편으로는 그 앱에 필요하지 않은 퍼미션을 적용하게 될 수도 있었고 많은 앱 스토어에서 그런 경우 페널티를 매기기도 했었습니다.
이 문제를 해결하기 위해 이 디폴트들을 없애버리고 싶었습니다. 사실 더 정확하게 얘기하자면은 잠시동안 없애 버리고 싶었죠. 그런데 이 문제를 좀 더 깊게 들여다 보니 이 작업을 제대로 못하면 큰 문제가 발생할 수도 있겠더라구요.
우선 저희들이 이 문제를 잘 해결했다는 것을 알려드리며 이 기능은 daily build 1030 서부터 포함 됐다는 것을 참고하시기 바랍니다.
이제 디폴트 퍼미션들은 없습니다.
이제 naive (나이브) 하게 코딩하시면 됩니다. 즉 필요한 퍼미션만 추가하시면 됩니다. 그런데 여기에는 심각한 단점이 있습니다. 예를 들어 여러분 앱이 wep API call 을 사용하는데 INTERNET 퍼미션이 세팅되지 않았다면 crash 가 일어날 겁니다. 그리고 여러분은 그 원인을 찾기가 쉽지 않을 겁니다.
이런 문제를 코로나 식으로 해결하도록 했습니다. 해결할 수 있는 방법을 API 를 통해 제공합니다. 퍼미션이 바뀔 떄 어떤 API 가 영향을 받는지 보실 수 있습니다.
여러분이 API 를 사용하는데 퍼미션을 세팅하는 걸 깜빡하셨다면 OS 가 앱을 kill 하기 전에 코로나에서 그 exception 을 가로 채게 됩니다. 그리고 alert 창을 띄우죠. 아래 그림처럼요.
이 alert 창에서는 어떤 퍼미션이 missing 됐는지 알려드립니다. 이렇게 하면 이 에러의 원인이 무엇인지 여러분에게 정확하게 알려드릴 수 있겠죠? 그러면 에러를 디버깅하고 fix 하는데 훨씬 더 쉬운 환경이 될 겁니다.
일단 그 전에 처음 퍼미션을 줄 때 신경을 쓰셔야겠죠. build.settings 에 퍼미션을 세팅할 때 이 앱에서 필요한 모든 퍼미션을 잘 세팅해 주셔야 합니다. 만약 여러분이 어떤 3rd party services 를 사용한다면 암시적으로 퍼미션을 시용하는 경우도 있을 겁니다. 그런 경우 build.settings 에 모두 세팅해 주셔야 합니다.
예를 들어 web API call 을 사용하신다면 INTERNET 퍼미션을 아래와 같이 세팅하실 수 있습니다.
settings =
{
android =
{
usesPermissions =
{
"android.permission.INTERNET",
},
},
}
모든 샘플 코드에 있는 build.settings 파일들을 이에 맞게 모두 업데이트 했습니다. 그리고 daily build API documentation도 업데이트 했구요.
아래 나오는 events, libraries, library functions, and object methods 들이 이 영향을 받습니다.
- heading events
- location events
- ads library
- analytics library
- display.capture()
- display.captureBounds()
- display.captureScreen()
- facebook library
- gameNetwork library
- media.newRecording()
- media.playVideo()
- media.save()
- media.show()
- native.newMapView()
- native.newWebView()
- native.showWebPopup()
- network.download()
- network.request()
- socket library
- store.init()
- system.getInfo()
- system.scheduleNotification()
- system.vibrate()
- mapView:getUserLocation()
- mapView.isLocationVisible()
- recording:startRecording()
- webView:request()
'Corona SDK > Corona SDK News' 카테고리의 다른 글
Networking 2.0 과 새로운 위젯 들 (1) | 2013.03.06 |
---|---|
Corona Cloud 와 Analytics 관련 소식 (0) | 2013.02.28 |
RIM 의 재탄생. 블랙베리 10의 2013년도 성적은 어떨까? (2) | 2013.02.04 |
코로나에 새로 추가됐으면 하는 기능을 접수 받습니다. http://feedback.coronalabs.com (0) | 2013.01.22 |
2012년의 Corona App 스타들 (0) | 2013.01.12 |
Corona Geek 과 Corona community 에 대한 비전에 대하여 (0) | 2013.01.08 |
2012년 Corona Labs 를 뒤돌아 보며 (0) | 2012.12.29 |
Game Minion 과 함께 Corona Cloud 발표 예정 (0) | 2012.12.14 |
3rd party 서비스 관련 새기능 발표 - Project Gluon - (0) | 2012.12.12 |
Corona SDK 의 Tech Tutorial Center 가 문을 열었습니다. (0) | 2012.12.07 |