Storing/loading 来自应用内购买的 PNG
Storing/loading PNGs from In App Purchase
我正在为我的应用程序开发 IAP。我能够创建 IAP 包,上传到 iTunes Connect 并从 App Store 沙箱下载到我的应用程序,然后阅读内容。不过,我仍然不清楚的是,在哪里最有效地将 IAP 的内容复制到 store/load 它们。
IAP 包的内容是一组 PNG,用户可以在使用应用程序时使用它们来自定义外观。用户通过应用程序本身获得一组默认的 PNG。
这导致了几个问题:
存储来自 IAP 的 PNG 的首选位置在哪里?一些教程推荐NSDocumentDirectory,而另一些教程推荐NSApplicationSupportDirectory。两者相比有什么优势?
如何加载 PNG 而不必跟踪哪些在主包中,哪些在 IAP 目录中?例如,主应用程序包中的默认 PNG 可以加载为:
UIImage *newHat = [UIImage imageNamed:@"fancyHat.png"];
虽然必须像这样加载来自 IAP 的 PNG(假设我已将它们复制到文档目录):
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *inAppImagePath = [documentsDirectory stringByAppendingPathComponent:@"iapTopHat.png"];
UIImage *newHat = [UIImage imageWithContentsOfFile:inAppImagePath];
是否可以协调这些,这样我就不必跟踪哪些 PNG 是 IAP,哪些在主包中,然后使用两种不同的方法加载它们?
理想情况下,我可以将 PNG 复制到主应用程序包中,这样我就可以使用 UIImage imageNamed:
。但这似乎是不允许的,也不是首选。
非常感谢任何帮助或指导。
这里是 Apple 建议的数据存储位置的良好开端:https://developer.apple.com/icloud/documentation/data-storage/index.html
您有多种选择来深入了解捆绑内容和购买内容。在您的示例中,您的图像名称以可用于区分内容类别的内容为前缀,因此您可以使用它来确定要使用的加载机制。您可以反转您在 post 中考虑的方法,即首先检查捆绑包中是否存在资产(无论名称),如果未找到,则从那里或购买的位置加载。如果你想统一集合 "on disk",你也可以在包中创建符号链接,但是这个更棘手,因为你需要确保你的符号链接在基本应用程序 UUID 更改时得到更新(它会而且经常发生) ) 在开发过程中。
我正在为我的应用程序开发 IAP。我能够创建 IAP 包,上传到 iTunes Connect 并从 App Store 沙箱下载到我的应用程序,然后阅读内容。不过,我仍然不清楚的是,在哪里最有效地将 IAP 的内容复制到 store/load 它们。
IAP 包的内容是一组 PNG,用户可以在使用应用程序时使用它们来自定义外观。用户通过应用程序本身获得一组默认的 PNG。
这导致了几个问题:
存储来自 IAP 的 PNG 的首选位置在哪里?一些教程推荐NSDocumentDirectory,而另一些教程推荐NSApplicationSupportDirectory。两者相比有什么优势?
如何加载 PNG 而不必跟踪哪些在主包中,哪些在 IAP 目录中?例如,主应用程序包中的默认 PNG 可以加载为:
UIImage *newHat = [UIImage imageNamed:@"fancyHat.png"];
虽然必须像这样加载来自 IAP 的 PNG(假设我已将它们复制到文档目录):
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *inAppImagePath = [documentsDirectory stringByAppendingPathComponent:@"iapTopHat.png"]; UIImage *newHat = [UIImage imageWithContentsOfFile:inAppImagePath];
是否可以协调这些,这样我就不必跟踪哪些 PNG 是 IAP,哪些在主包中,然后使用两种不同的方法加载它们?
理想情况下,我可以将 PNG 复制到主应用程序包中,这样我就可以使用 UIImage imageNamed:
。但这似乎是不允许的,也不是首选。
非常感谢任何帮助或指导。
这里是 Apple 建议的数据存储位置的良好开端:https://developer.apple.com/icloud/documentation/data-storage/index.html
您有多种选择来深入了解捆绑内容和购买内容。在您的示例中,您的图像名称以可用于区分内容类别的内容为前缀,因此您可以使用它来确定要使用的加载机制。您可以反转您在 post 中考虑的方法,即首先检查捆绑包中是否存在资产(无论名称),如果未找到,则从那里或购买的位置加载。如果你想统一集合 "on disk",你也可以在包中创建符号链接,但是这个更棘手,因为你需要确保你的符号链接在基本应用程序 UUID 更改时得到更新(它会而且经常发生) ) 在开发过程中。