When to use an explicit app ID versus a wildcard ID? - iphone

What are the exact advantages of creating explicit App ID and Wild card ID? I saw that if we are creating a bundle of apps, we can create a wildcard App ID, otherwise explicit ID is good etc. But I am a bit confused and want to know more details about the exact advantages of both types.
If I have a free version first(1.0) and then want to submit priced version of same app with new features(2.0), what should be the right way?
Thanks.

You should choose a wildcard App ID if you do not plan to use push notifications and/or in App purchase. In your case, since you plan to start with a free version, then to provide a priced new version you should choose an explicit App ID reflecting the name of your application, and use in App purchase to allow people to buy the contents related to your priced version. This is what Apple is now recommending. Basically, the folks at Apple do not want us to develop a light and a priced version. They want a single App that can offer free contents and priced contents through in App purchase.

Provisioning profiles with Wildcard App IDs are recommended for most iPhone OS development because a single Wildcard App ID can be used to build and install most applications, including the sample code projects provided in the iPhone Reference Library. Wildcard App IDs are created by entering an asterisk in the Identifier portion of your App ID. The wildcard asterisk character must be the last character in the App ID string. If you use a Wildcard App ID, remember to replace the asterisk with an appropriate string using the reverse-DNS format when you fill in the Bundle Identifier field in your Xcode project.
Example App ID: ABCDE12345.*
ABCDE12345 is the Bundle Seed ID (generated by Apple)
* is the Bundle Identifier of the App ID. When you enter the Bundle Identifier in your Xcode project you need to replace the asterisk with an appropriate string using the reverse-DNS format
Example App ID: ABCDE12345.com.foocompany.*
ABCDE12345 is the Bundle Seed ID (generated by Apple)
com.foocompany.* is the Bundle Identifier of the App ID and the Bundle Identifier in your Xcode project must start with ‘com.foocompany.’ and the asterisk can be replaced with a string of your choosing
The second type of App ID is called an Explicit App ID. This type of App ID restricts a provisioning profile to only allow the installation of one application. Explicit App IDs are required to enable certain iOS features such as In App Purchase and Apple Push Notification service in your applications. Explicit App IDs are created by entering a specific string in the Identifier portion of your App ID. The recommended practice is to use a reverse-DNS formatted string for the Bundle Identifier portion of the App ID.
Example App ID: ABCDE12345.com.foocompany.appname
ABCDE12345 is the Bundle Seed ID (generated by Apple)
com.foocompany.appname is the App ID's Bundle Identifier and needs to be the same as your app’s Bundle Identifier
If you currently have an app that uses a wildcard App ID and would like to update your app to use an explicit App ID please see Technical Q&A QA1680, 'Updating from a wildcard App ID to an explicit App ID'.
Important Note: Change the "yourcompany" in your app’s default Bundle Identifier to the actual name of your company. This helps to avoid issues when you try to upload your app to the App Store.

Wildcard App Id is easier to use. You don't have to create new App Id and new provisioning profile for each small app you want to test. Explicit App ID is necessary to enable push notifications and in-app purchase. If you don't need both, just use wildcard and save your time for something more important than creating, downloading, installing and distributind multiple provisioning profiles(up to three for each App id - for development, adhoc and app store distributions!).

wildcard must be good for "Developer" testing your app on your device. (which should be in your provisioning profile with its associated UDID) Exclusive ID is for "Distribution", I would imagine

The idea is, as I understand it, that apps with a wildcard app id can share data. So if you want your pay version to be able to grab the settings the user entered when they were using the free version, you'd want that. That said, I've never used the wildcard option, so I don't have hands on experience using this.

Related

Reusing a wildcard appId to enable push notifications

