当我运行“MyLibrary App”(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 项目创建 MyFramework.xcframework (https://github.com/steve-ham/MyFramework)
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”包装到 .xcframework 中并像上面包装到 CocoaPod 中一样将其部署?谢谢。
执行以下方法并将框架导入另一个项目后,我无法将项目(应用程序)发布到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。