ios - Xcode中的弱链接静态库
问题描述
我正在尝试实现与静态库的弱链接。我读过这两篇文章,“ iOS 上的静态库”和“ Jesse Pinkman 如何破解 iOS 上的动态库”,它们真的很有帮助。
但是,我处于无法实现我想要的情况的情况下。我已经开发了两个框架,我们称它们为Main
,Feature
它们可以作为 pod 和 swift 包安装。
Main
不依赖于Feature
, 也不Feature
依赖于Main
, 但如果开发者的 podfile 中同时存在 和 , 则Main
可以使用's 功能。这是通过在其 podspec 中的 ' 框架搜索路径上添加 ' 路径来实现的。Feature
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
使用's 的功能Feature
#if canImport(Feature)
print("SUCCESS!!!")
let feat = Feature()
feat.test()
#else
print(“Failed to import Feature“)
#endif
当集成开发人员不包含use_frameworks!
在他的 podfile 中(例如 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"'
],
…
}
Defines module = YES/NO
我已经在Feature
' 方面尝试了上述方法。
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 会认为它是必需的。不确定如何modulemap
在 Podspec 中选择指定文件。
我希望我能够提供帮助,即使它已经完成了一半。
推荐阅读
- php - CakePHP 4 - 如何在 foreach 循环中保存数据
- mysql - 如何仅通过运行 docker 命令将 wordpress 容器连接到 mysql?
- node.js - 如何阻止 github 操作需要旧的 nodejs 构建?
- reactjs - React 状态钩子,传入方法和参数 onClick
- python - 使用 IF 将 pdf 文件附加到 Outlook 的更好方法是什么?
- python - Matplotlib imshow:更改颜色条的中心值时,NaN 的颜色会发生变化
- javascript - html div在切换时接受焦点,但在通过javascript设置时不接受
- react-native - 在 React Native 中按下按钮后如何显示图像
- javascript - JavaScript - 基于url参数的h1替换javascript,如何在url和页面中添加多个单词?
- javascript - 设置大小框裁剪 (Cropper Js)