Choosing the correct bundle ID in iTunes Connect. - iphone

I am preparing to submit an app to the App Store and have come across the following form. In the past when I have done this incorrectly it caused me a lot of grief which I would like to avoid this time around.
It is giving me a few options to choose from, but I'm not sure which one is correct. I would assume there is a way to check my Xcode project to be sure that the bundle IDs match. More specifically I would think that the form below would correspond to my bundle id name
where if my app is called AWESOMEAPP the correct bundle to choose should read EricBrotto.AWESOMEAPP or EricBrotto - *. In fact I don't have either as an option. What I do have is ericbrotto - *. That said could I just choose this one and change my Bundle identifier to ericbrotto.${PRODUCT_NAME:rfc1034identifier}?
Any clarification would be great!

I would get rid of the dollar signs, and enter explicitly com.ericbrotto.myawesomeapp into all of the provisioning portal, iTunes Connect and the Xcode Target Build settings. Or use a wildcard just for the provisioning profile.

Related

placeholder and ${PRODUCT_NAME:rfc1034identifier}

Doing the final checking before submit to apple store, and noticed one thing:
bundle identifier is et to com.overwaitea.${PRODUCT_NAME:rfc1034identifier},
Is that ok? I am asking because one of the apple store guideline says "Apps with placeholder text will be rejected"... I am wondering whether this counted as placeholder, particularly that rfc part...
Should I replace all the ${PRODUCT_NAME} etc with the actual name? or the building process will actually solve for me?
Update "bundle creater os type code" is ????, what should that be?
This will replace ${PRODUCT_NAME:rfc1034identifier} with the product name as defined in the project configuration. But perhaps this is not what you want. Perhaps you created an application id in the iTunes developer portal which is not the name of the application. So you could simply replace ${PRODUCT_NAME:rfc1034identifier} by the id of your app.
But if you replace ${PRODUCT_NAME} then if later you wish to change the name of your product (which is not the identifier you chosen but the displayed name). You will have to replace anything you just replaced.

Same Bundle Id + Different Developer Accounts

We followed following steps and found strange output.
What would be possible reasons for these?
Steps:
Created ipa's for 2 different applications using 2 different distribution profiles (both the profiles belongs to 2 different developer accounts) but keeping bundle id same.
Actual Output: Both ipa's where treated as same i.e. 2nd ipa overridden the 1st one.
Expected Output: Both ipa's should be treated as different i.e. 2nd ipa shouldn't override 1st one.
Surprisingly same output was observed for same applications.
Thanks in advance.
iOS uses bundle identifier to distinguish applications from one another. If you sign two application using similar bundle identifier and try to install one after then it will show similar behavior(Actual output).
For example one application you com.example.user.zzz and another application has same id then iOS will treat them as same application. Installation/Removal of one over other will depend on the order of installation and application version.
So in your case you should provide two different bundle ids so that iOS can distinguish them.
Thanks,

How to share keychain data between iOS applications

I am describing a problem for which it took me quite some time to learn the answer.
The "GenericKeychain" example is a good start at providing a wrapper for sharing keychain data between applications when using the accessGroup in the init.
However, implementing this in my app yielded an obscure error code (which took forever to locate) -25243, which means: No access control.
I ran Apple's example app (GenericKeychain) on my iPad only to get the same error. Huh?
Does Apple's documentation fail to deliver on what is necessary to accomplish this?
After some (a lot of) digging throughout the web, I found the answer. The access Group that you use when constructing your KeychainItemWrapper class must ALSO be specified in each of your application's Entitlements.plist file in the "keychain-access-groups" section.
It seems almost obvious now that I see "keychain-access-groups". However, I had no idea to even look there. Hope this helps others.
Actually it's not hard to do. Please follow the steps.
App1:
Open your App's target Capabilities and enable KeyChain Sharing.
Add a identifier. (eg : com.example.sharedaccess)
Add "UICKeyChainStore" to your project.
Be sure you have a team id added to your App1 project.
Add Security.framework to your App1 project.
And add these codes to somewhere you need.
[UICKeyChainStore setString:#"someValue" forKey:#"someKey" service:#"someService"];
App2:
Open your App's target Capabilities and enable KeyChain Sharing.
Add a identifier. (eg : com.example.sharedaccess)
Add "UICKeyChainStore" to your project.
Be sure you have a team id added to your App2 project.
Add Security.framework to your App2 project.
And add these codes to somewhere you need.
NSString *string = [UICKeyChainStore stringForKey:#"someKey" service:#"someService"];
Your TeamIDs should be same for both projects.
I tried these steps on a real iPhone device.
I also tried these steps with Automatic and iOs Development provisioning profile.
My apps' bundle identifiers were like that : com.example.app1, com.example.app2.

iphone: appID creation problem?

Whenever I create an app ID on my provisioning profile, the 10 digit bundle seed ID keeps getting imported in front of it... e.g. YVW2UMA3HV.com.yourcompany.ytj
..As a result, the project i'm trying to compile (which as bundleID com.yourcompany.ytj gives an error in Application Loader.
..Is there a way to create an appID without the 'YVW2UMA3HV' in front of it ?
This is expected behavior and always worked for me.
Have you, however, tried using something different than "com.yourcompany" as prefix? Because that's where the problem might be at.
The value you supply in your Xcode project for the Identifier property of the target is just the com.yourcomparny.whatever portion of the AppID.

How to populate Info.plist values dynamically in Xcode?

Can't figure out how to populate CFBundleVersion dynamically with ${BUNDLE_VERSION} which I would like to define as
BUNDLE_VERSION=`date "+%y%m%d"`
If you're doing command-line builds with xcodebuild, you can do something like
xcodebuild -target MyApp -configuration AppStore BUNDLE_VERSION=`date "+%y%m%d"`
However, I advise against doing this. An App Store app has three versions:
The iTunes Connect version number (this is the only one normally shown to the user)
CFBundleVersion
CFBundleShortVersionString
I think they're all supposed to be of the form [0-9]+.[0-9]+(.[0-9]+)?. To avoid confusion, I set them all to the same thing for App Store builds (we include CFBundleVersion/CFBundleShortVersionString in bug reports, and it's nice if they match CFBundleVersion). Non-App Store builds can include more info, since they don't need to be submitted.
I don't know if iTunes Connect lets you submit an app with CFBundleVersion that doesn't contain a ".", but I haven't extensively tested this.
You’ll need an Xcode configuration file and a configuration variable that you set at build time. This is described in some detail at Diego Massanti’s blog. You’ll need to modify the build phase he describes to set the variable to the current date instead of incrementing the existing value.