当我尝试使用依赖于LibTorch-Lite CocoaPod的iOS xcframework运行应用程序时,

64jmpszr  于 11个月前  发布在  iOS
关注(0)|答案(1)|浏览(112)
  1. MyLibrary:CocoaPod,我试图安装和运行,但失败。(https://github.com/steve-ham/MyLibrary)(包括下面的'MyFramework')
  2. MyFramework:带有'LibTorch-Lite' CocoaPod依赖项的iOS框架。(https://github.com/steve-ham/MyFramework
    当我运行'MyLibrary应用程序'(https://github.com/steve-ham/MyLibrary)我得到下面的错误:
libc++abi: terminating with uncaught exception of type torch::jit::ErrorReport: 
Unknown custom class type quantized.Conv2dPackedParamsBase. Please ensure it is registered.:
quantized::conv1d(Tensor qx, __torch__.torch.classes.quantized.Conv2dPackedParamsBase packed_weight, float output_scale, int output_zero_point) -> Tensor
                                                               ~~~~~~~~~~~~~~~~~~~~~~ <--- HERE

terminating with uncaught exception of type torch::jit::ErrorReport: 
Unknown custom class type quantized.Conv2dPackedParamsBase. Please ensure it is registered.:
quantized::conv1d(Tensor qx, __torch__.torch.classes.quantized.Conv2dPackedParamsBase packed_weight, float output_scale, int output_zero_point) -> Tensor
                                                               ~~~~~~~~~~~~~~~~~~~~~~ <--- HERE

字符串
我使用下面的代码从MyFramework项目(https://github.com/steve-ham/MyFramework)创建MyFramework.xcframework

xcodebuild archive -workspace MyFramework.xcworkspace \
  -scheme MyFramework \
  -sdk iphoneos \
  -archivePath "./MyFramework.xcarchive" \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
  SKIP_INSTALL=NO

xcodebuild archive -workspace MyFramework.xcworkspace \
  -scheme MyFramework \
  -sdk iphonesimulator \
  -archivePath "./MyFramework_sim.xcarchive" \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
  SKIP_INSTALL=NO \
  EXCLUDED_ARCHS=arm64

xcodebuild -create-xcframework \
    -framework "MyFramework.xcarchive/Products/Library/Frameworks/MyFramework.framework" \
    -framework "MyFramework_sim.xcarchive/Products/Library/Frameworks/MyFramework.framework" \
    -output MyFramework.xcframework


我在其他CocoaPods项目中没有遇到过这个问题,只有'LibTorch-Lite'才会发生这种情况。是否存在根本限制,无法将'LibTorch-Lite' Package 到.xcframework中,以便在我的'MyLibrary'项目中成功安装和执行?谢谢。

i2loujxw

i2loujxw1#

编辑:

在执行以下方法并将框架导入到另一个项目后,我无法发布项目(应用程序)进行testflight。我在这里留下这个答案,以防有人可以将其用作找到正确解决方案的垫脚石。

原始应答

我能够得到一个工作解决方案,但有一些限制:
我没有将对libTorch-Lite的依赖添加到我的podspec文件中,而是删除了对它的依赖,并将pods框架嵌入到我的框架中,如下所示:
x1c 0d1x的数据
当我构建这个框架并将其作为一个cocoapod导入到另一个项目中时,一切都顺利地进行了。

此方法的限制:

一般来说,在xcframework中包含cocoapods的推荐方法是运行pod init,将pod添加到podfile中,然后运行pod install,然后在构建框架时,您可以运行类似于以下内容的操作,并将所有依赖的pod作为依赖项添加到podspec文件中。

xcodebuild archive \
-workspace MyPackage.xcworkspace \
-scheme MyPackage \
-configuration Release \
-sdk iphoneos \
-archivePath archives/ios_devices.xcarchive \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
SKIP_INSTALL=NO

xcodebuild archive \
-workspace MyPackage.xcworkspace \
-scheme MyPackage \
-configuration Release \
-sdk iphonesimulator \
-archivePath archives/ios_simulator.xcarchive \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
SKIP_INSTALL=NO

rm -rf ./MyPackage.xcframework

xcodebuild -create-xcframework \
-framework ./archives/ios_devices.xcarchive/Products/Library/Frameworks/MyPackage.framework \
-framework ./archives/ios_simulator.xcarchive/Products/Library/Frameworks/MyPackage.framework \
-output ./MyPackage.xcframework

字符串
这样做(不嵌入pod框架并将依赖项添加到podspec)可以让cocopods正确处理版本并减少冲突的机会。当嵌入pod框架时,您面临的风险是导入您的包的应用程序/包将具有相同的pod依赖项,这将导致宿主项目中的错误。
所以,如果你的框架中也依赖于一个常用的pod,比如alamofire,那么它很有可能会破坏任何导入它的应用程序,假设它们也依赖于alamofire。

相关问题