Xcode中的弱链接静态库



我正在尝试实现与静态库的弱链接。我读过这两篇文章,《ios上的静态库》;和"Jesse Pinkman如何破解ios上的动态库",这些都很有帮助。

然而,我处于一种我无法实现我想要的情况。我开发了两个框架,我们叫它们MainFeature,它们既可以作为pod安装,也可以作为swift包安装。

Main不依赖于Feature,Feature也不依赖于Main,但如果MainFeature都存在于开发人员的podfile中,那么Main可以使用Feature的功能。这是通过将Framework的路径添加到Main的框架搜索路径中来实现的。

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

问题开始时,集成的开发人员不包括use_frameworks!在他的podfile(例如React Native)。MainFeature然后被构建为静态库,它编译但它永远不会进入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"'
],
…
}

我已经尝试了上面的Defines module = YES/NOFeature的一侧。

Feature.podspec
s.pod_target_xcconfig = {
'DEFINES_MODULE' => 'YES'
}

然而,以上都不起作用。有人知道我哪里做错了吗,或者给我指指方向吗?

我最后嘲笑了你在这里需要的东西。

但是,我只能解决你的问题的一半(没有use_frameworks):

Main.podspec
# To include Swift Module
'OTHER_SWIFT_FLAGS' => ['$(inherited)', '-Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Feature/Feature.modulemap"']

Podspec:

  • 不确定为什么modulemap文件路径需要与cocoapod安装(可能是当一个库弱链接)

Podfile:

  • 没有use_frameworks也可以工作
  • 它不会与use_frameworks工作,因为modulemap文件不会在指定的路径中找到(因为它只考虑静态路径场景)&Xcode会认为这是必要的。不确定如何在Podspec中选择性地指定modulemap文件。

我希望我能帮上忙,尽管事情才进行了一半。

@e_pie我认为你想做的是一个post_install的东西,如果你清楚的依赖.

所以,你尝试的东西实际上是完美的,但应该放在post_install在App的Podfile:
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == "Main"
target.build_configurations.each do |config|
config.build_settings['FRAMEWORK_SEARCH_PATHS'] = "${PODS_CONFIGURATION_BUILD_DIR}/Feature"
end
end
end
end

我希望这对你有帮助,如果没有帮助,请告诉我。

相关内容

  • 没有找到相关文章

最新更新