使用BlackBerry Dynamics动态SDK时,Windows端VS构建Xamarin iOS应用失败
问题背景
我们正从BlackBerry Dynamics SDK for Xamarin iOS的静态版本切换至新的动态版本。新版本中GoodDynamics.iOS.dll不再包含所有资源,而是依赖同目录下的GoodDynamics.iOS.resources文件夹内容。但通过Windows端Visual Studio配对Mac构建代理构建时,出现原生链接失败,提示找不到libGD_CPPWrapper.a等资源文件,而Mac本地Visual Studio可正常构建。
操作步骤
- 下载BlackBerry Dynamics SDK for Xamarin iOS 10.1.0.663版本
- 提取其中的Examples解决方案并加载到Visual Studio
- 修改项目info.plist中的bundle id适配配置文件以完成签名
- 构建项目
错误日志
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(235,3): warning MT1302: Could not extract the native library 'libGD_CPPWrapper.a' from '/Users/{UserName}/Library/Caches/Xamarin/mtbs/builds/GreetingsClient/dafdd80e9da4129fe5916d9283ff66211b655dba54eca9615ebdc599e5fa50eb/obj/iPhone/Debug/mtouch-cache/libGD_CPPWrapper.a'. Please ensure the native library was properly embedded in the managed assembly (if the assembly was built using a binding project, the native library must be included in the project, and its Build Action must be 'ObjcBindingNativeLibrary').
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(235,3): error : no such file or directory: '/Users/{UserName}/Library/Caches/Xamarin/mtbs/builds/GreetingsClient/dafdd80e9da4129fe5916d9283ff66211b655dba54eca9615ebdc599e5fa50eb/obj/iPhone/Debug/mtouch-cache/libGD_CPPWrapper.a'
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(235,3): error : clang: error: no such file or directory: '/Users/{UserName}/Library/Caches/Xamarin/mtbs/builds/GreetingsClient/dafdd80e9da4129fe5916d9283ff66211b655dba54eca9615ebdc599e5fa50eb/obj/iPhone/Debug/mtouch-cache/libGD_CPPWrapper.a'
解决方案
1. 确保资源文件夹被正确纳入项目
- 右键Xamarin iOS项目 → 添加 → 现有文件夹,选中
GoodDynamics.iOS.resources文件夹 - 选中该文件夹内所有文件(包括
libGD_CPPWrapper.a和xcframework目录),在属性面板设置:- 生成操作:
Content - 复制到输出目录:
如果较新则复制
- 生成操作:
2. 修改MSBuild配置强制同步资源到Mac代理
打开项目的.csproj文件,添加以下配置,确保资源文件被同步到Mac端的构建缓存目录:
<ItemGroup> <BundleResource Include="GoodDynamics.iOS.resources\**\*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <Visible>false</Visible> </BundleResource> </ItemGroup> <Target Name="CopyGDResourcesToMac" BeforeTargets="_CopyResourcesToMac"> <Copy SourceFiles="@(BundleResource)" DestinationFiles="@(BundleResource->'$(IntermediateOutputPath)mtouch-cache\%(RecursiveDir)%(Filename)%(Extension)')" /> </Target>
3. 清理缓存并重启构建环境
- 在Windows端Visual Studio中执行生成 → 清理解决方案
- 关闭Visual Studio,删除项目的
bin和obj目录 - 登录Mac代理,删除
/Users/{UserName}/Library/Caches/Xamarin/mtbs/builds下对应项目的缓存文件夹 - 重新打开Visual Studio,重新构建项目
4. 验证SDK引用路径
确认项目中GoodDynamics.iOS.dll的引用路径正确,且GoodDynamics.iOS.resources文件夹与dll处于同一目录。若使用NuGet包,检查包是否完整安装,资源文件夹已被正确还原。
内容的提问来源于stack exchange,提问作者tozyw

