태그 보관물: generic

Xamarin.iOS 제한된 제네릭 지원

시작하기

어쩌다보니 당찮게도 모바일 서비스 스타트업에 CTO(라고 쓰고 ‘기술 잡부’라고 읽는다) 타이틀로 합류한지 몇 달 되었습니다. 그런데 함정은 제가 합류 당시 모바일 개발 경험이 전혀 없었다는 것입니다. 모바일 서비스 스타트업에 모바일 개발 경험이 없는 CTO라니… 게다가 전 Objective-C 혐오증을 심하게 앓고 있습니다. 하지만 미국 시장이 주 타겟이라 iPhone을 버릴 수는 없었으며 HTML5 성능은 부족하고 네이티브 UI 성능이 필요했기에 결국 선택은 Xamarin 밖에 없었습니다.

Xamarin 중에서도 크로스 플랫폼 도구인 Xamarin Forms를 사용하고 있습니다.

Xamarin

Xamarin

수개월 동안 초보 모바일 개발자의 고난 끝에 드디어 지난 주 야심차게 iTunes Connect에 앱 리뷰 요청을 보냈습니다. 부푼 기대를 안고 기다리던 중 오늘 아침에 승인 거절이라는 좌절스러운 피드백을 받았습니다.

Your app crashed on launch on the following device(s) so we were unable to review it…

5주 가량 10명 정도의 인원으로 AdHoc 빌드의 내부 테스트 과정을 거쳤는데 응용프로그램이 시작과 동시에 죽는다니! 애플측에서 보내온 로그에 이런 단서가 있었습니다.

<Warning> Unhandled managed exception: An exception was thrown while invoking the constructor ‘Void .ctor()’ on type ‘MainViewModel’. —> Attempting to JIT compile method ‘System.Reactive.Concurrency.LocalScheduler:Schedule<System.Reactive.Producer`1/State<System.Security.Principal.IPrincipal>> (System.Reactive.Producer`1/State<System.Security.Principal.IPrincipal>,System.Func`3<System.Reactive.Concurrency.IScheduler, System.Reactive.Producer`1/State<System.Security.Principal.IPrincipal>, System.IDisposable>)’ while running with –aot-only. See http://docs.xamarin.com/ios/about/limitations

MainViewModel 인스턴스를 생성하는 과정에서 JIT(just-in-time) 컴파일을 시도했다는 내용입니다. 지금까지 AdHoc 빌드와 AppStore 빌드의 차이점이 배포 프로파일 외에는 없다고 생각해서 AppStore 빌드를 단 한 번도 테스트하지 않았었던 것이 초보 모바일 개발자의 치명적 실수였습니다. AppStore 빌드로 디바이스에 배포해 실행해보니 바로 응용프로그램이 크래시되었고 로그를 열어본 결과 크래시 지점이 리뷰 로그와 정확하게 일치했습니다. 이제 의문점은 두 가지입니다. JIT이 왜 문제되는가? 그리고 왜 AdHoc 빌드에서는 문제되지 않았나?

계속 읽기

동적 Linq 연산 #2 – Where

지난 포스트에 이어…

지난 포스트에서 런타임에 동적으로 결정되는 속성 이름을 사용한 시퀀스 정렬과 CreateDelegate 메서드를 사용한 최적화 방법에 대해 살펴봤습니다. 정렬 작업과 더불어 Linq에서 가장 많이 사용되는 연산은 필터링 작업입니다. 이번 포스트에서는 Where 연산에 속성 이름을 적용하는 방법을 정리하겠습니다.

계속 읽기

동적 Linq 연산 #1 – OrderBy

배경

최근에 codeproject.com에서 정렬 키 속성 이름을 입려받아 동적으로 시퀀스에 OrderBy 연산을 적용하는 방법에 대한 포스트를 접했습니다. 데이터를 보여주고 분석하는 프로그램에서 동적으로 속성을 입력받는 상황은 흔히 발생합니다. 실제로 몇 주 전에 팀 동료로부터 서비스 프로그램에서 외부 컴포넌트에서 입력받는 값에 따라 지정된 속성으로 데이터를 필터링하는 방법에 대한 문의를 받은 적이 있습니다. 두 개의 포스트를 통해 이러한 상황에서 사용할 수 있는 정렬과 필터링 연산에 대해 정리해 봅니다.

계속 읽기