用系统 framework 模板创建一个 A 静态 framework 工程,然后用 pod 引入 B 库依赖,接着通过 archive 和 xcodebuild 生成 A.xcframework 。
然后创建一个私有 Pod ,里面只依赖了上面生成的 A.xcframework(使用 vender_frameworks)
然后创建了一个 Demo 工程,通过 Pod 引入了上面的私有 Pod ( xcframework )和 B 库(源码),然后编译时就会报错,说找不到 A.xcframework 用到的 B 方法的符号。(pod 库都是静态的)。 但是我看 cocoapods 已经设置好 Demo 工程,例如 framework path 、modulemap path 等.
移除私有 Pod ( xcframework )只保留 B 库引用,直接跑是没问题的
不明白为啥会报这种错误。。。
1
junho OP 也会遇到其他问题,
例如 build 依赖了第三方库( pod 管理)的 xcframework 后,拿去工程用会包 no such module 和 can not load underlying module 之类的问题 头大 |
2
louiswang002 2022-06-15 22:19:37 +08:00 via iPhone
你要理解库之间的依赖原理,以及库与库之间是怎么链接的;换句话说就是 A 库的 framework search path 没包括 B 库所在的路径
|
3
junho OP @louiswang002 #2
按我的理解,这是在 Demo 工程 link 阶段发生的错误,所有的 objectFile 都在一个可执行文件里,demo 工程能找到 B 库的 framework 就应该可以链接,应该跟 A 库有没有包括 B 库的路径没关系吧? 也确认了 Pods 的 Project 的 A 库私有库 target 的 framework search path 是包含了 B 库路径的(因为 podSepc 里写明了依赖 B 库) 请指点下“ A 库的 framework search path 没包括 B 库所在的路径”的具体方法 |
4
louiswang002 2022-06-16 09:30:35 +08:00 via iPhone
@junho 可以先尝试在 A 库的 wrapper 仓库的 podspec 里加上 B 的 dependency
|
5
junho OP @louiswang002 #4
是的,目前 A 库的 wrapper 仓库的 popSpec 里是明确加上 B 的 dependency ,所以 cocoapods 自动在 A 库的 Build Setting 里的 framework search path 加上了 B 库的路径。 所以对于主楼的报错很是奇怪 |
6
louiswang002 2022-06-16 23:54:17 +08:00 via iPhone
@junho 可能是编译顺序问题导致的
|