如何在没有桥接 Header 的情况下在 Swift 中使用 Objective-C 框架?
How to use Objective-C framework in Swift without Bridging Header?
我正在开发一个 Flutter 插件(在 Swift 中)试图包装一个 Obj-C 框架。我能够在 MyPlugin.h 文件中导入 Header 文件,但现在如何在没有桥接 Header 的情况下使用框架?我刚收到 not found in scope
.
如果我要生成桥接 Header,我会 运行 进入另一个错误 using bridging headers with framework targets is unsupported
这是我的 podspec 文件,我必须将 DEFINES_MODULE 设置为 NO 才能构建没有 运行 的项目进入 Include of non-modular header inside framework module
错误
Pod::Spec.new do |s|
s.name = 'lisnr'
s.version = '1.0.0'
s.summary = 'Flutter plugin for LISNR'
s.description = <<-DESC
Flutter plugin for LISNR.
DESC
s.homepage = 'redacted'
s.license = { :file => '../LICENSE' }
s.author = { 'redacted' => 'redacted' }
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.dependency 'Flutter'
s.platform = :ios, '8.0'
s.preserve_paths = 'radius.framework'
s.xcconfig = { 'OTHER_LDFLAGS' => '-framework radius' }
s.vendored_frameworks = 'radius.framework'
# Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'NO', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
s.swift_version = '5.0'
s.public_header_files = 'Classes/**/*.h'
end
其他代码几乎都是由 Flutter CLI 生成的。
您需要模块映射。您可以手动编写并放入框架中,也可以使用脚本来完成。看看我是如何为 ObjC 框架的 Spotify SDK 做到的here。
你的脚本应该是这样的:
#!/bin/sh
MODULE_DIR="MY_PATH/radius.framework" # You framework's path
mkdir -p "${MODULE_DIR}"
printf "module radius {\n\
header \"Headers/radius.h\"\n\
export *\n\
}" > "${MODULE_DIR}/module.map"
我正在开发一个 Flutter 插件(在 Swift 中)试图包装一个 Obj-C 框架。我能够在 MyPlugin.h 文件中导入 Header 文件,但现在如何在没有桥接 Header 的情况下使用框架?我刚收到 not found in scope
.
如果我要生成桥接 Header,我会 运行 进入另一个错误 using bridging headers with framework targets is unsupported
这是我的 podspec 文件,我必须将 DEFINES_MODULE 设置为 NO 才能构建没有 运行 的项目进入 Include of non-modular header inside framework module
错误
Pod::Spec.new do |s|
s.name = 'lisnr'
s.version = '1.0.0'
s.summary = 'Flutter plugin for LISNR'
s.description = <<-DESC
Flutter plugin for LISNR.
DESC
s.homepage = 'redacted'
s.license = { :file => '../LICENSE' }
s.author = { 'redacted' => 'redacted' }
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.dependency 'Flutter'
s.platform = :ios, '8.0'
s.preserve_paths = 'radius.framework'
s.xcconfig = { 'OTHER_LDFLAGS' => '-framework radius' }
s.vendored_frameworks = 'radius.framework'
# Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'NO', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
s.swift_version = '5.0'
s.public_header_files = 'Classes/**/*.h'
end
其他代码几乎都是由 Flutter CLI 生成的。
您需要模块映射。您可以手动编写并放入框架中,也可以使用脚本来完成。看看我是如何为 ObjC 框架的 Spotify SDK 做到的here。
你的脚本应该是这样的:
#!/bin/sh
MODULE_DIR="MY_PATH/radius.framework" # You framework's path
mkdir -p "${MODULE_DIR}"
printf "module radius {\n\
header \"Headers/radius.h\"\n\
export *\n\
}" > "${MODULE_DIR}/module.map"