iOS - Is it posible to reuse bundle id on the same account? - ios

Here's a case:
My app uses Private Apple Distribution Method and is available on Apple Business Manager.
However, I want to make app publicly available on the App Store.
Is there a way to do this without changing app's bundle id?
I have some dependencies using the current bundle id so I would have to change licences for those dependencies, which I'm trying to avoid.
One option I considered is to remove the app and create a new one with the same bundle id on the same account, basically to reuse the bundle id.
Is this possible? If not, what are my options?

Related

Maintain same Apple App Prefix and Bundle Identifier for B2B and AppStore apps?

We have an existing AppStore app and we also want to create a version of the app that our clients can distribute through their MDMs without re-signing it. The main reason they want to use an MDM is so they can control when they upgrade to new versions of our app irregardless of their App Store upgrades.
We've successfully done that using a second Apple Enterprise account but that app has a different App Prefix and Bundle Identifier and so the deeplinks we've configured through our Branch.io no longer work because we have to to specify the App Prefix and Bundle Identifier in the Branch configuration. The Branch configuration allows multiple Bundle Identifiers but only one App Prefix.
Ideally, we can have one deeplink for both the App Store and MDM versions of the app.
If we join the Apple B2B program, can we:
Give them an app through the B2B program with the same App Prefix as the App Store and signed as an App Store app
That they can use with their MDM without them having to re-sign it
That they can choose to update whenever they want (or at least on a different schedule than App Store)
And it will have the same Apple App Prefix and Bundle Identifier?
The bundle id is the app. You cannot have the same bundle id for an App Store app and a custom app, as then you would have two apps with the same bundle id.
Custom B2B apps are still distributed through App Store Connect: an app is either a custom app or an App Store app. It can't be both at the same time.
All of the apps you publish under a particular developer program membership have the same app prefix.
So, you can publish two different versions of your app, one public and one custom, with different bundle ids, but they will have the same app prefix.
The only problem you would have is if a user had both the public and private apps on their device; which one is launched to handle the deep link isn't defined, it presumably your client would use their MDM to manage this.

Transfer issue an IOS app from one developer account to another. If I delete from one account and create another, update possible?

I have an IOS app and bundle id with "org.application.ios". I wanted to transfer an app to another account. There is an issue with plugins used so unable to transfer the same.
So planning to delete from one developer account and create the app with same name and bundle id. Is it possible that existing users will get update for the new app uploaded.
#ios #developer.
No, you can't re-use the bundle id from another account.
As per App Store Connect help
If you remove an app, you will lose ownership of the app name. Removed
apps can only be restored if the name is not currently in use by
another developer account. In addition, the SKU can’t be reused in the
same organization and if you’ve uploaded a build, your bundle ID can’t
be reused.
You’ll need to contact Apple. If you want the same app (so that updates work) apple must move the app to another developer account, you can’t do that yourself.

Transition from iphone app store to enterprise development

