태그 보관물: xamarin

Xamarin Forms 1.3.4.6332 iOS ScrollViewRenderer 내비게이션 이슈

문제점

Xamarin Forms iOS ScrollViewRenderer가 1.3.4.6332 버전에서 NavigationPage.HasNavigationBarProperty 바인딩 속성이 true인 페에지에 포함되어 있으면 다른 페이지로 이동할 때 맨위로 스크롤되는 현상이 발견되었습니다. 호출 스택은 다음과 같습니다.

0x14 in UIKit.UIScrollView._UIScrollViewDelegate.Scrolled at /Developer/MonoTouch/Source/monotouch/src/build/native/UIKit/UIScrollView.g.cs:1074,6
0x25 in ObjCRuntime.Messaging.void_objc_msgSendSuper_CGSize
0x3C in UIKit.UIScrollView.set_ContentSize at /Developer/MonoTouch/Source/monotouch/src/build/native/UIKit/UIScrollView.g.cs:430,6
0xF in Xamarin.Forms.Platform.iOS.ScrollViewRenderer.OnNativeControlUpdated
계속 읽기

Advertisements

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 빌드에서는 문제되지 않았나?

계속 읽기

Mark and Sweep 가비지 컬렉션과 함수 기반 Mediator 패턴 – II

시작하기

지난 포스트에서 함수의 강한 참조를 사용하는 메신저 구현 방법과 이 방법을 사용할 때 변수에 저장되지 않는 개체가 가비지 컬렉션에서 생존하게 되는 현상을 살펴봤습니다. 이러한 현상이 항상 문제라고 볼 수는 없지만 그것을 기대하지 않은 상황에서는 곤란해질 수 있습니다. 이번 포스트에서는 약한 참조를 사용해 메시지 구독이 가비지 컬렉션에 영향을 주지 않도록 하는 방법을 알아봅니다.

I'm too weak. Don't kill me.

  1. Mark and Sweep 가비지 컬렉션과 함수 기반 Mediator 패턴 – I
  2. Mark and Sweep 가비지 컬렉션과 함수 기반 Mediator 패턴 – II

계속 읽기