I have recently taken over an iPhone project and I have never used objective-c before.
I have to get the application to use push notifications, but the first appId is already live and uses a wildcard (so no push notifications).
I created another appId with an identifier and got push notifications to work.
However my workplace would like me to get notifications to work for the wildcard app (since we already have lots of customers using that app).
So how can I make the wildcard app update and use a unique identifier without creating a new appId (even with the same bundleId).
I am very new to all of this, so a step by step process is greatly appreciated (ELI5).
For reference I used keychain to get the private .p12 file and I use that on a windows server that runs a console app that generates the push notifications (sent to Apples apns server).
EDIT: I have done the following steps, can someone tell me what im missing?
1) Create new bundleId (using the same AppId).
2) Configure that AppId to use push notifications.
3) Create the CSR in keychain.
4) upload that to the portal and create a production cert.
5) Download that cert and export the private key.
6) Create a provisioning profile using the same bundleId as 1 (e.g. au.com.website).
7) Download that provisioning profile, put it in x-code and on my iPhone device.
8) In the build settings of x-code use the bundle Id and use the provisioning profile I created in step 6.
9) Archive the app, deploy by ad hoc, save the file to the desktop.
10) put that file in TestFlight, download the app from testFlight on my iPhone.
11) put the private key on my windows server and send the push notifications (they send w.o errors).
I don't get push notifications (the iPhone is set to revive them).
Once again this is working with another appId someone else made, so I know the code works.
Do not confuse the app identifier and the bundle identifier. The bundle identifier is something like: com.company.appname and is defined by an app's info.plist
The app identifier has an additional prefix (usually the team prefix) and can be containing wild cards. The app identifier is used to match bundle identifiers to provisioning profiles. A profile is only valid for that app that matches (excluding the prefix)
Now what you want is to keep the bundle identifier the same, because if you change that it becomes a new app. But you can change the provisioning profile and app identifier with every update.
I was in a similar situation a while ago when I had published an app with wildcard app id and I added an IAP to it.
You just create a new (non-wildcard) app id that matches the bundle id.
You enable the Apple services (IAP, GC, APNS) you require on the app id.
You create new provisioning profiles to suit your needs (App Store, Ad Hoc, Development)
You can then submit an update for your app with the new profile but unchanged bundle id.
As far as I know, what you ask is not possible.
https://developer.apple.com/library/ios/#documentation/ToolsLanguages/Conceptual/DevPortalGuide/CreatingandConfiguringAppIDs/CreatingandConfiguringAppIDs.html#//apple_ref/doc/uid/TP40011159-CH18-SW1
Here is an older question, that may have an answer...
Updating live App ID for Push notifications
For Push Notification an appId is must.
For a step by step process Use the two part tutorial of raywenderlich. Hope this will help you.

Validating my application using VALIDATE in xcode - Beginner

I need to use the validate functionality in xcode. I need to check if i have not done anything illegal while programming.
I know that i have to login to my iTunes connect account and add a new app. (I did this step)
Next i have to fill in the Language preferred, App name, SKU number and bundle ID
1.) what should i enter for SKU number ?
2.) I only want to submit the app for validation (and not submit the app to appstore). So what is the process i should follow after entering the above details (note:I only need to validate and not submit)
3.) What should i select in Bundle ID dropdown. is it the appname -* or the appname - com.me.app ?
if i select appname - * it will prompt the Bundle ID Suffix what should i add there /
4.) I have given a false application name to its App Name column (since i am not going to submit this to app store), So will i be able to add an App again giving the same Bundle Id and SKU number ?
1) The SKU is a unique number that you come up with that will help you to identify the app. It can be anything that you desire, for example 001 or 0001.
2) Follow the remaining steps in iTunes Connect, until you get to "Ready to upload binary". (and then hit that button) Feel free to use placeholder (ie, temporary) screenshots and files for the app icon. Just ensure they're of the correct resolution to keep Apple happy for now.
Once the app has changed to the "waiting for upload" state, then when you build an archive of the app in Xcode and then go to validate, then login with your info, and it will validate your app binary file.
3) You need to pick the appname - com.me.app option.
4) You can add more apps again, but the app name, SKU and bundle ID will be different if it is a different app. If you want to reuse the app name that you've made, purely to test the validation of the app, then be sure to setup your app in Xcode using the same provisioning profiles, bundle ID and app name again.
Hope this helps!

Sharing app-IDs among multiple developer account

