我有 Xamarin.iOS 项目,我正在尝试在其中使用 Vivalnk sdk(一个 Swift 5 框架)。
我正在尝试浏览本指南: https ://docs.microsoft.com/en-us/xamarin/ios/platform/binding-swift/walkthrough
请注意,我忽略了构建本机库的步骤,因为 Swift sdk 提供了内置的 Objective-c 标头。
所以,我使用了一个客观的Sharpie来生成 ApiDefinitions.cs 和 StructsAndEnums.cs 文件。
一旦使用此命令:(目标 c)
sharpie bind --sdk=iphoneos14.2 --output="XamarinApiDef" --namespace="Binding" --scope="/VivalnkSDK.framework/Headers/" "/VivalnkSDK.framework/Headers/VVBleManager.h"
并且曾经使用过这个:(Swift)
sharpie bind -sdk iphoneos14.2 -scope VivalnkSDK.framework/Headers/ VivalnkSDK.framework/Headers/VVBleManager.h
最后,我使用了以下命令的结果:
sharpie bind -sdk iphoneos14.2 -scope VivalnkSDK.framework/Headers/ VivalnkSDK.framework/Headers/VivalnkSDK-swift.h
然后,我创建了 iOS 绑定库,将这些文件替换为旧文件,并根据微软的文档设置构建操作。
然后,我将 Vivalnk 框架添加到 Native References,将 smartlink 设置为 true,并将 load 强制设置为 false。成功构建绑定库后,我将此 iOS 绑定库引用到我的 Xamarin.iOS 项目并使用它,但是当我构建 Xamarin.iOS 项目时,出现 249 错误,如下所示:
Could not find or use auto-linked library 'swiftFoundation' (Vivalnk) Native linking
Native linking failed, undefined symbol: nominal type descriptor for Swift.Double. Please verify that all the necessary frameworks have been referenced and native libraries are properly linked in. (MT5210) (Vivalnk)
我在互联网上搜索了很多,也尝试了这些:
- 将链接器行为设置为仅链接框架 SDK。
- 在两个项目中安装 Xamarin.Swift。
- 添加这个:
-/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/ -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos -Wl,-rpath -Wl,@executable_path/Frameworks
到 iOS 绑定库中本机引用的 Linker Flags。
添加这个:
--gcc_flags -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/ -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos -Wl,-rpath -Wl,@executable_path/Frameworks
在可执行项目的 iOS 构建选项中的其他 mtouch 参数中。
我检查了 Xcode 的位置,它就在那里。但他们都没有为我工作。我在 Visual Studio for Mac 和 windows 中都进行了测试,没有任何改变。
我在这里创建了一个示例项目,其中包含重现构建错误所需的一切: https ://github.com/SomayeEbrahimi/Vivalnk.iOS
环境:
Vivalnk architecture sdk: Arm64
Visual Studio for mac Version: 8.8.4
Visual Studio for windows : 16.8.3
Xamarin.iOS version : 14.6.0.15
XCode Version: 12.2
Swift Version: 5
更新
如果我将“Foundation”添加到原生引用的框架中,这些错误将消失,我们将出现以下错误
Vivalnk.iOS/Vivalnk/error MT5209: Error: in XCode/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/libswiftCompatibility50.a(Overrides.cpp.o),
building for iOS, but linking in object file built for iOS Simulator, for architecture arm64 (Vivalnk) Native linking