You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS真机集成OneSignal框架崩溃:找不到OneSignalInAppMessages库

真机启动崩溃:dyld找不到@rpath下的OneSignalInAppMessages.framework(SPM集成OneSignal v5.0.4)

问题背景

开发自定义框架时通过Swift Package Manager集成OneSignal v5.0.4封装推送功能,iOS 17.0.1模拟器运行正常且能接收通知,但在iPad Air 5(iPadOS 17.0.3)、iPhone 14(iOS 17.1.1)等真机上启动崩溃,核心报错:

dyld: Library not loaded: @rpath/OneSignalInAppMessages.framework/OneSignalInAppMessages
Referenced from: /private/var/containers/Bundle/Application/XXX/YourApp.app/Frameworks/YourCustomFramework.framework/YourCustomFramework
Reason: tried: '/usr/lib/swift/OneSignalInAppMessages.framework/OneSignalInAppMessages' (no such file), '/private/preboot/Cryptexes/OS/usr/lib/swift/OneSignalInAppMessages.framework/OneSignalInAppMessages' (no such file), '@rpath/OneSignalInAppMessages.framework/OneSignalInAppMessages' (no such file)...

已尝试的无效操作:切换Xcode 14/15版本、手动配置@rpath、设置ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES、将OneSignal添加到框架依赖列表。

可行修复方案

1. 确保主应用正确嵌入OneSignal子框架

自定义框架的依赖不会自动传递嵌入配置到主应用,需手动检查主应用的框架嵌入设置:

  • 打开主应用Xcode项目,进入Target > General > Frameworks, Libraries, and Embedded Content
  • 找到OneSignal系列框架(包括OneSignalInAppMessages.framework),将它们的Embed选项统一设为Embed & Sign
  • 若主应用未直接添加OneSignal依赖,需在主应用的Package.swift或Xcode的SPM依赖列表中显式引入OneSignal v5.0.4

2. 修正自定义框架的Build Settings路径配置

  • 进入自定义框架的Target > Build Settings > Framework Search Paths,添加$(PROJECT_DIR)/Packages/OneSignal-5.0.4/OneSignalInAppMessages(根据你的SPM包实际路径调整),并设置为recursive
  • 确认Runpath Search Paths包含@executable_path/Frameworks和@loader_path/Frameworks两个路径

3. 显式声明OneSignal子产品依赖

在自定义框架的Package.swift中,直接声明需要的OneSignal子产品,避免SPM自动依赖遗漏:

dependencies: [
    .package(url: "https://github.com/OneSignal/OneSignal-iOS-SDK.git", exact: "5.0.4")
],
targets: [
    .target(
        name: "YourCustomFramework",
        dependencies: [
            .product(name: "OneSignal", package: "OneSignal-iOS-SDK"),
            .product(name: "OneSignalInAppMessages", package: "OneSignal-iOS-SDK")
        ]
    )
]

4. 彻底清理缓存后重构

  • 执行Cmd + Shift + K清理项目缓存
  • 终端执行rm -rf ~/Library/Developer/Xcode/DerivedData清除全局DerivedData
  • 重新构建自定义框架,再集成到主应用中测试

5. 验证依赖路径一致性

用otool命令检查自定义框架的依赖引用路径是否正确:

otool -L YourCustomFramework.framework/YourCustomFramework

确认输出中OneSignalInAppMessages.framework的引用路径为@rpath/OneSignalInAppMessages.framework/OneSignalInAppMessages,同时检查主应用的Frameworks目录下是否存在该框架。

内容的提问来源于stack exchange,提问作者Karim Sakr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 00:34:50