我有一些第三方静态库已放入 XCFramework。当我将框架添加到另一个应用程序时,导入框架时库中的类是可见的,但是当我编译应用程序时,出现以下错误:
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_<Class Name>", referenced from:
type metadata for Local object.o
"_OBJC_METACLASS_$_<Class Name>", referenced from:
_OBJC_METACLASS_$__TtC8Local object.o
环境:
IDE: Xcode 12.4
操作系统: macOS 11.15.4 - Catalina
机器: MacBookPro15,1
细节:
XCFramework 是从基于框架模板的项目构建的。
库,即 *.a 文件,包含在项目中,它们是“必需的”。它们各自的头文件 *.h 文件被包含并设置为公共。它们还使用以下符号列在伞形头文件中:
#import <FrameworkName/Library name.h>
在构建设置中,SKIP_INSTALL 设置为 NO。BUILD_LIBRARY_FOR_DISTRIBUTION 设置为 YES。
我使用以下终端命令来归档框架:
xcodebuild archive -scheme Name -archivePath ./Name-iOS SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
然后我使用以下终端命令创建 Xcframework:
xcodebuild -create-xcframework -framework ./NAME-iOS.xcarchive/Products/Library/Frameworks/NAME.framework -output ./NAME.xcframework
我把这个产品放到我想使用这些库的应用程序项目的“框架、库和嵌入式内容”部分。我可以将库放到框架之外的应用程序中(我有并且它们工作得很好),但我想构建一个可移植的对象,这样我就可以将这个功能从一个项目移动到另一个项目,而无需大量复制和粘贴。
到目前为止,一切都很好。当我在 swift 类中引用一个对象时,如下所示:
import Foundation
import NAME
class AppLocalObject: ClassInName {
}
一切似乎都很好。我没有从 Xcode 中得到任何错误,说它找不到“ClassInName”对象。但是当我尝试编译应用程序时,我得到了上述错误。
我确定我做错了很容易解决的问题。但我不知道那是什么。