更新的应用程序与新的显式应用程序ID,应用程序内购买。 SKProductsRequest返回产品的空清单

背景:

当前的待售版本的我的应用程序使用通配符应用程序ID,并且包ID很简单,不符合com.companyname.appname约定(它只是'appname')。 它使用的应用程序标识只是“bundleseed。*”forms,我相信在使用configuration文件进行签名时会导致“bundleseed.appname”。 (为什么?因为这个应用程序自苹果公司推荐显式应用程序ID之前2.x天开始,XCode引入了com.companyname约定之前)。

我在应用程序中添加应用程序内购买,这需要一个明确的应用程序ID。 我已按照技术问答QA1680中的说明从通配符应用程序ID更新为显式应用程序ID 。 结果是,我有一个新的显式应用程序ID的forms“newbundleseed.appname”,新的供应configuration文件用于签署应用程序指定了这一点。 info.plist中的包ID保持相同的“appname”。

问题:

当我从旧版本的顶部部署新的应用程序从XCode它看起来工作正常。 旧版应用程序实例被replace为新的应用程序,并且所有新function都已到位。 但是,当应用程序提交SKProductsRequest时,会产生一个空的产品列表。 如果我将新应用程序部署为全新安装(而不是复制旧版本),则一切按预期工作 – SKProductsRequest将生成完整的可用产品列表。

我也注意到,升级后的版本inheritance了旧版本的一些方面,这对我来说很陌生。 具体来说,旧版本的应用程序有一个default.png,新的应用程序还没有作为构build的一部分,但升级后的应用程序在加载时显示旧的default.png。 这就好像升级的应用程序是旧的和新的合并。

我主要关心的是,应用内购买将适用于我的升级用户。 我是否在显式应用程序ID方面做了错误的事情,或者这只是一个问题,因为我正在使用In App Purchase沙箱? 在这种情况下,我可以相信它会在发布时工作吗?

此外,任何洞察力为什么/如何新的应用程序不会看起来完全replace旧的应用程序包?

我唯一能想到的是,不是生成一个新的捆绑种子(详见QA1680),我应该在创build新的App ID时使用旧的捆绑种子。 即旧的应用程序ID是“oldbundleseed。*”,我目前的新的是“newbundleseed.appname”,也许它应该是“oldbundleseed.appname”。 但我不能这样做,因为configuration门户不会让我创build一个只有捆绑种子不同的应用程序ID。 如果这是我的问题,该怎么办? 联系苹果?

TL / DR:一个现有的应用程序,使用新的显式应用程序ID来更新以支持IAP,除了SKProductRequests在应用程序升级时产生空的产品列表而不是产品清单时,它们会产生一个已填充的产品列表。

你怎么做升级? 如果你正在做一个构build和运行,你将最终遇到这个问题,应用程序没有完全重写。 Xcode做了一些“优化”的决定,只复制真正改变了的文件,并把它弄乱了。

创build一个adhoc发行版,并将其下载到具有旧版本应用程序的设备上。 检查是否adhoc生成正确枚举它。

你是否实现了请求:didFailWithError:委托方法? 它是SKProductsRequestDelegate协议符合的SKRequestDelegate协议的一部分。

我必须同意StoreKit没有充分的文档logging。 根据我的经验,如果iOS使用不同的appID查看同一个应用程序,则performance得好像是两个不同的应用程序,而不是覆盖(或部分覆盖)具有相同标题的应用程序。 不过,如果您的开发设备是越狱版本:启动应用程序(处于问题状态),ssh进入您的设备,运行launchctl list ,看看iOS如何在结果列表中标识您的应用程序。