Справочная информация:
Текущая версия моего приложения для продажи использует подстановочный идентификатор приложения, а идентификатор пакета прост и не соответствует соглашению com.companyname.appname
(это просто «имя приложения»). Идентификатор приложения, который он использует, просто имеет форму «bundleseed. *», В результате чего, как мне кажется, «bundleseed.appname» подписывается с помощью профиля обеспечения. (Почему? Потому что это приложение существует с ранних 2.x дней до того, как Apple рекомендовала явные идентификаторы приложений, и до того, как XCode ввел соглашение com.companyname.)
Я добавляю в приложение покупку в приложении, для которой требуется явный идентификатор приложения. Я следовал инструкциям в Технические вопросы и ответы QA1680 Обновление с подстановочного идентификатора приложения до явного идентификатора приложения . В результате у меня есть новый явный идентификатор приложения в форме «newbundleseed.appname», и новый профиль обеспечения, используемый для подписи приложения, указывает это. Идентификатор пакета в info.plist остался тем же «appname».
Проблема:
Когда я развертываю новое приложение из XCode поверх старой версии, оно работает нормально. Экземпляр приложения старой версии заменяется новым приложением, и все новые функции доступны. Однако, когда приложение отправляет SKProductsRequest, это приводит к пустому списку продуктов. Если я развертываю новое приложение как новую установку (не копируя поверх старой версии), тогда все работает как положено - SKProductsRequest приводит к полный список моих доступных продуктов.
Я также заметил, что обновленная сборка переносит некоторые аспекты старой версии, что странно для меня. В частности, старая версия приложения имела default.png, которого новое приложение еще не имеет в составе сборки, однако обновленное приложение отображает старый default.png во время загрузки. Как будто обновленное приложение - это слияние старого и нового.
Моя главная проблема заключается в том, чтобы покупка в приложении работала для моих пользователей с обновлением. Я что-то не так делаю с явным идентификатором приложения или это просто проблема из-за того, что я использую изолированную программную среду покупки в приложении? В каком случае я могу быть уверен, что он будет работать после выпуска?
Кроме того, есть ли понимание того, почему / как новое приложение, по-видимому, не полностью заменяет старый пакет приложений?
Единственное, о чем я могу думать, - это вместо того, чтобы генерировать новый начальный пакет (как подробно описано в QA1680), я должен был использовать старый начальный пакет при создании нового идентификатора приложения. то есть старый идентификатор приложения - «oldbundleseed. *», а мой текущий новый - «newbundleseed.appname», и, возможно, это должно быть «oldbundleseed.appname». Но я не могу этого сделать, потому что портал инициализации не позволяет мне создавать идентификатор приложения, который отличается только семенами пакета. Если это моя проблема, что делать? Связаться с Apple?
TL / DR: существующее приложение, обновленное с новым явным идентификатором приложения для поддержки IAP, работает нормально, за исключением того, что SKProductRequests приводит к пустым спискам продуктов при обновлении приложения по сравнению с чистой установкой, где они приводят к заполненному списку товаров.