无法安装CocoaPod,其中包含带有“LibTorch-Lite”CocoaPod依赖项的iOS框架

bejyjqdl  于 2023-10-21  发布在  iOS
关注(0)|答案(1)|浏览(153)
  1. MyLibrary:CocoaPod,我试图安装和运行,但失败。(https://github.com/steve-ham/MyLibrary)(包括在“MyFramework”下面)
  2. MyFramework:iOS框架与'LibTorch-Lite' CocoaPod依赖。(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

当我使用其他CocoaPod项目而不是'LibTorch-Lite'时,没有这样的错误。难道仅仅是不可能将'LibTorch-Lite' Package 到.xcframework中并像上面 Package 到CocoaPod中那样部署它吗?谢谢.

ocebsuys

ocebsuys1#

编辑:

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

原始应答

我能够得到一个工作解决方案,但有一些限制:
我没有将对libTorch-Lite的依赖添加到我的podspec文件中,而是删除了对它的依赖,并将pods框架嵌入到我的框架中,如下所示:

当我构建这个框架并将其作为一个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

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

相关问题