iOS 应用程序中的按需资源 AppStore 上传失败 - 不允许的路径

Posted

技术标签:

【中文标题】iOS 应用程序中的按需资源 AppStore 上传失败 - 不允许的路径【英文标题】:On Demand Resource AppStore Upload Failure in iOS application - Disallowed Paths 【发布时间】:2018-05-15 05:52:35 【问题描述】:

我有一个使用 ARKit 的应用程序。在当前构建之前,所有资产都包含在应用程序包本身中,用户使用该应用程序似乎没有问题。

但是,我想在应用程序上启用按需资源,以便可以从 AppStore 下载较新的模块(游戏)的资源,从而避免过重的应用程序大小。根据 ios 文档,我能够使用 ODR,并且该应用程序在我的设备上运行良好。它应该使用 ODR 加载资源。

然而,在上传到 AppStore 进行 App Review 时,我遇到了错误:

我的特定 SCNAssets 文件夹(已标记)的文件夹结构如下:

请注意,该应用在我的设备上使用 ODR 可以完美运行。我做了以下并尝试了多次,但没有成功。

    创建干净的构建。 更改版本/构建。 确保在构建设置等中启用了 ODR - 所有卫生步骤。而且它是 所有 XCode,没有我正在使用的平台(例如 Xamarin, 等) 使用现有的 SO 相关解决方案。

对于启用 ODR 的应用程序的 AppStore 上传相关问题,Apple 提供的文档不多。我想知道在标记的资源文件夹中,我们是否也可以有其他文件夹,因为我的文件夹结构现在是 - 不确定这是否是原因,因为附加的错误指向我的文件夹结构中的所有文件夹.

非常感谢您的帮助。 目前,我消除了对 ODR 的依赖并在构建时不使用它,但是这不能持续很长时间。 注意:资产都是scn文件、scn粒子系统和图片。

访问 ODR 的代码如下(简洁),但该代码适用于我的设备,它应该适用于其他地方。我认为这个问题可能与文件夹排列有关。

ODR 经理:

class ODRManager 

    static let shared = ODRManager()
    var currentRequest: NSBundleResourceRequest?
    var currentProgressFractionCompleted: Double?

    func requestSceneWith(tag: String, onSuccess: @escaping () -> Void, onFailure: @escaping (NSError) -> Void) 

        currentRequest = NSBundleResourceRequest(tags: [tag])

        guard let request = currentRequest else  return 

        request.beginAccessingResources  (error: Error?) in
            if let error = error 
                onFailure(error as NSError)
                return
            
            onSuccess()
        
    

在 ViewController 中访问 ODR

// tagName is the name of the tag on the ODR related scnassets folder.

ODRManager.shared.requestSceneWith(tag: tagName, onSuccess: 
    DispatchQueue.main.async 
        self.game = self.gameFactory.createGame(...)
, onFailure:  (error) in
    self.threeSurfaceLabel.text = "Problem with downloading content. Make sure internet connection is working, and restart."
)

【问题讨论】:

请去编辑方案并进行从调试到发布的构建配置然后检查 有趣的是,这很有趣。请您解释一下,为什么? 绝对!请解释一下:)? 这是一个 hack,但绝对让我搜索这背后的原因。 【参考方案1】:

仔细查看错误消息后,您可以看到错误仅引用了 .DS_Store 文件。

.DS_Store 文件是查找器创建的隐藏文件,用于存储每个文件夹的演示设置。

解决方案是在构建之前删除项目子目录中的所有 .DS_Store 文件。

    关闭 Xcode 打开终端并 cd 到您的项目目录 键入查找。 -name '.DS_Store' -type f 删除 打开 Xcode,加载您的项目,清理、重建、存档并上传到 AppStore。

【讨论】:

【参考方案2】:

产品 -> 方案 -> 编辑方案

请去编辑方案并进行从调试到发布的构建配置,然后检查。请不要忘记在创建存档之前使用“command + option + shift + k”进行清理。

它将解决您的问题。

【讨论】:

以上是关于iOS 应用程序中的按需资源 AppStore 上传失败 - 不允许的路径的主要内容,如果未能解决你的问题,请参考以下文章

无法找到嵌入在应用程序包中的按需资源 [关闭]

如何在开发期间托管来自 xcode 的按需资源

未从 testflight 下载的按需资源

为啥我的按需资源仍处于正在下载...状态?

按需资源如何“离开捆绑包”并到达苹果服务器?

iOS 按需资源 - 仅按需下载。调试