Ios 应用程序崩溃仅在iPhone设备上,不在模拟器-Xamarin绑定项目中
我创建了iOS绑定项目,其中包含指向SDK Payleven github.com/Payleven/mPOS-SDK-iOS的两个静态库。应用程序崩溃仅在iPhone设备上,不在模拟器中。在模拟器应用程序上运行良好 在iOS构建中,我为iPhone和模拟器设置了相同的设置。唯一的区别在于支持的体系结构: iPhone:ARMv7+ARMv7s+ARM64 模拟器:i386+x86_64 我尝试链接器行为中的所有配置 在IOS构建中没有额外的mtouch参数,我有34个错误 争论不休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
-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。若你们清理了这个项目,重新启动所有东西,但仍然得到了这个结果,然后写信给他们的支持人员。