Change App Version with Only IPA File Provided (No Xcode)

Change app Version with only IPA file provided (no xcode)

  • Rename the .ipa to .zip, and unzip the archive.
  • Inside should be a folder called "payload", and inside that folder should be your application archive.
  • Right-click the application archive, and choose "show package contents."
  • Find the Info.plist file (either named "Info.plist" or "AppName_Info.plist"). Open that file with a text editor
  • Change the value of "CFBundleVersion" and "CFBundleShortVersionString" to your desired version number.
  • Re-zip the archive
  • Rename the .zip to .ipa
  • Re-sign the .ipa

Set iOS Version for App Store submission (without Xcode!!!)

Okay, it took a while but I succeeded last week to submit my program using the Application Loader and without Xcode. The problem was a bunch of undocumented keys, that I reverse engineerd from XCode-built projects. For everyone, who wants to accomplish a similar thing, here the changed Info.plist that worked for me:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

New magic key with version string of the used OS. I do not know how to generate this string, this is the one Xcode wrote in another plist and I copied it.

    <key>BuildMachineOSBuild</key>
<string>11G63b</string>

.

    <key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>Drone game</string>
<key>CFBundleExecutable</key>
<string>game</string>
<key>CFBundleIconFiles</key>
<array>
<string>icon.png</string>
<string>icon@2x.png</string>
<string>icon-iPad.png</string>
</array>
<key>CFBundleIdentifier</key>
<string>[The bundle identifer]</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>NSHumanReadableCopyright</key>
<string>[Copyright notice]</string>
<key>CFBundleIconFile</key>
<string>icon.png</string>
<key>CFBundleName</key>
<string>Drone game</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>

Here the real magic. Again some key that are documented nowhere, however, given the error message in the problem desciption, I suspect the keys DTSDKName and DTSDKBuild to be particulary important. Well yeah, but again version strings for Xcode (why does apple want to know that?) and the iphone; once again, I do not know how to generate these.

    <key>DTCompiler</key>
<string></string>
<key>DTPlatformBuild</key>
<string>10B141</string>
<key>DTPlatformName</key>
<string>iphoneos</string>
<key>DTPlatformVersion</key>
<string>6.1</string>
<key>DTSDKBuild</key>
<string>10B141</string>
<key>DTSDKName</key>
<string>iphoneos6.1</string>
<key>DTXcode</key>
<string>0460</string>
<key>DTXcodeBuild</key>
<string>4H127</string>

Also changed this one, I think this is a copy-paste artifact since I cannot remember changing it....

    <key>CFBundleSignature</key>
<string>ASDR</string>

.

    <key>CFBundleVersion</key>
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSMainNibFile</key>
<string>MainView</string>
<key>CFBundleResourceSpecification</key>
<string>ResourceRules.plist</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIApplicationExitsOnSuspend</key>
<true/>
<key>UIStatusBarHidden</key>
<true/>
<key>LSApplicationCategoryType</key>
<string></string>
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

Changed to old version, seemingly not resposible for the rejection by the Application Loader and 5.0 is correct anyway

    <key>MinimumOSVersion</key>
<string>5.0</string>

.

    <key>UILaunchImageFile</key>
<string>Default.png</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
</array>
</dict>
</plist>

Bundling

Finally, assuming you can compile a valid ".app"-directory, you need to generate a bundle from this (check by try to execute the ".app"-directory on the simulator using ios-sim or to deploy it on your phone using fruitstrap - great tools!). I chose an ipa-bundle. I used the following script to generate it from the .app-directory:

#!/bin/bash
cp embedded.mobileprovision [.app directory]
codesign --force --sign "[Distribution Key Identifer]" --entitlements Entitlements.plist [.app directory]
cd [.app directory]
ln -s _CodeSignature/CodeResources CodeResources
cd ..
/usr/bin/xcrun -verbose -log -sdk iphoneos PackageApplication -v [.app directory] -o "$(pwd)/[bundle name].ipa" --sign "[Distribution Key Identifer]" --embed embedded.mobileprovision

embedded.mobileprovision is the the distribution provisioning profile you download from Apple's Mobile Provisioning Centre. Just copy-paste it in your .app directory.

[Distribution Key Identifer] is the identifier of your distribution signature from your keycahin.

Note, that code signing is executed twice, once as part of "PackageApplication" and once invoked manually. Clearly, I do not know what is required to build a valid .ipa, but this worked. Feel free to improve on this by stripping unnecessary steps.

Hope this will help someone who tries to achieve something similar, cheers!

distribute version only with iPA file

No, impossible. New version -> new compilation -> need source code.

Is it possible to add content into ipa file?

Is it possible to add content in ipa and rebuilt it for device?

No. From your comment above, you're looking to modify the application itself by adding view controllers. That would require rebuilding the application, and you'd need the source code for the app for that, not the .ipa file.

It is possible to modify resource files in the archive and then re-sign the .ipa file, so you could change an icon, replace images, etc. But adding view controllers is different because they need to be compiled and linked with the rest of the application code.

How to build an IPA without signing in Xcode 8

I ended up finding a working solution for xcode 8. Here is the step by step

  1. (Optional) Change build location

Xcode>preferences>locations>derived data>custom>your desktop


  1. Open Terminal and navigate to the project's folder
  2. Run manual build: xcodebuild -workspace (or -project) [workspacename.xcworkspace] -scheme [Schemename] -sdk iphoneos -configuration Release CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
  3. Open the location from Step 1 (derived data) and navigate to >your app>build>products>Release-iphoneOS
  4. Copy the .app file into a new subfolder named Payload (this folder name is case sensitive and much match verbatim)
  5. Compress Payload folder and rename it to app_name-version_number.ipa

Boom. Done.

Multiple IPA files are generated for a sliced version of app in new Xcode

With older Xcodes (10.1) I still get only one thinned IPA file as expected

So let’s ask ourselves: what happened in Xcode 10.2? Answer: ABI stability! So the app can be thinned in two different ways, depending whether the target device has Swift built into the system frameworks or not. And you can tell the difference; one thinned app will be larger because it contains the Swift frameworks.

My Developer Quit, How to Edit and continue development on an ipa file (Half Built iOS App)

You cannot do anything with an IPA file, it is the compiled version of your project. You need the source code to continue any development.

Maybe you can find a way to deassemble an IPA file, but it is an extreme case and I don't know how to do it.



Related Topics



Leave a reply



Submit