应用程序只在iPhone设备上崩溃,而不是在模拟器- Xamarin绑定项目



我用两个静态库创建了iOS Binding Project到SDK Payleven (github.com/payleven/mPOS-SDK-iOS)。应用程序只在iPhone设备上崩溃,而不是在模拟器上。在模拟器应用程序工作良好。

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

iPhone: ARMv7 + ARMv7s + ARM64

模拟器:i386 + x86_64

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

在IOS Build中没有额外的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 (build 9)

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

"lipo -info libPaylevenSDK. info "给了我:胖文件中的架构:libPaylevenSDK。A: i386 x86_64 armv7 arm64

"lipo -info libAdyenToolkit. "胖文件中的体系结构:libAdyenToolkit。A: i386 x86_64 armv7 armv7s arm64

只要你有一个未定义的符号异常,你可能有你的。a文件只为模拟器构建。如果你运行

,你就可以知道它是什么了。
nm %yourLibrary%.a | grep _SecCertificateCreateWithData

,发现一个体系结构只有一行。

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

最新更新