我们有一个适当的iOS静态库,包含Swift和C。我们希望将其可执行文件放入我们的框架项目中,以保护它。
我们在命令行中使用xcodebuild将静态库构建到xcframework中,然后将框架项目的.xcframework导入到我们的测试应用程序中,但得到构建错误“No such module 'M'”。
xcodebuild脚本生成正常...
xcodebuild archive -scheme M -archivePath build/M-iphoneos.xcarchive -sdk iphoneos SKIP_INSTALL=NO
xcodebuild -create-xcframework -library M/Release-iphoneos/libStatic_lib_Swift_C.a -output build/M.xcframework
rem Copy framework executable into test app folder:
cp -R Build/M.xcframework ../testApp/testApp
更新...
我们将“-framework...”更改为“-library M/Release-iphoneos/libStatic_lib_Swift_C.a”,但应用程序仍然会出现构建错误:“没有这样的模块'M'”
Frameworks的构建设置搜索路径&导入路径=静态库路径。应用的构建设置搜索路径&导入路径= M.xcframework路径。
注意:没有导入.h文件。只有app的一个公共Swift func才能访问静态库。在内部,func调用了一堆C,然后返回inout参数返回给调用app。
1条答案
按热度按时间7rfyedvj1#
把一个静态库放到框架中绝不会“使它更私有”,我假设你只是想发布一个二进制xcframework,这很好。
对于你的问题,你传递了
-framework
,它要求输出已经是一个框架。但是你有一个静态库。你想传递-library
和-headers
选项来将它捆绑到xcframework中。(注意xcframework和框架不是一回事。)同时确保你已经阅读了Creating a multiplatform binary framework bundle,特别是关于构建设置的部分。你正在传递SKIP_INSTALL=NO,但是你可能没有按照文档中的要求设置BUILD_LIBRARY_FOR_DISTRIBUTION。