I get a weird error when I use MFMailComposeViewController in Monotouch iOS 6, but it worked fine in iOS 5.1:
*** Assertion failure in NSDictionary *_UIRecordArgumentOfInvocationAtIndex(NSInvocation *, NSUInteger, BOOL)(), /SourceCache/UIKit/UIKit-2372/UIAppearance.m:1118
Here is the code:
MFMailComposeViewController _mail; public void SendFeedbackMail (string email_subject, string email_message_body, string[] email_recipients) { if (MFMailComposeViewController.CanSendMail) { _mail = new MFMailComposeViewController (); _mail.SetSubject (email_subject); _mail.SetToRecipients (email_recipients); _mail.SetMessageBody (email_message_body + "\n", false); _mail.Finished += HandleMailFinished; root_controller.PresentViewController(_mail, true, null); } else {
Own stitch on the simulator:
Native stacktrace: 0 MyAppProject 0x0007ba5c mono_handle_native_sigsegv + 284 1 MyAppProject 0x00004a62 mono_sigsegv_signal_handler + 178 2 libsystem_c.dylib 0x93ad486b _sigtramp + 43 3 ??? 0xffffffff 0x0 + 4294967295 4 MyAppProject 0x0014e8be mono_runtime_invoke + 126 5 MyAppProject 0x001ec80f monotouch_exception_handler + 63 6 CoreFoundation 0x020e0318 __handleUncaughtException + 728 7 libobjc.A.dylib 0x0228d0b9 _ZL15_objc_terminatev + 86 8 libstdc++.6.dylib 0x0289e652 _ZSt9terminatev + 21 9 libobjc.A.dylib 0x0228d039 _destroyAltHandlerList + 0 10 libdispatch.dylib 0x0299d027 _dispatch_client_callout + 33 11 libdispatch.dylib 0x0298cd5f _dispatch_barrier_sync_f_invoke + 58 12 libdispatch.dylib 0x0298caa3 dispatch_barrier_sync_f + 108 13 libdispatch.dylib 0x0298ce5e dispatch_sync + 45 14 UIKit 0x00f7ffad __76-[_UIRemoteViewControllerConnectionRequest _connectToViewControllerOperator]_block_invoke_0 + 105 15 UIKit 0x00f8be46 __block_global_0 + 54 16 libdispatch.dylib 0x0299d014 _dispatch_client_callout + 14 17 libdispatch.dylib 0x0298f09f dispatch_once_f + 57 18 libdispatch.dylib 0x0298f061 dispatch_once + 31 19 UIKit 0x00f8be0a __73-[_UIViewServiceSessionEndpoint connectToDeputyOfType:connectionHandler:]_block_invoke_0 + 105 20 UIKit 0x00f8c002 __73-[_UIViewServiceSessionEndpoint connectToDeputyOfType:connectionHandler:]_block_invoke_040 + 25 21 UIKit 0x00fe94e9 __block_global_0 + 32 22 libdispatch.dylib 0x0298b53f _dispatch_call_block_and_release + 15 23 libdispatch.dylib 0x0299d014 _dispatch_client_callout + 14 24 libdispatch.dylib 0x0298d418 _dispatch_queue_drain + 239 25 libdispatch.dylib 0x0298d2a6 _dispatch_queue_invoke + 59 26 libdispatch.dylib 0x0298e280 _dispatch_root_queue_drain + 231 27 libdispatch.dylib 0x0298e450 _dispatch_worker_thread2 + 39 28 libsystem_c.dylib 0x93aeae12 _pthread_wqthread + 441 29 libsystem_c.dylib 0x93ad2cca start_wqthread + 30
Also on the simulator, the application freezes for a while before throwing an exception in the debugger and crashing:
Mono.Debugger.Soft.VMDisconnectedException: Exception of type 'Mono.Debugger.Soft.VMDisconnectedException' was thrown. at Mono.Debugger.Soft.Connection.SendReceive (CommandSet command_set, Int32 command, Mono.Debugger.Soft.PacketWriter packet) [0x00117] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs:1420 at Mono.Debugger.Soft.Connection.Type_GetCustomAttributes (Int64 id, Int64 attr_type_id, Boolean inherit) [0x00000] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs:1986 at Mono.Debugger.Soft.TypeMirror.GetCAttrs (Mono.Debugger.Soft.TypeMirror type, Boolean inherit) [0x0003d] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/TypeMirror.cs:679 at Mono.Debugger.Soft.TypeMirror.GetCustomAttributes (Boolean inherit) [0x00000] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/TypeMirror.cs:664 at Mono.Debugging.Soft.SoftDebuggerAdaptor.OnGetTypeDisplayData (Mono.Debugging.Evaluation.EvaluationContext gctx, System.Object type) [0x0001e] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/addins/MonoDevelop.Debugger.Soft/Mono.Debugging.Soft/SoftDebuggerAdaptor.cs:1066 Application Terminated Mono.Debugger.Soft.VMDisconnectedException: Exception of type 'Mono.Debugger.Soft.VMDisconnectedException' was thrown. at Mono.Debugger.Soft.Connection.SendReceive (CommandSet command_set, Int32 command, Mono.Debugger.Soft.PacketWriter packet) [0x0013f] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs:1425 at Mono.Debugger.Soft.Connection.Type_GetMethodsByNameFlags (Int64 id, System.String name, Int32 flags, Boolean ignoreCase) [0x00016] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs:2002 at Mono.Debugger.Soft.TypeMirror.GetMethodsByNameFlags (System.String name, BindingFlags flags, Boolean ignoreCase) [0x0001c] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/TypeMirror.cs:691 at Mono.Debugging.Soft.SoftDebuggerAdaptor.OverloadResolve (Mono.Debugging.Soft.SoftEvaluationContext ctx, System.String methodName, Mono.Debugger.Soft.TypeMirror type, Mono.Debugger.Soft.TypeMirror[] argtypes, Boolean allowInstance, Boolean allowStatic, Boolean throwIfNotFound) [0x00073] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/addins/MonoDevelop.Debugger.Soft/Mono.Debugging.Soft/SoftDebuggerAdaptor.cs:1231 at Mono.Debugging.Soft.SoftDebuggerAdaptor.CallToString (Mono.Debugging.Evaluation.EvaluationContext ctx, System.Object obj) [0x00107] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/addins/MonoDevelop.Debugger.Soft/Mono.Debugging.Soft/SoftDebuggerAdaptor.cs:91 at Mono.Debugging.Evaluation.ObjectValueAdaptor.TargetObjectToObject (Mono.Debugging.Evaluation.EvaluationContext ctx, System.Object obj) [0x00349] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ObjectValueAdaptor.cs:980 at Mono.Debugging.Soft.SoftDebuggerAdaptor.TargetObjectToObject (Mono.Debugging.Evaluation.EvaluationContext gctx, System.Object obj) [0x001a5] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/addins/MonoDevelop.Debugger.Soft/Mono.Debugging.Soft/SoftDebuggerAdaptor.cs:1400 at Mono.Debugging.Evaluation.ExpressionEvaluator.TargetObjectToExpression (Mono.Debugging.Evaluation.EvaluationContext ctx, System.Object obj) [0x00000] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ExpressionEvaluator.cs:83 at Mono.Debugging.Evaluation.ObjectValueAdaptor.CreateObjectValueImpl (Mono.Debugging.Evaluation.EvaluationContext ctx, IObjectValueSource source, ObjectPath path, System.Object obj, ObjectValueFlags flags) [0x000f5] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ObjectValueAdaptor.cs:385 at Mono.Debugging.Evaluation.ObjectValueAdaptor.CreateObjectValue (Mono.Debugging.Evaluation.EvaluationContext ctx, IObjectValueSource source, ObjectPath path, System.Object obj, ObjectValueFlags flags) [0x00000] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ObjectValueAdaptor.cs:93
Set up the stack on the device:
0 MyAppProject 0x01b39e85 mono_handle_native_sigsegv + 244 1 MyAppProject 0x01afe3cf mono_sigsegv_signal_handler + 130 2 libsystem_c.dylib 0x3aaa8e93 _sigtramp + 42 3 MyAppProject 0x01b92a9d mono_domain_get + 20 4 MyAppProject 0x01b5d53b mono_runtime_invoke + 90 5 MyAppProject 0x01bbd8c0 monotouch_exception_handler + 72 6 CoreFoundation 0x36cee57f <redacted> + 614 7 libobjc.A.dylib 0x34ffea65 <redacted> + 128 8 libc++abi.dylib 0x33e4807b <redacted> + 78 9 libc++abi.dylib 0x33e48114 <redacted> + 19 10 libc++abi.dylib 0x33e49513 __cxa_throw + 122 11 libobjc.A.dylib 0x34ffe9bf objc_exception_throw + 94 12 CoreFoundation 0x36cee15d <redacted> + 0 13 Foundation 0x3477030b <redacted> + 86 14 UIKit 0x3834a925 <redacted> + 1844 15 UIKit 0x38349a7b <redacted> + 634 16 CoreFoundation 0x36ceb62f <redacted> + 714 17 UIKit 0x383497f5 <redacted> + 136 18 UIKit 0x384275e5 <redacted> + 60 19 UIKit 0x383b5cd7 <redacted> + 206 20 UIKit 0x383b5b6d <redacted> + 264 21 libdispatch.dylib 0x359e29f7 <redacted> + 30 22 UIKit 0x383b5a61 <redacted> + 92 23 UIKit 0x383bf0d5 <redacted> + 32 24 libdispatch.dylib 0x359e43f7 <redacted> + 42 25 UIKit 0x383bf0b1 <redacted> + 88 26 libdispatch.dylib 0x359df11f <redacted> + 10 27 libdispatch.dylib 0x359e2ecf <redacted> + 142 28 libdispatch.dylib 0x359e2dc1 <redacted> + 40 29 libdispatch.dylib 0x359e391d <redacted> + 184 30 libdispatch.dylib 0x359e3ac1 <redacted> + 84 31 libsystem_c.dylib 0x3aa76a11 <redacted> + 360 32 libsystem_c.dylib 0x3aa768a4 start_wqthread + 8
Any help is appreciated. Thanks.
UPDATE:
Unfortunately, it seems that there is more than one error.
In my case, the Mail Composer crash was not caused by Appearance or attribute string. I tested all possible connections, but my code crashes.
So, I started commenting on all my code line by line, and I nailed it:
This is the in-app purchase code.
I am using the code from the sample application purchase on the xamarin website.
If I only comment on this line using the SKProductRequest class:
productsRequest.Start ();
MFMailComposer opens and works great!
So, I tested MFMailComposer in the original Xamarin sample project:
http://docs.xamarin.com/ios/tutorials/In-App_Purchasing http://docs.xamarin.com/@api/deki/files/3300/=InAppPurchaseSample.zip
I just added this code to the NonConsumableViewController class:
/// <summary> /// TEST MAIL COMPOSER BUG - START /// </summary> MFMailComposeViewController _mail; void HandleFinished (object sender, MFComposeResultEventArgs e) { } public void TestMailComposer () { var button = UIButton.FromType(UIButtonType.RoundedRect); button.Frame = new RectangleF(20f, 0f, 280f, 40f); button.TouchUpInside += (object sender, EventArgs e) => { if (MFMailComposeViewController.CanSendMail) { _mail = new MFMailComposeViewController (); _mail.SetSubject ("The Subject"); _mail.SetToRecipients (new [] {" the@recipient.com "}); _mail.SetMessageBody ("Some text to e-mail stuff too" + "\n", false); _mail.Finished += HandleFinished; this.PresentViewController(_mail, true, null); } else { //handle not being able to send mail UIAlertView alert = new UIAlertView ("Mail Alert", "Error: Check your eMail configuration", null, "OK", null); alert.Show (); } }; button.SetTitle("Button", UIControlState.Normal); View.AddSubview(button); } /// /// TEST MAIL COMPOSER BUG - END ///
And when I press the button, it hangs.
UPDATE:
I tried the 6.0.2 patch (sorry to wait, but I had to return the code to its original state). The appearance error has disappeared.
The problem with the SKProductRequest class seems different and less urgent. It does not freeze, it just delays the opening of the composer MF Mail for a while. But this seems like an unrelated mistake.
This is a link to the error: https://bugzilla.xamarin.com/show_bug.cgi?id=7443