【问题标题】:App crash only on iPhone Device and not in Simulator - Xamarin Binding project应用程序仅在 iPhone 设备上而不是在模拟器中崩溃 - Xamarin 绑定项目
【发布时间】:2016-01-03 04:27:46
【问题描述】:

我使用 SDK Payleven (github.com/payleven/mPOS-SDK-iOS) 的两个静态库创建了 iOS 绑定项目。应用程序仅在 iPhone 设备上崩溃,而不在模拟器中。在模拟器应用程序上工作正常。

在“iOS Build”中,我为 iPhone 和 Simulator 设置了相同的设置。唯一的区别是“支持的架构:”

iPhone:ARMv7 + ARMv7s + ARM64

模拟器:i386 + x86_64

我尝试“链接器行为”中的所有配置。

在 IOS 构建中没有额外的 mtouch 参数我有 34 个错误
http://pastebin.com/03S6P9DU

带参数

-gcc_flags "-L${ProjectDir}/Soft.ePosPayleven/ -lPaylevenSDK -lAdyenToolkit -force_load ${ProjectDir}/Soft.ePosPayleven/libPaylevenSDK.a ${ProjectDir}/Soft.ePosPayleven/libAdyenToolkit.a" 

我在绑定项目中由 xamarin 生成的类中有这个异常 http://pastebin.com/8eEMrU0n

[CompilerGenerated]
        [EditorBrowsable (EditorBrowsableState.Advanced)]
        [Export ("init")]
        public PLVPayleven () : base (NSObjectFlag.Empty)
        {
            IsDirectBinding = GetType ().Assembly == global::ApiDefinition.Messaging.this_assembly;
            if (IsDirectBinding) {
exception-->    InitializeHandle (global::ApiDefinition.Messaging.IntPtr_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("init")), "init");
            } else {
                InitializeHandle (global::ApiDefinition.Messaging.IntPtr_objc_msgSendSuper (this.SuperHandle, global::ObjCRuntime.Selector.GetHandle ("init")), "init");
            }
        }

libAdyenToolkit.linkwith.cs

[assembly: LinkWith ("libAdyenToolkit.a", LinkTarget.ArmV7 | LinkTarget.ArmV7s | LinkTarget.Simulator | LinkTarget.Simulator64 | LinkTarget.Arm64, SmartLink = true, ForceLoad = true, 
     Frameworks = "CoreFoundation CoreData CoreLocation ExternalAccessory SystemConfiguration UIKit Foundation", LinkerFlags = "-lz -lsqlite3", IsCxx = true)] 

libPaylevenSDK.linkwith.cs

[assembly: LinkWith ("libPaylevenSDK.a", LinkTarget.Simulator | LinkTarget.Simulator64 | LinkTarget.ArmV7 | LinkTarget.Arm64, SmartLink = true, ForceLoad = true, 
     Frameworks = "CoreFoundation CoreData CoreLocation ExternalAccessory SystemConfiguration UIKit Foundation", LinkerFlags = "-lz -lsqlite3", IsCxx = true)] 

设备:iPhone 5s

Xamarin Studio:5.9.7(内部版本 9)

在模拟器上测试:5, 5s, 6 with sdk 8.4 i 8.1

“lipo -info libPaylevenSDK.a”给我:胖文件中的体系结构:libPaylevenSDK.a 是:i386 x86_64 armv7 arm64

“lipo -info libAdyenToolkit.a”:fat 文件中的架构:libAdyenToolkit.a 是:i386 x86_64 armv7 armv7s arm64

【问题讨论】:

  • 贴出此类中的代码 /Users/Admin/myApp/ViewController/PinView.cs:36
  • 36 Request = new MvxViewModelRequest(null, null, new MvxRequestedBy());
  • 我的错误,我在另一个分支,在第 36 行是“var pm = new PaylevenManeger();”这是代码 PaylevenManeger:pastebin.com/x2jQRdNE

标签: ios iphone xamarin xamarin.ios ios-simulator


【解决方案1】:

只要你有一个未定义的符号异常,你可能有你的 .a 文件只为模拟器构建。跑了就知道了

nm %yourLibrary%.a | grep _SecCertificateCreateWithData

发现一种架构只有一行。

为设备再构建一个库,并将它们与 lipo 合并,如下所示: https://developer.xamarin.com/guides/ios/advanced_topics/native_interop/

【讨论】:

  • "lipo -info libPaylevenSDK.a" 给我:胖文件中的体系结构:libPaylevenSDK.a 是:i386 x86_64 armv7 arm64
  • "nm libPaylevenSDK.a | grep _SecCertificateCreateWithData" 给我:" U _SecCertificateCreateWithData"
  • 这样它只是看不到这个方法,它是一个 Xamarin 错误。如果您清理项目,重新启动所有内容并仍然得到它,然后写信给他们的支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 2010-12-03
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多