One iOS app, multiple configurations

Exporting your IPA with multiple configurations is a great tool in the developer's hand: You can have only a single IPA exported two IPAs: one for AdHoc and one for AppStore several IPAs only slightly different from each other Cool, huh? 😎

Exporting your IPA with multiple configurations is a great tool in the developer's hand:

You can have

  • only a single IPA exported
  • two IPAs: one for AdHoc and one for AppStore
  • several IPAs only slightly different from each other

Cool, huh? 😎

Get a single IPA (for example: ad-hoc)

If you need a single IPA to be exported, that's easy as π! 😁

You should already have your project in a git repo that is added to Bitrise.io as an app and the required code signing provision profiles and certificate are uploaded. (Read more about codesigning here) Use the xcode-archive step: it will create the .xcarchive and it will be exported as a codesigned IPA as well in a single step.


    - [email protected]:
        inputs:
        - export_method: ad-hoc
Copy code


Export two IPAs (with multiple methods)

This is for you if you don't want to run builds multiple times and you know exactly what kinds of IPAs are needed, for example: one exported for ad-hoc and one for app-store. You can send out the ad-hoc version for testing and while it is being tested you have some time to prepare the app-store version in the App Store and as soon as the testing team sends the green light, you only need to click a button. - This is soo smooth 🙂

This is also pretty useful when you have a test and a production version of the app, because if you have the production one preloaded in the AppStore then you are only one click away from release if the test version has passed the tests.

Use the xcode-archive step: it will create the .xcarchive and it will be exported as a codesigned IPA as well. (For example: for ad-hoc) Then use the export-xcarchive step which will use the .xcarchive generated previously, so without a re-build it will export the IPA with the second chosen method. (For example: for app-store)

This scenario works only if you do not have any code (or other) changes in the project itself, only the signature is different.

    - [email protected]:
        inputs:
        - export_method: ad-hoc
    - [email protected]:
        inputs:
        - export_method: app-store
        - team_id: $TEAM_ID
Copy code


Get multiple variations of the same "base-code"

This is very useful if (let's say) you have an app with different icons for couple of countries (EN, DE, IT, RU, etc...) It is pretty easy to preload the affected Info.plist files (one for each of the actual icons), this you have to do only once and the rest can be automated easily.

Use the xcode-archive step in this case. It will create the .xcarchive and it will be exported as a codesigned IPA as well. (For example: for ad-hoc)

In this case you will need to use the xcode-archive step for each IPA as the project is changed and you will need a new .xcarchive to export your IPA again and again. In this example we have 3 ready made Info.plist files, and all we have to do is to replace them between xcode-archive steps so we will have 3 IPAs with different names and icons. 🙂


    - [email protected]:
        inputs:
        - export_method: ad-hoc
    - [email protected]:
        inputs:
        - content: |-
            #!/bin/bash
            set -ex

            #change configuration
            mv $BITRISE_SOURCE_DIR/myapp/Info.plist $BITRISE_SOURCE_DIR/myapp/Info_1.plist
            mv $BITRISE_SOURCE_DIR/myapp/Info_2.plist $BITRISE_SOURCE_DIR/myapp/Info.plist
    - [email protected]:
        inputs:
        - export_method: development
        - configuration: Debug
    - [email protected]:
        inputs:
        - content: |-
            #!/bin/bash
            set -ex

            #change configuration
            mv $BITRISE_SOURCE_DIR/myapp/Info.plist $BITRISE_SOURCE_DIR/myapp/Info_2.plist
            mv $BITRISE_SOURCE_DIR/myapp/Info_3.plist $BITRISE_SOURCE_DIR/myapp/Info.plist
    - [email protected]:
        inputs:
        - export_method: development
        - configuration: Debug
Copy code


Have you tried to use multiple configurations? Tell us how and what do you use them for?

Happy building! 🏢

No items found.
The Mobile DevOps Newsletter

Explore more topics

App Development

Learn how to optimize your mobile app deployment processes for iOS, Android, Flutter, ReactNative, and more

Bitrise & Community

Check out the latest from Bitrise and the community. Learn about the upcoming mobile events, employee spotlights, women in tech, and more

Bitrise Insights

Cache | Caching

Mobile App Releases

Learn how to release faster, better apps on the App Store, Google Play Store, Huawei AppGallery, and other app stores

Mobile DevOps

Learn Mobile DevOps best practices such as DevOps for iOS, Android, and industry-specific DevOps tips for mobile engineers

Mobile Testing & Security

Learn how to optimize mobile testing and security — from automated security checks to robust mobile testing and more.

Product Updates

Check out the latest product updates from Bitrise — Build Insights updates, product news, and more.

The Mobile DevOps Newsletter

Join 1000s of your peers. Sign up to receive Mobile DevOps tips, news, and best practice guides once every two weeks.