在XCFramework的Swift框架中无法访问Objective-C类的问题求助
问题排查与解决方案
核心原因
Objective-C类未被正确暴露到XCFramework的公共接口中,导致外部项目无法访问。
具体修复步骤
1. 调整头文件可见性
- 在Swift Framework的Build Phases → Headers面板中,将
FingerprintSDKWrapper.h从Project栏拖拽到Public栏。只有标记为Public的头文件才会被纳入XCFramework的对外接口。 - 若手动管理
module.modulemap,确保添加公共头声明:framework module FingerprintSDK { umbrella header "FingerprintSDK.h" export * module * { export * } header "FingerprintSDKWrapper.h" }
2. 验证框架编译设置
- 确认框架Build Settings中:
Defines Module设为YESModule Name与框架名称(如FingerprintSDK)完全一致- 开启
BUILD_LIBRARY_FOR_DISTRIBUTION=YES(这是XCFramework正确分发公共接口的必要参数)
3. 重新生成XCFramework
执行打包命令时务必包含所有目标架构,并带上关键编译参数:
# 打包真机架构 xcodebuild archive -scheme FingerprintSDK -destination "generic/platform=iOS" -archivePath "./build/FingerprintSDK-iOS.xcarchive" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES # 打包模拟器架构 xcodebuild archive -scheme FingerprintSDK -destination "generic/platform=iOS Simulator" -archivePath "./build/FingerprintSDK-iOSSimulator.xcarchive" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES # 合并为XCFramework xcodebuild -create-xcframework -framework ./build/FingerprintSDK-iOS.xcarchive/Products/Library/Frameworks/FingerprintSDK.framework -framework ./build/FingerprintSDK-iOSSimulator.xcarchive/Products/Library/Frameworks/FingerprintSDK.framework -output ./build/FingerprintSDK.xcframework
4. 外部项目导入验证
- 在Objective-C项目中,直接导入框架的 umbrella header 或单独导入包装器头文件:
#import <FingerprintSDK/FingerprintSDK.h> // 或 #import <FingerprintSDK/FingerprintSDKWrapper.h> - 若仍无法访问,清理项目缓存(
Command+Shift+K),重启Xcode后重新导入XCFramework。
5. 修正代码拼写错误
你的代码中compeltion为拼写错误,需修正为completion,否则会导致外部调用时出现方法找不到的问题:
- (void)scanFingerprintWithKeywindow:(UIWindow *)window completion:(void (^)(NSArray<Images *> *resultArray))completion;
内容的提问来源于stack exchange,提问作者Altaf Rehman
相关产品推荐
相关产品推荐

