Submitting application to the Apple store from Delphi.

Today I wanted to submit my app to the Apple Store for my customer.

This is generally the procedure: http://docwiki.embarcadero.com/RADStudio/XE5/en/Deploying, but I got some problems.

It’s done via Application Loader that can be downloaded after registration at the https://itunesconnect.apple.com .

Application-loader-2-5-1

Unfortunately I got few errors after first upload:

ERROR ITMS-9000: “The bundle identifier cannot be changed from the current value, ‘PianoWizard’. If you want to change your bundle identifier, you will need to create a new application in iTunes Connect.” at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)

ERROR ITMS-9000: “This bundle is invalid. The application-identifier entitlement is missing; it should contain your 10-character Apple Developer ID, followed by a dot, followed by your bundle identifier.” at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)

ERROR ITMS-9000: “Invalid Launch Image – Your app contains a launch image with a size modifier that is only supported for apps built with the iOS 6.0 SDK or later.” at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)

ERROR ITMS-9000: “This bundle is invalid. Apple is not currently accepting applications built with this version of the SDK or Xcode.” at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)

Here is how I handled them:

First of all it took me a while to realize that I have custom .info.plist  (in my case it’s PianoWizard.nfo.plist).

The custom plist is needed in case you want to setup special privileges or change other settings. If you change the file at iOSDevice\Debug it got replaced every recompilation by file generated by Delphi and you loose your settings.

So first solution was to uncheck default plist from the deployment (Project  -> Deployment).

ScreenShot1

Now how I handled each of the problems:

 

ERROR ITMS-9000: “The bundle identifier cannot be changed from the current value, ‘PianoWizard’. If you want to change your bundle identifier, you will need to create a new application in iTunes Connect.” at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)

This is at the PianoWizard.info.plist – you must have at the CFBundleIdentifier your app name:

<key>CFBundleIdentifier</key>
 <string>PianoWizard</string>

 

My mistake, when I was playing with the settings.

 

ERROR ITMS-9000: “This bundle is invalid. The application-identifier entitlement is missing; it should contain your 10-character Apple Developer ID, followed by a dot, followed by your bundle identifier.” at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)

This is little bit tricky. First you need to set correctly the app Provisioning:

ScreenShot2

But that’s not enough. From some reason the file iOSDevice\Release\PianoWizard.entitlements has incorrect values.

I has to delete it and it got generated with correct values. It should look like this:

<plist version="1.0">
<dict>
 <key>application-identifier</key>
 <string>G795WLQ7ME.PianoWizard</string>
 <key>keychain-access-groups</key>
 <array>
 <string>G795WLQ7ME.PianoWizard</string>
 </array>
</dict>
</plist>

 

ERROR ITMS-9000: “Invalid Launch Image – Your app contains a launch image with a size modifier that is only supported for apps built with the iOS 6.0 SDK or later.” at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)

This was little but tricky. I changed the MinimumOSVersion to 6.0 at the PianoWizard.info.plist

<key>MinimumOSVersion</key>
 <string>6.0</string>

ERROR ITMS-9000: “This bundle is invalid. Apple is not currently accepting applications built with this version of the SDK or Xcode.” at SoftwareAssets/SoftwareAsset (MZItmspSoftwareAssetPackage)

Because I has custom PianoWizard.info.plist, originally copied from Debug folder it was missing this value:

<key>DTPlatformBuild</key>
 <string>11B508</string>
 <key>DTXcodeBuild</key>
 <string>5A3005</string>

 

Once I added that to my custom plist the app was ok.

After those changes those problems was handled.

I still have one problem with the certificates, but that will be handled soon.

3 comments

  1. RC says:

    Tohle je BTW dobry priklad prace navic, o ktere jsem mluvil v tom svem minulem postu. V Xcode kliknes Build, sumbit, vyreseno (auto-provisioning, auto sync certifikatu atd s itunes)

    • pjstrnad says:

      To mas pravdu.

      Ale je to jen kvuli pitomosti tech co psaly Delphi, kdyby to udelali poradne a neopakovali porad ty same chyby tak to nemusis takhle obchazet.

      Na druhou stranu je to jen rok starej produkt a je mi jasne ze do toho nedokazou nalejt ty same prachy co Apple nebo Microsoft.

      Ted jsem zkompiloval tu appku co jsem delal pro iPhone na Android a funguje – jen tam musim linknout MIDI knihovnu pro Android, ale uz to vypada ze jede.

    • pjstrnad says:

      Jinak jeste pro mne jedna zasadni vec. V Xcode jsem nedelal ale psal jsem nejake applikace na Android a je to strasne pomale. Code HotSwap nefunguje takze kazda zmena pozaduje kill, compilace, deploy a novy test.

      V delphi muzes vyvijet pod windows a kdyz si to tam odladis tak teprv ladit na zarizeni (Emulator je nepouzitelnej).

      Nevim jak ty, ale u mne je to tak 50% vyvoje kdyz neco spustim, opravim, spustim, opravim, … a tohle je zasadni zrychleni. Obvzlast kdyz je aplikace vetsi a deploy trva 1-2 minuty.

      A to nemluvim o tom ze ne vzdy se povede, takze se musi delat znova.

Leave a Reply

Your email address will not be published. Required fields are marked *