I have an app published on the AppStore and I want to migrate it to an enterprise developer account for in-house distribution. I read in the enterprise documentation that:
If you want users to keep the app’s data stored on their device, make sure the new version uses the same bundle-identifier as the one it’s replacing, and tell users not to delete their old version before installing the new one. The new version will replace the old one and keep data stored on the device, if the bundle-identifiers match.
Now, assuming we keep the Bundle ID the same between the AppStore binary already installed and the enterprise binary signed with a different certificate... it should overwrite the same app on their phone rather than create a second app.
I contacted Apple support and they said "No, you will have 2 apps installed if you do not instruct the clients to uninstall their old one". Is this true?
EDIT: I'm leaving my original answer below for conversations sake as there is good dialogue below. As #mja noted when you initially create an app ID it is associated with one of a few available prefixes to your developer portal and that prefix may be used by iOS to associate & differentiate between apps.
EDIT2: When I go into my Enterprise Portal and try to create an app ID with an identical value to an existing app ID but with a different prefix it still blows up on me and says:
An App ID with Identifier 'com.mycompany.myapp' is not available.
Please enter a different string.
ORIGINAL Answer:
The latter part is incorrect - iOS devices use the Bundle Identifier to differentiate between apps. I can have 20 apps labeled "Cool App" on the same iOS device so long as they have unique bundle identifiers such as com.mycompany.coolapp.1 - com.mycompany.coolapp.20. Likewise (and I've done this accidentally) if I open two projects, both of which have bundle identifiers com.mycompany.myapp, and run one right after the other the last app to be run will be installed on the device whereas the previous app will be overwritten.
Regarding the app data sustaining itself I have not tested that though I'd be interested in what happens for you!
I have managed to achieve this, so that the 'enterprise' build of the app overwrites an 'app store' distributed version.
This does not use the exact same bundle ID but does achieve what OP asked in his original question.
How I did this was, in my enterprise account, create a wildcard bundle identifier with the first two parts the same as the bundle identifier for our production app, for example:
Production : com.xyz.abc
Enterprise : com.xyz.*
Using this wildcard bundle ID, the app can be distributed and will overwrite any versions installed via the app store (user data will still persist). The prefix does not seem to matter here.
One drawback of the wildcard bundle id is the fact that you cannot use APNS etc.

iTunes connect: confused on Bundle ID

I have been excited to try to add for the FIRST time a new App on iTunes Connect to TEST my GAMEKIT features.
I have read this technical note and I am getting confused because I had already a boundle id for my App that I created when I started developing it (that's my current bundle id with which I created the current provisioning and testing profiles: hello-*).
In order to use GameKit and InApp Purchase should I create a new Bundle Id?
I am confused because:
I don't know if the current Bundle Id is valid (in respect to the technical note linked above)
I don't know if hte Bundle Id influences the things that I can ADD in the App later (E.g. in App Purchase, GameKit, ...)
If I create a new App with a name (say: HelloApple) but with a bundle Id with wildcard (Say: hello-*) will I be able to add a new App with the same name but a different bundle Id in a later stage? This indeed before publishing ANY of the two Apps.
I don't fully understand why there is a choice between using or not using a wildcard; in other words, if a non wildcard bundle id is needed to use in App purchase and GameKit why should a developer want to use a wildcard App Id?
Any help will be appreciated, in particular I need to solve my first issue: which bundle Id should I use in ordert to use GameKit and InAppPurchase?
Before answering your questions some definitions:
Bundle ID: A reverse DNS string that precisely identifies a single app.
Bundle ID search string: it is used to match a set of bundle IDs, where each bundle ID identifies a single app. For example, if the bundle ID search string is com.mycompany.MyApp or a wildcard such as com.mycompany.*, then it will match the bundle ID com.mycompany.MyApp.
App ID: A string that identifies one or more apps from a single team. An App ID consists of a bundle ID search string preceded by the Team ID, a 10-character string generated by Apple to uniquely identify a team. In the technical note that you link it is ABCDE12345 and called the Bundle Seed ID.
(Development) Provisioning Profile: you use it to authorize your app to launch on devices and use certain store technologies when you are in development. It is comprised of: a single App ID, a set of devices, and a set of development certificates. The provisioning profiles are created in Member Center and you need them on your device to run your app. XCode can download provisioning profiles and install them onto devices.
Now I will answer to your bullets:
To use Game-Center (GameKit) and IAP you need an explicit App ID, that is and App ID with a bundle ID search string that has no *. A wild-card App ID is one in which the bundle ID search string that has a *, and is the one you have now.
What you create initially is an App ID with an associated Bundle ID. If it is explicit you can add Game-Center and IAP, if it is a wildcard App ID not... that's it.
You can not have two apps with different names but the same explicit App ID or Bundle ID. But you can have two apps with different names that do not use Game-Center or IAP with a unique App ID using a wildcard App ID.
You ask why the wildcard is useful... Well, I said that if you do not use Game-Center or IAP you can have two or more apps associated to an wildcard App ID. Then you can create a provisioning profile with this App ID and you only need to install this provisioning profile on your devices for all your apps. There is a default provisioning profile of this type called the Team Provisioning Profile which is valid for all your apps, but you could create more specific ones that are valid for a subset of all you apps.
This process is really useful for big teams. If you have a small team and few apps it is really confusing, but it helps to understand the reasoning behind it.
But there is more to say about all this. I recommend that you read the "App Distribution Guide" as I did recently. It is an extensive guide, but for the moment you only need to read sections of topic "Maintaining Your Signing Identities and Certificates" and "Maintaining Identifiers, Devices, and Profiles". The guide is very clear, full of screenshots and it will answer all your questions. Also you can go back to the guide down the road to quickly solve some issue (and you will have issues).
The first time that I created an App with Game-Center and IAP more than a year ago I looked up stackoverflow to answer all my questions. But I've been having issues when certificates expired, when I added new devices, etc, and every time I found and Ad-hoc solution after a lot of fiddling around and going back to stackoverflow. Don't get me wrong, there are great answers in stackoverflow but it is a much better strategy in my experience to read something longer that explains the big picture. App ID, Bundle ID's, Certificates, private keys, etc, is a messy subject, specially if you do not understand why it is built this way.
The bundle id is just an identifier for your app. It's mainly used to provide you with the certificates you need to use to sign your app before submitting to the App Store or to use it on development devices (e.g. for testing). The bundle id can be whatever you want. Apple recommends using the syntax com.yourcompany.yourapp to keep it consistent among apps you develop and avoid conflicts with other app's identifiers.
A wildcard can be used on all your apps, while a specific id can be used with one app only. I advice you to have an id for each of your app and only a wildcard for development (so you can run on your devices as many apps as you want without having to bother about the certificates until you decide to ship the app). You don't need to have access to all services (like Game Center or iCloud) on all your apps and therefore you better sign the single certificates just with the services your app needs.
What I think Apple wants is:
Create a different bundle ID for each app that uses in-App purchase/GameKit or both.
You can have same App-ID, and bundle ID for apps that do not use these.
If the bundleID you have for your app is not used for any other of your apps, you can use it.
Somebody more knowledgable, Please correct me if I am wrong.

iOS app release - same Bundle ID but different Developer accounts

I have created an app for which a different version was created earlier. The older app had a different Bundle ID from mine, but it has the name I want to use. So if I want to release the app with the same name:
1) Do I have to use the same Bundle ID?
2) Does it matter if the app is being submitted using a different developer account?
3) What about the App ID?
What is your goal? If you want the same name, then your only option is to use a different bundle ID and see if your app name is available in a different locale within iTunes connect.
Your bundle ID has to be different. But the bundle ID has no intrinsic connection to the app name. However, again, within iTunes connect, your app name within locales has to be different.
I believe that your app will be rejected if you try to use the same name and/or same Bundle ID. The point of that is that it uniquely identifies your application
If you want to replace the older app, you will need to use the older developer account and submit an update

Resources