Ios 应用程序崩溃仅在iPhone设备上,不在模拟器-Xamarin绑定项目中

Ios 应用程序崩溃仅在iPhone设备上,不在模拟器-Xamarin绑定项目中,ios,iphone,xamarin,xamarin.ios,ios-simulator,Ios,Iphone,Xamarin,Xamarin.ios,Ios Simulator,我创建了iOS绑定项目,其中包含指向SDK Payleven github.com/Payleven/mPOS-SDK-iOS的两个静态库。应用程序崩溃仅在iPhone设备上,不在模拟器中。在模拟器应用程序上运行良好 在iOS构建中,我为iPhone和模拟器设置了相同的设置。唯一的区别在于支持的体系结构: iPhone:ARMv7+ARMv7s+ARM64 模拟器:i386+x86_64 我尝试链接器行为中的所有配置 在IOS构建中没有额外的mtouch参数,我有34个错误 争论不休 -gcc

我创建了iOS绑定项目,其中包含指向SDK Payleven github.com/Payleven/mPOS-SDK-iOS的两个静态库。应用程序崩溃仅在iPhone设备上,不在模拟器中。在模拟器应用程序上运行良好

在iOS构建中,我为iPhone和模拟器设置了相同的设置。唯一的区别在于支持的体系结构:

iPhone:ARMv7+ARMv7s+ARM64

模拟器:i386+x86_64

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

在IOS构建中没有额外的mtouch参数,我有34个错误

争论不休

-gcc_flags "-L${ProjectDir}/Soft.ePosPayleven/ -lPaylevenSDK -lAdyenToolkit -force_load ${ProjectDir}/Soft.ePosPayleven/libPaylevenSDK.a ${ProjectDir}/Soft.ePosPayleven/libAdyenToolkit.a" 
我在绑定项目中由xamarin生成的类中有此异常

[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)] 
[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)] 
libPaylevenSDK.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)] 
[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)] 
设备:iphone5s

Xamarin Studio:5.9.7版本9

在模拟器上测试:5、5s、6和sdk 8.4 i 8.1


lipo-info libPaylevenSDK.a给出了:fat文件中的架构:libPaylevenSDK.a是:i386 x86_64 armv7 arm64


lipo-info libAdyenToolkit.a:fat文件中的体系结构:libAdyenToolkit.a是:i386 x86_64 armv7 armv7s arm64

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

nm %yourLibrary%.a | grep _SecCertificateCreateWithData
发现一种架构只有一条线

为设备再构建一个库,并将它们与lipo合并,如下所示:

发布此class36请求中的代码/Users/Admin/myApp/ViewController/PinView.cs:36=new MvxViewModelRequestnull、null、new MvxRequestedBy;我错了,我在另一个分行,第36行是var pm=new PaylevenManeger;这是代码PaylevenManeger:lipo-info libPaylevenSDK.a给我:fat文件中的体系结构:libPaylevenSDK.a是:i386 x86_64 armv7 arm64nm libPaylevenSDK.a | grep | U SecCertificateCreateWithData给我:U SecCertificateCreateWithData这样它就看不到这个方法,这是一个Xamarin bug。若你们清理了这个项目,重新启动所有东西,但仍然得到了这个结果,然后写信给他们的支持人员。