Xamarin.ios 随机Xamarin崩溃/ios7/StoreKit

Xamarin.ios 随机Xamarin崩溃/ios7/StoreKit,xamarin.ios,crash,ios7,xamarin,storekit,Xamarin.ios,Crash,Ios7,Xamarin,Storekit,我们目前正面临一个非常恼人的关键随机程序崩溃 随机,因为只有一些客户遇到此问题 随着ios7的发布,崩溃突然出现(在ios7 RTM之前,没有收到任何崩溃报告)。因此,我们认为这与StoreKit行为的变化有关 似乎我们在调用该交易时遇到了问题。原始交易 其他Xamarin用户也面临同样的问题吗? 搜索Xamarin论坛/谷歌等,我们发现我们的问题可能与我们在这里发现的这个bug有关 是否有人找到了解决此随机错误的方法? 一般来说(不涉及Xamarin/Monotouch),是否有人在ios7和

我们目前正面临一个非常恼人的关键随机程序崩溃

随机,因为只有一些客户遇到此问题

随着ios7的发布,崩溃突然出现(在ios7 RTM之前,没有收到任何崩溃报告)。因此,我们认为这与StoreKit行为的变化有关

似乎我们在调用该交易时遇到了问题。原始交易

其他Xamarin用户也面临同样的问题吗?

搜索Xamarin论坛/谷歌等,我们发现我们的问题可能与我们在这里发现的这个bug有关

是否有人找到了解决此随机错误的方法?

一般来说(不涉及Xamarin/Monotouch),是否有人在ios7和storekit中面临类似问题?

我们正在使用:

  • Xamarin Studio 4.2.1(构建1)
  • Xamarin.iOS 7.0.4.209
  • Mono 3.2.4
  • 代码4.6.3
以下是UpdatedTransactions方法的代码:

public override void UpdatedTransactions(SKPaymentQueue queue, SKPaymentTransaction[] transactions)
{
    List<SKPaymentTransaction> chartTransactions = new List<SKPaymentTransaction>();
        foreach (SKPaymentTransaction transaction in transactions)
        {
            string productId = transaction.TransactionState == SKPaymentTransactionState.Restored ? transaction.OriginalTransaction.Payment.ProductIdentifier : transaction.Payment.ProductIdentifier;
             if (string.IsNullOrEmpty(_ProductIdPrefix) == false && productId.StartsWith(_ProductIdPrefix, true, CultureInfo.InvariantCulture))
             {
                  chartTransactions.Add(transaction);
             }
         }
         _PaymentTransactionChangedCallback(chartTransactions.ToArray());
}

wrapper\u runtime\u invoke\u object\u runtime\u invoke\u dynamic\u intptr\u intptr\u intptr\u intptr(在我们的AppMono中)+196
mono_jit_runtime_invoke(在OurAppMono中)(mini.c:5793)
mono_运行时_调用(在OurAppMono中)(object.c:2790)
本机到托管蹦床我们的应用程序我们的图表服务器IOSChartPaymentObserver更新的交易(在我们的AppMono中)(:1214)
...
(未重新符号化)
...
包装器\u管理\u到\u本地\u单点触摸\u UIKit\u UIApplication\u UIApplicationMain\u int\u string\uuuuuuuuuuuuIntptr\u intptr(在我们的AppMono中)+236
OurAppMono\应用程序\主\字符串\在OurAppMono中)+164
包装器\u运行时\u调用\u对象\u运行时\u调用\u动态\u intptr\u intptr\u intptr\u intptr(在我们的AppMono中)+196
mono_jit_runtime_invoke(在OurAppMono中)(mini.c:5793)
mono_运行时_调用(在OurAppMono中)(object.c:2790)
mono_runtime_exec_main(在OurAppMono中)(object.c:3972)
mono_runtime_run_main(在OurAppMono中)(object.c:3602)
mono_jit_exec(在OurAppMono中)(driver.c:1125)
main(在OurAppMono中)(main.m:482)
编辑:

这次崩溃似乎与ios7有关。 (与沙马林无关)

解决方案是处理AppStore返回的(productid=nil)并完成匹配事务

参见:


我认为这与此无关,但我相信它在OriginalTransaction getter中是一个NullReferenceException(或者在您调用OriginalTransaction getter的位置附近-由于优化,确切位置可能有点不准确)

应用程序正在崩溃,因为您没有处理异常-我建议您将异常处理添加到UpdateTransaction方法中,并以某种方式处理异常(例如,向您自己发送日志,向用户发送错误消息和/或重试,等等)

...
(not re-symbolized)
...
mono_handle_native_sigsegv (in OurAppMono) (mini-exceptions.c:2325)
sigabrt_signal_handler (in OurAppMono) (mini-posix.c:196)
...
(not re-symbolized)
...
monotouch_unhandled_exception_handler (in OurAppMono) (monotouch-glue.m:1440)
mono_invoke_unhandled_exception_hook (in OurAppMono) (mini-exceptions.c:2561)
mono_thread_abort (in OurAppMono) (mini.c:2629)
mono_handle_exception_internal (in OurAppMono) + 2136
mono_handle_exception (in OurAppMono) (mini-exceptions.c:1902)
handle_signal_exception (in OurAppMono) (exceptions-arm.c:559)
wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr (in OurAppMono) + 196
mono_jit_runtime_invoke (in OurAppMono) (mini.c:5793)
mono_runtime_invoke (in OurAppMono) (object.c:2790)
native_to_managed_trampoline_OurApp_ChartsServer_IOSChartPaymentObserver_UpdatedTransactions (in OurAppMono) (<stdin>:1214)
...
(not re-symbolized)
...
wrapper_managed_to_native_MonoTouch_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr (in OurAppMono) + 236
OurAppMono_Application_Main_string__ (in OurAppMono) + 164
wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr (in OurAppMono) + 196
mono_jit_runtime_invoke (in OurAppMono) (mini.c:5793)
mono_runtime_invoke (in OurAppMono) (object.c:2790)
mono_runtime_exec_main (in OurAppMono) (object.c:3972)
mono_runtime_run_main (in OurAppMono) (object.c:3602)
mono_jit_exec (in OurAppMono) (driver.c:1125)
main (in OurAppMono) (main.m:482)