I've uploaded several .app's the the iTunes store, where the "executable" file (ie. filename.app) is the same.
What are the repercussion's of this on an actual device, when an actual person downloads both onto their iPad/Phone/Touch , and possibly is running both?
The best answer would be that it is inconsequential since the bundleID's store the .app in different respective folders, but I do need further insight.
The name you give the app is irrelevant. All that matters is the bundle ID. These must be unique. From the iTunesConnect Developer's Guide:
An identifier used by iOS and Mac OS X
to recognize any future updates to
your app. Your Bundle ID must be
registered with Apple and unique to
your app. Bundle IDs are app-type
specific (either iOS or Mac OS X). The
same Bundle ID cannot be used for both
iOS and Mac OS X apps.
Think about the consequences of the alternative. If I name my app MyApp and you name your app MyApp, then a user who bought both would be in trouble. The bundle ID is the unique identifier for each app. The name of the app is unique for convenience and to avoid confusion when purchasing an app, but the bundle identifier is unique to keep products from overwriting one another.
Related
I am developing a program where I need to store a unique device_id since I cant get a unique identifier (like MAC Address) for every device, because it is deprecated by Apple.
What I want to do is, store a file in a specific directory of iOS where even the user deletes my iOS app this file wont be deleted. I am saying this because I used NSUserDefaults but the data stored from it get deleted if the user deletes its application.
*P.S Or if there is an alternative way to identify every device with its unique_id, suggestions are welcomed!*
You should use KeyChain to save info that should not be deleted together with app.
https://developer.apple.com/library/ios/documentation/Security/Reference/keychainservices/Reference/reference.html
UPDATE
This SO thread could be useful for you Saving/Reading to/from KeyChain
I need to store a unique device_id since I cant get a unique
identifier
It is not 100% correct. You can use
[ UIDevice currentDevice ].identifierForVendor
From Apple's docs :
The value of this property is the same for apps that come from the
same vendor running on the same device. A different value is returned
for apps on the same device that come from different vendors, and for
apps on different devices regardless of vendor.
Normally, the vendor is determined by data provided by the App Store.
I the app was not installed from the app store (such as enterprise
apps and apps still in development), then a vendor identifier is
calculated based on the app’s bundle ID. The bundle ID is assumed to
be in reverse-DNS format.
On iOS 6, the first two components of the bundle ID are used to
generate the vendor ID. if the bundle ID only has a single component,
then the entire bundle ID is used. On IOS 7, all components of the
bundle except for the last component are used to generate the vendor
ID. If the bundle ID only has a single component, then the entire
bundle ID is used.
If two apps have different Bundle Identifiers but the same title, does it mean they will store in the same place in the real device?
Bundle identifiers have to be unique which means you can not have two apps with the same bundle ID installed on the device. The product name does not have to be unique which makes a lot of sense because it would be difficult to avoid accidental conflicts.
It's been years since this has been posted. But thought this might be helpful to someone who's looking for information.
Bundle Identifier is something which is unique to each app. Each app on the AppStore must have a different Bundle Identifier, else you are going to face problems when you are going to submit your app to the app store.
Regarding the title of the app in the phone menu, it doesn't matter as it's just the display name of the app on the phone.
But when you are picking a name to display your app in the app store, it should be a unique one. Anyway Apple doesn't let you to have two apps with same name in the app store. If someone else is having your name you have to change your name or if you have trademark rights to the name and would like it released for your use, you will have to submit a claim.
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 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/