V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
junho
V2EX  ›  iDev

xcframework 使用时报 undefined symbol 的问题

  •  
  •   junho · 2022-06-15 14:47:24 +08:00 · 4183 次点击
    这是一个创建于 883 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用系统 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 库引用,直接跑是没问题的

    不明白为啥会报这种错误。。。

    6 条回复    2022-06-16 23:54:17 +08:00
    junho
        1
    junho  
    OP
       2022-06-15 14:52:22 +08:00
    也会遇到其他问题,
    例如 build 依赖了第三方库( pod 管理)的 xcframework 后,拿去工程用会包 no such module 和 can not load underlying module 之类的问题
    头大
    louiswang002
        2
    louiswang002  
       2022-06-15 22:19:37 +08:00 via iPhone
    你要理解库之间的依赖原理,以及库与库之间是怎么链接的;换句话说就是 A 库的 framework search path 没包括 B 库所在的路径
    junho
        3
    junho  
    OP
       2022-06-16 08:50:27 +08:00
    @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 库所在的路径”的具体方法
    louiswang002
        4
    louiswang002  
       2022-06-16 09:30:35 +08:00 via iPhone
    @junho 可以先尝试在 A 库的 wrapper 仓库的 podspec 里加上 B 的 dependency
    junho
        5
    junho  
    OP
       2022-06-16 10:04:42 +08:00
    @louiswang002 #4
    是的,目前 A 库的 wrapper 仓库的 popSpec 里是明确加上 B 的 dependency ,所以 cocoapods 自动在 A 库的 Build Setting 里的 framework search path 加上了 B 库的路径。
    所以对于主楼的报错很是奇怪
    louiswang002
        6
    louiswang002  
       2022-06-16 23:54:17 +08:00 via iPhone
    @junho 可能是编译顺序问题导致的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1965 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:23 · PVG 00:23 · LAX 08:23 · JFK 11:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.