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

iOS应用开启On-Demand Resource后App Store上传失败:路径不被允许

解决ODR上传App Store时「路径不被允许」的问题

看起来你遇到的问题很典型——本地ODR测试正常,但上传审核时触发路径错误,结合你怀疑的子文件夹问题,我整理了几个针对性的排查和解决步骤:

1. 修正SCNAssets的ODR标记方式

SCNAssets是Xcode特殊处理的资源bundle,直接给包含子文件夹的SCNAssets父文件夹打ODR标签,很可能导致App Store审核时识别到非法嵌套路径。正确的做法是:

  • 展开你的SCNAssets文件夹,逐个选中内部的具体资源文件(.scn、粒子系统文件、图片等),在右侧属性面板的「On Demand Resources Tags」中添加对应标签;
  • 取消SCNAssets父文件夹的ODR标签,避免整个bundle被标记为ODR资源(本地测试可能兼容,但App Store的审核机制对bundle嵌套路径更严格)。

2. 验证Build Settings的关键配置

除了确认「Enable On Demand Resources」为YES,还要检查以下设置:

  • 确保「Resource Rules Path」为空(Xcode 10+已经废弃这个设置,但旧版本残留的配置可能导致问题);
  • 检查「Strip Debug Symbols During Copy」设置为YES(Debug版本可以是NO,但Release版本必须开启,否则可能影响ODR资源的打包结构);
  • 确认「Embed On Demand Resources」为YES(这个选项在Target的「Build Phases」→「Copy Bundle Resources」上方的设置里)。

3. 重新组织资源结构(可选但有效)

如果子文件夹的嵌套是必须的,尝试把每个子文件夹打包成独立的SCNAssets bundle:

  • 新建多个SCNAssets文件夹,将不同模块的资源分别放入;
  • 给每个独立的SCNAssets文件夹单独打ODR标签,这样可以避免单个bundle内的嵌套路径问题,同时更清晰地管理不同模块的资源。

4. 彻底清理后重新打包

常规的清理可能不够彻底,建议按以下步骤操作:

  • 关闭Xcode,删除Derived Data(可以通过Xcode → Preferences → Locations → Derived Data找到路径后删除);
  • 清空项目的Build文件夹(Product → Clean Build Folder);
  • 重新生成Archive,再尝试上传到App Store。

代码层面的小优化

你的ODR Manager代码逻辑是正确的,可以加一个小优化避免重复请求已下载的资源:

func requestSceneWith(tag: String, onSuccess: @escaping () -> Void, onFailure: @escaping (NSError) -> Void) {
    // 先检查资源是否已可用
    let request = NSBundleResourceRequest(tags: [tag])
    if request.progress.fractionCompleted == 1.0 {
        onSuccess()
        return
    }
    currentRequest = request
    request.beginAccessingResources { error in
        if let error = error {
            onFailure(error as NSError)
            return
        }
        onSuccess()
    }
}

这些步骤应该能解决你遇到的路径问题,核心是避免在SCNAssets这种特殊bundle内用嵌套文件夹的ODR标记方式,让每个资源或独立bundle的标签更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:53:56