根据文档,通过NSBundleResourceRequest下载的iOS 9按需资源仅在endAccessingResources
被调用之前保留,并且在取消分配资源请求对象时自动调用它.
好的,但是当应用程序终止时,所有内容都会被释放.那么这是否意味着使用NSBundleResourceRequest下载的资源在应用终止后无法生存?我希望使用一个简单的策略,通过不包含大量资源,然后下载它们,使我的应用程序更小,以便从App Store下载; 但如果我无法保留这些资源,那就行不通了.我是否希望将资源复制到其他地方并释放NSBundleResourceRequest?
最近我遇到了上传点播资源的问题.我使用Xcode 9.0将应用程序上传到AppStore,每次上传都成功完成.但是看看iTunes Connect构建细节,我可以看到,按需资源已启用,但此构建有0个资产包.
这个问题还有一个有趣的时刻.我的应用程序的内部版本3也使用按需资源上传,所有内容都适用于该版本.但是4号和5号版本没有包含资产包.我查看了应用程序中的更改 - 根本没有与按需资源相关的更改.
在Xcode-> Build Settings - > Assets - > Product Bundle中的Embed Asset Packs设置为No.此外,一个资产包的大小约为5MB,所有包的总大小约为150MB.
也许,有人也遇到过这个问题?谢谢.
更新 我已经检查了Xcode存档中的Product文件夹 - 有36个资产包,但iTunes Connect仍显示0包.
更新2 似乎,它不会发生一次.一年前开发人员遇到了同样的问题.我想,我们应该向Apple报告一个错误.
更新3 我们尝试使用Application Loader上传带有按需资源的应用程序,但结果是相同的.
更新4 我们尝试将代码恢复到版本,其中一切都按需资源运行良好,并将具有不同版本号的相同二进制文件上传到iTC,但结果是相同的.
更新5我们收到了Apple开发者技术支持(DTS)的回复
感谢您与Apple开发人员技术支持(DTS)联系.我们的工程师已审核了您的请求,并确定您遇到了一个已知问题,目前尚无已知的解决方法.
我将发布与此问题相关的任何更新.
是否有人构建了一个项目,该项目已Enable On Demand Resources
设置YES
为链接到该项目的框架。我正在处理的应用程序中的大多数目录资产都被保留并带入框架中的项目中,我遇到构建错误Target '<Framework/Bundle>Name' has on-demand resources enabled (ENABLE_ON_DEMAND_RESOURCES = YES), but it is not supported for framework target types.
并且无法编译项目。
我想了解现货实例和按需实例之间的区别。我知道这两者之间存在价格差异,但除此之外我想知道它们之间的差异。请帮我
amazon-ec2 amazon-web-services instancetype on-demand-resources spot-instances
按需资源(iOS)
按需资源是一种资源,例如图像和声音,您可以使用标记来标记关键字和组内请求.App Store托管Apple服务器上的资源并为您管理下载.按需资源可实现更快的下载速度和更小的应用程序大小,从而改善首次发布体验.例如,游戏应用可以将资源划分为游戏级别,并且仅当应用预期用户将移动到该级别时才请求下一级资源.同样,只有当用户购买相应的应用内购买时,应用才能请求应用内购买资源.
ODR对某些应用程序很有用,但这个新功能的向后兼容机制是什么.说实话,应用程序仅支持最新的iOS版本非常罕见.它最多只有两个版本.
我的理论是,旧版本可能会忽略整个ODR,让用户从商店下载应用程序的完整包.
有没有人有更多的信息可以澄清这个?
backwards-compatibility one-definition-rule ios ios9 on-demand-resources
使用Apple\xe2\x80\x99s点播资源(ODR)功能时,下载的资源是否有保护?有DRM功能吗?
\n下载的文件是否经过加密或以其他方式防止在 Mac 或 PC 上检查应用程序内容的人窥探?
\n我可以做些什么来对下载的资源进行复制保护吗?
\n使用此描述在iOS应用程序上使用ODR(按需资源)时遇到崩溃 -
因未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'NSBundleResourceRequest无法连接到其帮助程序守护程序
崩溃中常见的iOS版本 - 10.3.2
我在Crashlytics看到崩溃,并且无法在不调用私有方法的情况下在调试模式下重现此问题.我的ODR中包含图像和声音文件.附加堆栈跟踪屏幕截图 - ScreenShotofStackTrace
我也在-[NSBundleResourceRequest conditionallyBeginAccessingResourcesWithCompletionHandler:]
一个dispatch_after
街区内打电话.这可能是罪魁祸首吗?
任何线索将不胜感激!
从 iOS 9 开始,iOS 具有“按需资源”(ODR) 功能,允许 Apple 托管可以按需下载的资源,而不是将它们放在应用程序包中。通过使用资源标签标记资产,然后使用 anNSResourceBundleRequest
请求给定标签的资产,我们可以通过将不常用的资产保留在设备之外直到需要来减少我们的应用程序包大小。
遗憾的是,我只能让它与 Xcode 中应用程序目标中专门包含的资源一起使用。有时代码和资源不包含在应用程序目标中,而是包含在共享或外部框架中(例如,通过 Cocoapods 分发的库或用于跨 iOS、tvOS、watchOS、macOS 应用程序共享代码和资产的共享框架) )。理想情况下,由于这些框架最终会嵌入到您的应用程序目标中,Xcode 只需能够从嵌入的框架中提取资源并标记它们以供下载。
尽管这些框架目标在其项目文件中有“资源标签”部分,我们仍然可以在这些目标中配置资源标签,但在运行时,资源请求只会失败并显示NSBundleOnDemandResourceInvalidTagError
. 调试导航器中的“磁盘”窗格也不显示按需资源部分。
我找不到任何特别说明使用 ODR 是否可以使用外部框架的文档。有谁知道这是否可能,如果可能,如何实现?
我正在尝试在不使用xcassets的游戏中使用ODR.
所以,我有一个带有标签的纹理(例如"教程"),在项目设置中将其作为ODR并使用下面的代码获取它:
NSBundleResourceRequest *resourceRequest = [[NSBundleResourceRequest alloc] initWithTags:tags];
[resourceRequest conditionallyBeginAccessingResourcesWithCompletionHandler:^(BOOL resourcesAvailable) {
if (resourcesAvailable) {
// Upload the texture
}
else
{
[resourceRequest beginAccessingResourcesWithCompletionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Failed to load assets pack");
}
else
{
// Upload the texture
}
}];
}
}];
Run Code Online (Sandbox Code Playgroud)
主包不包含有问题的纹理(我在模拟器文件夹中查看了包).调用上面的代码后,XCode和日志报告它已成功下载并准备使用.
注释的// Upload the texture
位置我需要调用我的代码将纹理上传到视频内存,但问题是 - 我无法获得下载文件的确切位置.
有没有办法知道下载资产的位置?
我正在尝试为我的iOS应用程序实现按需资源下载.这些文件暗示了xcode可以在开发过程中为您托管资产包.我的问题是如何启用它?是否有另一种方法可以在开发期间测试按需资源下载."产品包中的嵌入资产包"构建设置是否相关?这里是docs:on demand docs中提到的xcode托管的地方
ios ×8
ios9 ×3
xcode ×3
swift ×2
amazon-ec2 ×1
app-thinning ×1
bundle ×1
cocoa-touch ×1
drm ×1
instancetype ×1
objective-c ×1
xcode7 ×1