How to update hosted content with Xcode9?

Application Loader 3.7 no longer supports in-app purchase delivery.

http://help.apple.com/itc/apploader/#/apdS73193199


I have an app in the store that has IAP's with Apple-hosted content. Does anyone know the process now for updating the hosted content?

Accepted Reply

We have the same issue. After the update to Application Loader, we would have expected some kind of content replacement functionality in iTunes Connect, but iTC doesn't seem to have functionality for uploading content in the first place, let alone updating it.


The only lead is in the link you already posted - XML delivery. It seems we must use Apple's Transporter command line tool to deliver this content / metadata.


https://help.apple.com/itc/transporteruserguide/#/itc0d5b535bf


I have no experience of this yet, so it looks like it's time to read up and figure it out. To be honest, I'm kind of blown away at how poorly this transition was handled given the ramifications for developers who may have been heavily reliant on Application Loader. Fair enough, I'm sure XML delivery is a viable alternative, but some kind of specific help, not to mention forewarning, would have been merited in my opinion. Leaving us to scrabble around in the revision history of documentation for a piece of software that no longer supports the function we rely on, in the aftermath of making the change, is less than adequate. Perhaps I missed something obvious?


UPDATE:


I have now successfully updated an in-app purchase's hosted content using the command line transporter tool.


You can install Transporter separately to XCode / Application Loader. I prefer to do this if I'm forced to use it separately as I find it cleaner and easier to update. You can find the instructions here:

https://help.apple.com/itc/transporteruserguide/#/apdAbeb95d60


An example workflow for updating an existing in-app purchase's content would be thus:


Step 1 : Get the existing metadata for the in app purchase:


iTMSTransporter -m lookupMetadata -u "$ITC_USERNAME" -p "$ITC_PASSWORD" -destination "$DOWNLOAD_PATH" -vendor_id "$ITC_PRODUCT_PARENT_ID" -subitemids "$ITC_PRODUCT_ID" -subitemtype InAppPurchase


Step 2 : Update your local copy of the metadata


  • Use Xcode to archive your new IAP content into a .pkg file ("Installer") as you normally would.
  • Drag the new .pkg file you archived into the .itmsp directory the previous generated in Step 1.
  • Within the .itmsp is a meta data XML file. Update the size and md5 checksum in the region of the xml file which carries that information. The md5 checksum for your .pkg is obtainable by opening terminal and typing "md5" then dragging and dropping the .pkg into terminal and pressing enter.


Step 3 : Verify the .itmsp package

iTMSTransporter -m verify -u "$ITC_USERNAME" -p "$ITC_PASSWORD" -f "$ITMSP_PATH"

Step 4 : Upload (assuming verification was successful)

iTMSTransporter -m upload -u "$ITC_USERNAME" -p "$ITC_PASSWORD" -f "$ITMSP_PATH"


This workflow was taken/adapted from the following website, which is extremely helpful and carries other relevant information you may want:


cyrilchandelier dot com / having-fun-with-itmstransporter


Best of luck!

Replies

We have the same issue. After the update to Application Loader, we would have expected some kind of content replacement functionality in iTunes Connect, but iTC doesn't seem to have functionality for uploading content in the first place, let alone updating it.


The only lead is in the link you already posted - XML delivery. It seems we must use Apple's Transporter command line tool to deliver this content / metadata.


https://help.apple.com/itc/transporteruserguide/#/itc0d5b535bf


I have no experience of this yet, so it looks like it's time to read up and figure it out. To be honest, I'm kind of blown away at how poorly this transition was handled given the ramifications for developers who may have been heavily reliant on Application Loader. Fair enough, I'm sure XML delivery is a viable alternative, but some kind of specific help, not to mention forewarning, would have been merited in my opinion. Leaving us to scrabble around in the revision history of documentation for a piece of software that no longer supports the function we rely on, in the aftermath of making the change, is less than adequate. Perhaps I missed something obvious?


UPDATE:


I have now successfully updated an in-app purchase's hosted content using the command line transporter tool.


You can install Transporter separately to XCode / Application Loader. I prefer to do this if I'm forced to use it separately as I find it cleaner and easier to update. You can find the instructions here:

https://help.apple.com/itc/transporteruserguide/#/apdAbeb95d60


An example workflow for updating an existing in-app purchase's content would be thus:


Step 1 : Get the existing metadata for the in app purchase:


iTMSTransporter -m lookupMetadata -u "$ITC_USERNAME" -p "$ITC_PASSWORD" -destination "$DOWNLOAD_PATH" -vendor_id "$ITC_PRODUCT_PARENT_ID" -subitemids "$ITC_PRODUCT_ID" -subitemtype InAppPurchase


Step 2 : Update your local copy of the metadata


  • Use Xcode to archive your new IAP content into a .pkg file ("Installer") as you normally would.
  • Drag the new .pkg file you archived into the .itmsp directory the previous generated in Step 1.
  • Within the .itmsp is a meta data XML file. Update the size and md5 checksum in the region of the xml file which carries that information. The md5 checksum for your .pkg is obtainable by opening terminal and typing "md5" then dragging and dropping the .pkg into terminal and pressing enter.


Step 3 : Verify the .itmsp package

iTMSTransporter -m verify -u "$ITC_USERNAME" -p "$ITC_PASSWORD" -f "$ITMSP_PATH"

Step 4 : Upload (assuming verification was successful)

iTMSTransporter -m upload -u "$ITC_USERNAME" -p "$ITC_PASSWORD" -f "$ITMSP_PATH"


This workflow was taken/adapted from the following website, which is extremely helpful and carries other relevant information you may want:


cyrilchandelier dot com / having-fun-with-itmstransporter


Best of luck!

Hey great work Alex. I looked at XML delivery and thought, surely not!


> I'm kind of blown away at how poorly this transition


I tried DTS and they referred me to ITC support, but after several rounds of email haven't got someone who undertsands the problem...


Years ago you used to be upload the content directly from Organiser, but that broke. I tried that but got "The archive contains nothing that can be signed.", so still broken I guess.

VERY GOOD Alex. This post saved me tons of hours!!!


Just to remind subsequent readers that

- First to create an IAP sample in ITC, then follow the steps indicated by Alex. The values of environment variables are as follows:

- $ITC_USERNAME is your developer ID to login to ITC

- $ITC_PASSWORD is your password of the developer ID

- $DOWNLOAD_PATH is where you want to download the xml of the created IAP sample

- $ITC_PRODUCT_PARENT_ID is the your app SKU

- $ITC_PRODUCT_ID is the IAP sample product ID

- $ITMSP_PATH can be == $DOWNLOAD_PATH if you modify metadata.xml in the download directory.

Xcode 9.2 supports uploading IAP content. For details, see Xcode help topic "Upload in-app purchase content". It was easy and worked as documented.

When I try the way the Xcode documentation states I get an error after I select the Team for the in-app content upload. The error states:



No application records were found.

In-app purchase content must be ready for upload on iTunes Connect before it can be validated or submitted from within Xcode.



I have created the in-app purchaes for the app ID and I have turned on content hosting. In fact, prior to Application Loader having its upload capability removed I had previously uploaded content to this in-app purchase.

I had the same issue. And resove it by changing Product Name from ContentInfo.plist to Display Name from iTunesConnect -> Features -> In-App Purchases -> <Your_In_App>

Try to check if you have signed contract for paid apps in iTunes Connect. Seems it must be done before you could upload hosted content, that helped me.

This unfortunately was not my case. I have all contracts up to date and I'm still receiving the same error as tspinelli. My IAP ID matches the one I have on iTunes Connect.

Were you able to solve this?

I have the same issue. Is there any solution?