【发布时间】:2021-11-06 00:31:10
【问题描述】:
我正在尝试实现与静态库的弱链接。我看过“Static Library on iOS”和“How Jesse Pinkman cracked Dynamic Library on iOS”这两篇文章,真的很有帮助。
但是,我无法实现我想要的。我开发了两个框架,我们称它们为Main 和Feature,它们可以安装为 pod 和 swift 包。
Main 不依赖于Feature,Feature 也不依赖于Main,但如果Main 和Feature 都存在于开发者的podfile 中,那么Main 可以使用Feature 的功能。这是通过在其 podspec 中的 Main 的框架搜索路径上添加 Framework 的路径来实现的。
Main.podspec
# This works when use_frameworks! is added in the podfile.
s.pod_target_xcconfig = {
"FRAMEWORK_SEARCH_PATHS" => [
"$(inherited)",
"${PODS_CONFIGURATION_BUILD_DIR}/Feature",
],
}
这样,Main 可以通过以下方式使用Feature 的功能
#if canImport(Feature)
print("SUCCESS!!!")
let feat = Feature()
feat.test()
#else
print(“Failed to import Feature“)
#endif
当集成开发人员没有在他的 podfile 中包含 use_frameworks!(例如 React Native)时,问题就开始了。 Main 和 Feature 然后构建为静态库,它可以编译但它永远不会进入 SUCCESS 块。
看完上面的文章,我相信正确的做法应该是这样的
Main.podspec
s.pod_target_xcconfig = {
"LIBRARY_SEARCH_PATHS" => [
"$(inherited)",
"${PODS_CONFIGURATION_BUILD_DIR}/Feature",
],
"SWIFT_INCLUDE_PATHS" => [
"$(inherited)",
"${PODS_CONFIGURATION_BUILD_DIR}/Feature",
],
}
也许还可以添加
Main.podspec
s.pod_target_xcconfig = {
…
'OTHER_LDFLAGS' => [
"$(inherited)",
'-ObjC',
'-weak_library -l"Feature"'
],
…
}
我已经在Feature 一侧尝试了上述两种Defines module = YES/NO。
Feature.podspec
s.pod_target_xcconfig = {
'DEFINES_MODULE' => 'YES'
}
但是,上述方法均无效。有谁知道我可能做错了什么,或者指出我的方向?
【问题讨论】:
标签: ios swift objective-c xcode cocoapods