I have an apple developer account using which I have developed an application for one of my clients. Now, the client also has a developer account. Is there anyway, I can create an app ID like com.client.* in the clients developer account and then upload an application's release version using an appID like com.mycompany.applicationname which is created in my developer account.
Or else, there is no option like that??
An app ID is a unique application identifier. Even the exact same source code, built with two different app ID's, would be considered two completely different applications.
In order for you to compile your client's application, you will need to get a copy of their profile using com.client.* and compile the application as com.client.appname.
That would be possible, (as far as I know, apple doesn't check the AppIDs if they are used anywhere yet outside of your program) but might get problems when submitting to the appstore and furthermore, you could not submit with his account, what he probably wants. Here's what we usually do:
1. Create a *. Provising profile for yourself for development purposese.
3. For push notifications, you should be able to create a DEV certfiicate with Appid com.client.appname in your developer program
4. Have your customer invite you into his Program and create the matching provising profile for appstore submission and push notification with this Appid.
You can be in multiple development programs (I'm currently in three different ones..)

iTunes Connect: How to change the bundle id prior to app submission?

We are getting ready to upload our app. At this point, itunes connect information has been entered. The problem is, we decided to change the name of our app from
ourAppMobile -> ourApp
The concern is that in iTunesConnect the Bundle ID is listed as:
com.ourcompany.ourAppMobile
But, we have changed our app name to ourApp.
What to do? Can the Bundle ID be changed in iTunes Connect. If so, how? If not, what to do?
Thanks.
> Identifiers
>
> SKUICC_MOBILEAPPLE Bundle ID
> com.ourcompany.ourAppMobile Apple ID
> 395529813 Type iOS App
As you suspect there is no possibility to change the Bundle ID or better say App ID Suffix. Your only solution to make a new Bundle ID and upload the app with this ID.
This Bundle ID is which make your app unique on the AppStore and follows it thorough all its lifespan and based on this iTunes recognize it from upgrade to upgrade.
The Bundle Display Name is totally different, and you can change as you like in line with Apple guidance. The APP ID prefix could be the same for various apps but it's again not the Bundle ID you are asking for.
Actually I don't really understand why do you bother with the internal name of the app as this will be unseen for the users. It's just a string nothing else, nobody use it or read it. The APP ID suffix could be anything even different from the Apple recommendation of com.companyname etc., and the only limitation that it has to be different from another APP ID, this is why it's unique and you couldn't change it any more.
In your Info.plist for project add/modify value for CFBundleDisplayName (aka 'Bundle Display Name') to the desired app name. Then rebuild.
If your app name contains a space then you will need to take an extra step in the midst of validation process. Check this out.
From another forum....
"You can either go ahead with the original bundle Id (these are always your choice as long as they are unique or wildcard for your account) or abandon that effort and start over with a new ID and upload using it. However, you will have to change the app name too..."
In my case, I did not want to change the app name in iTunes Connect or so I'm keeping the bundle id I originally entered as suggested.

App ID and Bundle Seed ID in multiple applications with ASPN, InApp Purchase, and other

I will create multiple sale versions of the same application with push notifications feature:
CoolApp (full version)
CoolApp Free (free, features limited
version)
CoolApp InApp (free version
upgradable to full via InApp
Purchase)
While registering for App ID in Apple Program Portal is possible to create "Bundle seed ID": "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"
Is possible to create only one App ID, for example: "XDFGYE6TR4.com.company.coolapp" and use it for all three versions of CoolApp, with enabled push notifications and in app purchases?
No, this is not possible. The App ID is what controls each app's capability to share keychain access.
The key here is the "...between multiple applications you build with a single App ID" portion.
App ID is not the bundle. "com.company.coolapp" is the App ID and is what controls keychain access...as well as things like whether it can be push enabled, etc.
Unfortunately what you want, it seems, is "using a wildcard App ID".
This cannot be done if you want to use push and in-app purchase.
Remember, though...Apple has frowned on having both a "Lite" version as well as an "in-app" updatable version. One or the other. Recently they have been pushing the "in-app" updatable...it makes them more money.