I read from Cocoa Core Competencies
that
An App ID is a two-part string used to identify one or more apps from
a single development team. The string consists of a Team ID and a
bundle ID search string, with a period (.) separating the two parts.
However it also says that,
The bundle ID is a unique identifier that identifies a single app and
cannot be used by other teams.
I see that we can't register an App ID in the Developer account portal with same bundle ID of an app that is on the appstore.
An App ID with Identifier 'com.example.myapp' is not available. Please enter a different string.
So I don't know if 2 apps from 2 developers can have same bundle ID (like com.example.MyApp), and if this causes any conflicts?
Can these 2 apps be installed on the device?
Can these 2 apps be allowed on the app store?
How does Push Notification work with these 2 apps ?
I see that many services like Fabric Crashlytics, Urban Airship, Google App Invites, ... depends on the Bundle ID to differentiate among apps.
Can these 2 apps be installed on the device?
No, it won't. It will replace the existing app.
Can these 2 apps be allowed on the app store?
No, you cannot create Apps on App Store with same bundle ID.
How does Push Notification work with these 2 apps ?
Push Notifications will show for the app it is made for whose Push Certificates etc are made
Can these 2 apps be installed on the device?
No. If you tried to install another application with same bundle ID it will replace the existing one.
Can these 2 apps be allowed on the app store?
No. When you upload the application on an App store it will ask for unique bundle ID.
If you use same bundle identifier for two different application and try to run on device then previous application is replaced from Device and current application is installed on Device. if you want to run two different application then you can use wild card id.
for App store when you creating application in iTunes connect first it check with existing App ID(same with bundle identifier in Xcode) on app store if exits the you have to put different app id.
Related
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.
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.
I'm wondering two questions about iOS Push notifications :
I'm managing in-house apps that I send to lot of people. Is it possible to enable push notifications without a fixed app id ? Actually, I have an app id for all my apps (which looks like com.company.*) in order to not create an id for each app.
My aim is to make my in-house apps able to receive push notifications :)
Can we use a generated iOS SSL certificate for other use or is it created specifically for iOS Push ?
Thanks a lot !
Wildcard App ID is not applicable for Game Center, Apple Push Notification Service (APNS), In-App Purchase (IAP), Data Protection, and iCloud.
Conclusion: Explicit App ID has to be used.
From Apple's Provisioning Portal documentation:
An App ID is the combination of a unique ten character string called
the "Bundle Seed ID" and a traditional CF Bundle ID (or Bundle
Identifier). The Bundle Seed ID portion of your App ID can be utilized
to share keychain access between multiple applications you build with
a single App ID. In addition, it can be incorporated into any external
hardware accessories you wish to pair your iOS application with.
Registration of your App ID is required to utilize the Apple Push
Notification service (APNs) and to register an application to
incorporate In App Purchases.
The Bundle Identifier portion of an App ID can be substituted with a
wild-card character (asterisk '*') so that a single App ID may be used
to build and install multiple applications. If the wild-card character
is not used, the Bundle Identifier portion of your App ID must be
input as your CF Bundle ID in Xcode to allow the application to
install on your device. The Bundle Seed ID portion of your App ID does
not need to be input into Xcode. Wild-card App IDs cannot be used with
the Apple Push Notification service or for In App Purchase.
Reference: https://developer.apple.com/library/ios/#documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html
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
Suppose that I have an app called A.
Bundle Identifiers must be unique across all Mac and iOS apps. This means that if I have the app A on the iOS App Store with the Bundle ID com.mycompany.a, I cannot create an app on the Mac App Store with the same Bundle ID com.mycompany.a.
Ok, said that, what is the best way to distinguish the Bundle IDs?
Some examples I can think of:
com.mycompany.a_ios, com.mycompany.a_mac
com.mycompany.ios.a, com.mycompany.mac.a
Are there others that come to mind? Which you used?
Rather a request for an opinion than a question I'd say, but com.mycompany.application.platform is what I'd use.
The reason would be to make it more and more granular towards the end, seeing the platform as a sub component of the actual application.
Apple now allows you to use a single bundle ID for Mac and iOS apps through Universal Purchase:
Universal Purchase for Mac Apps Now Available
The macOS version of your app can now be included in a universal purchase, allowing customers to enjoy your app and in‑app purchases across iOS, iPadOS, macOS, watchOS, and tvOS by purchasing only once. Get started by using a single bundle ID for your apps in Xcode and setting up your app record for universal purchase in App Store Connect.
https://developer.apple.com/news/?id=03232020b
Offering Universal Purchase
Upload your apps to the app record using a single bundle ID. While the bundle ID must match the bundle ID you enter in App Store Connect, the apps can have different version numbers and build strings.
https://developer.apple.com/support/universal-purchase/