How to force downgrade of iOS app without doing uninstall - ios

iTunes will not sync an app with the same or lower version, which is (somewhat) good for users, but it is a PITA for developers. (When possible, I develop apps to be backwards/forwards/sidewards compatible so any version will work with any data.)
I am developing Enterprise applications, with different editions of the same version number.
I frequently wish to test apps with the same or lower versions without having to uninstall and then have to recreate data. I want to be able to install arbitrary versions of *.ipa files without having to uninstall the app from the device.
Is there any way to force iTunes to install the same or lower version *.ipa files over the app on the device?
I could use XCode, but it is not entirely convenient to check-out the previous version, build, and install, when I have the *.ipa file sitting right there.
I have looked at iPhone Configuration Utility, but it also seems to require an uninstall.
Matt

you can export/import data from any version of your app out/into any other version using the organizer window in Xcode 4.2. So what I normally do is export the data from version n+1 then drag/drop the .app bundle for version n into the organizer window. Xcode will overwrite version n+1 with version N. you can then import the data from version n+1 that you exported earlier.

Related

How to install previous version of an ios app?

I've developed an ios app, but now I got some crash reports which says that the app is crashing only when updated from a previous version and it goes away when uninstalling and then reinstalling that app altogether.
So I decided to reproduce the crash by going back to the older version doing some stuff and then updating it back to the latest build.
The thing is reverting back to an old commit for a switching back to the older version of the app is causing quite a lot of issues and errors which I'm unable to resolve as of now. So is there any way besides this to install the older version of the app.
I'm using Xcode 8 and Swift 4, while the previous version was built on Swift 2.3 and an older Xcode, my Testflight app only has the latest builds while there is nothing backed up on iTunes too.
The thing is reverting back to an old commit for a switching back to the older version of the app is causing quite a lot of issues and errors which I'm unable to resolve as of now
Ah, but that's not how to do it. What you want to do is not recompile the old version from source; you want the already compiled old version as an actual app. That is exactly what the archive is for! The reason we keep archives is so as to have the exact same already compiled code that has been distributed thru the store.
So just go to the Organizer window, find your old archive, and export it as an Ad Hoc build. Now you can install that on your device through the Devices window, play around with it, and then install the new version on top of it and run that and (one hopes) reproduce the problem.
A crash like this is almost always caused by data that is no longer compatible from the first version of the app.
If you don't have access to the compiled binary and don't have a way to re-install it, then your best bet is to install an old version of Xcode to install the old version of the app, and then use the new version of Xcode to install the new version of the app over it.
You may run into issues with the old version of Xcode not supporting your newer iOS version on your device. In that case, use the old version of Xcode to install the app to the simulator. Then in Xcode you open Window -> Devices and Simulators. You can download the sandbox folder for your app from the device and then copy over the exact files to a device with the new version of the app. Then when you run the new app you should be able to reproduce the issue.

How should we set up distribution of iOS app to allow regression testing in future?

We do all of our iOS app beta and normal distribution through iTunesConnect. However, there are times that we want to install an older version of our app on a device so that we can test a database migration or older API communication.
Older versions on iTunesConnect expire after 60 days, but we may want to install a version several months old.
Do we have to set up a parallel distribution of our app to Fabric so we can go back to the previous versions? Is there a better way?
If you use git, you can create a tag at the commit that is the one that was released as version x.
Next time you want to install it, you can checkout that tag, and run it on your device. If you need people installing it without Xcode, you have to create n (internal) website where your testers can download the .ipa and install it on their i-devices.

Run release and beta version of XCode

I am wondering how to handle running two versions of xcode on a mac, or if it is even possible.
I currently have a number of production apps that I service with the release xcode7. I must have this available for uploading app versions to the app store.
I also have a ipod touch device I have the ios9.1 beta running, and want to test and write code for the new os.
However, xcode7 says I can't test ios 9.1 beta, that I have to install xcode beta. Also, I've read that you can't push apps to the app store with the beta. So how can you maintain current apps, as well as, build new functionality?
Maybe I have missed something? some setting that allows me to toggle between these xcodes? or will the mac allow me to have two different versions of XCode installed? I assumed it would just override the other.
I don't want to buy another mac, or to partition the one I have, or keep downloading and installing different versions on all the devices, if I don't have to.
Any information would be helpful, how does everyone else handle this?
You simply need to rename them in /Applications; for example:
Xcode 6.4: /Applications/Xcode6.app
Xcode 7.0: /Applications/Xcode7.app
Xcode 7.1 beta: /Application/Xcode-beta.app (the default anyway).
They will co-exist perfectly happily, however if you do command line builds, you'll want to use xcode-select to select the version you want to use when using xcodebuild or clang, etc.
The betas generally come with the name Xcode-beta.app (this is true for the iOS 9.1 beta), so you can just download it and copy it to the /Applications folder as usual.
In the rare cases where that's not true, you can just rename Xcode.
You can install both versions. They will happily co-exist in your /Applications folder. One will be called Xcode, the other will be called Xcode-Beta

Different Xcode versions and jailbroken devices

Is it possible to have an Xcode version installed and set up for apps ad hoc distribution, with distribution certificate and provisioning profile and so on, and at the same time to install another Xcode version and patch it with JailCoder or avoid codesigning apps built by that Xcode? I mean, without interfering with the settings of the former Xcode version.
I'd like to test deployment on jailbroken devices but keeping an Xcode with the settings needed for that purpose separately.
Thanks!
you can install multiple versions of xcode on your computer if you want the same version installed twice... then you will have to change the name of it so your computer doesn't recognize you as having it and will create a new one... or you can copy paste it ... either way yes, you can have multiple versions ...
Yes, you can always install multiple versions of Xcode on one machine by simply choosing a different install location during the installation process (do not accept the default installation location for the second version).
Disabling the requirement to code sign iOS apps is done by modifying a .plist file, that's nested under the install directory for Xcode. For example, the default location (adjusting for SDK version) is:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/SDKSettings.plist
So, changing this file to modify one Xcode install will have no effect on the other.

Running Xcode 4.01 and 4.2 on the same computer?

I am currently running Xcode 4.02 to develop my production products for release to the AppStore. My normal dev system is an i7 iMac and I also use a MBP when away from my office. I want to start testing development for iOS 5 so have downloaded the Xcode 4.2 package and iOS 5 beta and first plan to install it on a my only other Mac, an original MBA that I know from experience of developing on it in a pinch (when my traveling MPB was down and had the MBA sent to me) will be pretty (actually, really) slow.
Preferring of course to have a fast dev system, my question is, can I safely install the Xcode 4.2 developer preview and the iOS 5 beta on my iMac and/or MBP without screwing up my production development environment? I see from the 4.2 release notes that "You can have multiple versions of the Xcode toolset installed.", I assume by installing Xcode 4.2 in a different -Xcode- directory. What make me wary is that the release notes also state that "NOTE: Only one version of the System Tools ... can be installed on a computer at a time. The last installed set of these components replaces any previously installed set."
So is it a good or bad idea to have both Xcode installs on the same computer at the same time or should I stick with installing 4.2 on a different machine and if I really need to have a more powerful system, consider getting a newer box?
You are right, you just need to install in a different directory. Developer is the default, you just need to change it.
As for the System Tools, as far as I know they don't interfere in you ability to release apps to the AppStore. Still, you can uncheck them when installing and Xcode 4.2 will use Xcode 4.0 System Tools without problem (that's what I have right now).

Resources