Multiple appstore application versions - regular and certified - iphone

I have to get a certification for my app for government customers. So there will be two (similar) apps in the app store - regular (development) version and a certified (frozen) version.
My question is - what should be different in the new app?
- new app name (e.g. My Certified App)
- new bundle id (com.mycompany.my-certified-app)
- new push certificate for the server?
- new images?
I have never submitted a lite/full version app before, maybe this type of thing is all too common.
Thanks!

You just need a different bundle ID to make two apps (they'll need to have different names in iTunes too, but the name on the homescreen / in the project can be the same).
You can create a new target for your app, and that will give you a second info.plist. That lets you specify different bundle IDs for the two versions without needing to physically copy and paste the whole project.
However you may have trouble getting this approved by Apple if both apps are identical apart from the version number / certified status.
If one app is just for testing, can't you use TestFlight or something similar to allow your customers to try the app in beta before it's certified?

I would suggest adding "- Certified" to your app name. There are plenty of examples in the iTunes store of full versions, and "- Lite" versions.
In addition to the name, it is customary to have the app icon reflect the different versions.
SeeRoboKill, and RoboKill Lite as one example.

Related

Manage iOS Enterprise Developer Program

We recently enrolled in the iOS Enterprise Developer Program to be able to use in-house distribution, which significantly simplifies the deployment of the apps inside our company which is fairly big. Before joining we have thoroughly read the program documentation and we were aware that the new account would live completely separated from the standard account we use for the AppStore submissions.
What I'm unsure about is now what would be the best way to organize the two accounts in the developer portals. I'm mostly concerned with the bundle identifier since I'll be dealing with two different bundle ids inside Xcode for each application. All of our apps use iCloud and Push notifications so wildcard is not an option.
How do you organize this inside Xcode? Do you create two different targets or are you able to manage this with a new Project Configuration? What about iCloud entitlements?
EDIT
Just as an update I wanted to make clear that we're looking for the best solution to build an app for both In-House distribution and for AppStore submission.
EDIT2
Given that the enterprise program does not grant you access to iTunesConnect, where test users and product ids can be setup, is there really no way to test InApp purchases?
I'm not entirely clear on what you need, but it sounds like you want to be able to build your app store apps for internal enterprise use. Is that correct?
If you want to be able to build your app with two different bundle IDs you can create a custom build setting, and give it different values for your different configurations.
So for example, you could create your Enterprise configuration:
Then go to your target's build settings and add a user-defined build setting:
Give it a name like BUNDLE_ID, and if you expand the triangle you can give it different values for each configuration:
Next, open your Info.plist file and enter ${BUNDLE_ID} for the bundle id value:
When you compile using the "Enterprise" configuration, which you can do using a custom scheme (or via the command line build process if that's what you use), the appropriate bundle id will be used.
You can also configure the code signing/provisiong profile setting in the same way:
Once you do this, the correct push notification/iCloud entitlements will be used depending on the configuration.
We've been doing this kind of thing for a long time now. Our build server will generate enterprise and app store versions of our apps for each build, using exactly this technique.
When it comes to the provisioning portal, you will need to configure both app IDs separately for push notifications, iCloud, etc.
This does mean that push notifications must be sent separately to the app store and enterprise versions since they will not share the same bundle ID or push notification certificate.
The iCloud storage by default will be totally separate for the two versions. They may be able to access the same iCloud store (if you need this) as long as the entitlements are set up with the same team ID. But this may be a problem if you have two separate developer accounts.

Building and testing multiple apps - trying to understand appID's and profiles

I'm trying to understand app ID's and provisioning profiles here, I'm quite lost.
I am a registered Apple Developer as an individual under my full name, and I have 2 applications currently in the works, and 2 device UDID's ready for testing.
I'd like to be able to build IPA's for these two apps, upload them to TestFlight, and use them on either of the UDIDs I have on me.
I have several questions (if I should ask separate questions, I'd be happy to unless someone happens to be willing to answer them, I'd appreciate it):
1) Because I have 2 (or more in the future) applications, do I need a wildcard app ID?
2) If I have the app ID ET9WC78H9Q.com.mydevname.* listed in the portal - WHAT is the actual appID - ET9WC78H9Q.com.mydevname.*, ET9WC78H9Q.com.mydevname, or *?
3) Why can't you delete an AppID in the portal?
4) I've read that this must match the name Bundle Identifier. Currently it sits at ${PRODUCT_NAME:rfc1034identifier}. What specifically needs to go here to 'match'?
5) Do I need to create separate distribution profiles for each app, or can I tell each new app to use the wildcard identifier?
6) How do I tie a specific target to a specific provisioning profile in XCode 4? (TestFlight suggests to use the distribution profile)
Thank you,
You have to either have a wildcard app id, or 2 separate (specific, non-wildcard) app ids, one each.
That is a wildcard app id, so the app id is *
No idea.
Your PRODUCT_ NAME, which you specify in the Packaging section of the Build Settings screen.
A single distribution profile will work with multiple apps if the app ID for that profile is a wild-card app id. If they are specific app IDs, yes, you need a profile for each app.
You specify the provisioning profile in the Code Signing section of Settings, under CODE_SIGN_IDENTITY.
Because I have 2 (or more in the future) applications, do I need a wildcard app ID?
You don't. In fact, I recommend against it, since it's probably only going to give you problems with the App Store in the future.
If I have the app ID ET9WC78H9Q.com.mydevname.* listed in the portal - WHAT is the actual appID - ET9WC78H9Q.com.mydevname.*, ET9WC78H9Q.com.mydevname, or *?
That depends on the application. The first part is the Keychain space, which determines which applications can access the things you put in the Keychain. Then comes the actual application identifier, which is generally company.projectname. It would probably be ET9WC78H9Q.com.mydevname.myapplication in your case.
Why can't you delete an AppID in the portal?
On Mac and iOS, the AppID is very important for applications like the App Store. They have to be unique, since having two of them could mean that applications get installed in the wrong place. This means that even if you could remove them you couldn't ever add them again, which means there's no point in deleting them.
I've read that this must match the name Bundle Identifier. Currently it sits at ${PRODUCT_NAME:rfc1034identifier}. What specifically needs to go here to 'match'?
Wouldn't worry too much about that - simply look at the target summary page (click the solution then click the target and finally go to the summary tab) and it'll tell you the name it automatically picked for you.
Do I need to create separate distribution profiles for each app, or can I tell each new app to use the wildcard identifier?
You can definitely use the wildcard identifier, but the App Store will not necessarily like that.
How do I tie a specific target to a specific provisioning profile in XCode 4? (TestFlight suggests to use the distribution profile)
Wouldn't worry too much about that. If you got the code signing set up correctly (look at the build settings, then pick the development and deployment certificates) then you have nothing to worry about.
Can't say much more in here since most App Store things are guarded by an NDA. Consider asking this on https://devforums.apple.com instead.

New version instead of internationalizing?

My client have asked me to translate my app to english.
They want an english version of the current app. They wanna release it at a different price tier internationally..
Would apple approve a separate version, or do i have to internationalize the current app?
In order for it to be at a different price tier, iTunesConnect is going to need a separate app upload. That doesn't mean that it can't be the same app, but with different resources, icon, name, etc.
You could make separate targets in the same app that bundle up the different versions. The same project could be used to generate them.

Clarifying questions about provisioning profiles & My specific problem

I'm having serious problems getting one of my app's to run on other people's iPhones. Another app of mine works fine, so I suppose I am at some level capable of getting it right.
I've tried a lot of different things based on Googling around, but there's just too many permutations. It's time for me to learn what is actually going on. While I dive into the documentation, I have a few questions that hopefully some people here can clarify for me:
I noticed the I can set the Entitlements and Code signing settings both on the Project (double click on the top item in Groups & File, which has the name of the project) and on the Target (under Targets, double click on your project name). What's the difference between these two? I know that with header paths, one tends to override the other (without warning of course...).
When I choose "Build and Archive" (a really cool feature by the way), it again allows me to code sign. What's the difference here?
Many forums point to a setting in Entitlements.plist called "get-task-allow" (which needs to be set to false). However, when I create an entitlements file in XCode, there is no such line. Does that mean Apple fixed that bug/feature?
What is the difference between "Code signing identify" and "Any iOs device"?
What is the difference in the provisioning portal between "Development" and "Distribution"?
In that same portal, when you create a new profile for distribution, what is the difference between Ad Hoc and App Store? I've heard people say (and I believe I also experienced this in the past) that you can use the App Store profile for Ad Hoc distribution as well (maybe not the other way around). Then again, that might be due to my confusion if XCode uses multiple profiles at the same time, so it's not clear which profile is doing what.
My situation:
I'm using XCode 3.2.4 with SDK 4.1. The app runs fine on my own phone (which actually makes it harder to debug). Errors my friends keep getting vary from "Entitlements are not valid" to 0xE8003FFE and 0x800ccc0e, depending on what I send them. One has an iPhone 3G, the other an iPod touch. Both run iOS 4.1 and are not jail broken. Both do not have "restrictions" turned on.
I have two applications:
* com.isimplifiedchinese.teacher
* com.isimplifiedchinese.student
I was able to distribute the student application by building for the device and then manually creating the .ipa file (that was before I knew about the Build & Archive feature). I'm not able to distribute it with the Build & Archive feature yet. But I would like to focus on the teacher application, which I'm not able to distribute in any way at all (even though it worked in the past, before I started changing things).
In my provisioning profile I have (for the teacher application):
* one certificate for development
* one certificate for distribution
* a list of devices including my own and those two friends
* a provisioning profile for development (with me and my two friends in it)
* a provisioning profile for distribution (with me and my two friends in it). It's configured for "App Store" (but I've also tried "Ad Hoc" in the past, albeit possibly with slightly different options elsewhere)
All profiles are still valid. They are all listed in XCode Organiser and seem to be up to date.
Deployment is set to Device 4.1 - Ad hoc. On both the project and the target build settings:
* I added "Entitlements.plist" to "Code signing entitlements".
* code signing identity is set to automatic selector which points to my iPhone Distribution certificate and the App Store profile for the application.
* Any iOS Device is set to my iPhone Developer certificate (it's not set to automatic, because if I do that it points to a provisioning profile of the student application of mine).
When I choose Build and Archive and then Share Application, I set Identity to iPhone Distribution (which matches iPhone Distribution - App Store).
I regularly, but not consistently, used Clean All Targets during my struggles
Another thing that may or may not be relevant: I started with the teacher application and after a while a cloned and renamed the clone to student application. The student application uses shared libraries from the teacher application, but not the other way around.
Needless to say there's just too many permutations here and too much magic (from my point of view). Hopefully you can either help me understand this system better or magically point me in the right direction so I never have to worry about it again.
Lots of questions indeed... Some answers:
Q4. Code signing identity is the name of the entry, which can include several sub entries: you can sign with a different identity for each possible platform. E.g. you sign with identity X for iOS 3.2 devices and with identity Y for iOS 4 devices.
Q5. Development vs Distribution: when you develop your app, you sign it with your development profile so that authorized devices will accept it, when you're ready to deploy the app, you sign it with your distribution profile, which only the App Store will accept. Apple then applies its own signature on the app so that any device will accept it when it downloads it from the app store.
Q6. App store distribution is for selling your app through Apple's App store, while Ad Hoc distribution is for distributing your app through your "own enterprise app store", your app is not available on the App Store.

upgrading separate iPhone and iPad apps to a single universal binary

I have two separate iPhone and iPad apps that I have now turned into a universal binary. I think I've done the hard part, but now I'm kinda stumped on how to submit that universal binary through iTunes connect in a way that users of the existing apps are prompted to upgrade. I know I could just submit this as an entirely new app and then pull the old stand-alone apps down, but I would lose the continuity of reports, reviews, and the prompting of the current users to upgrade....
Any tips?
I don't think you can, both your iPhone and iPad apps as have separate bundle identifiers on iTunes Connect. To be able to make users upgrade, and to keep your reviews and everything - you need to have a single bundle identifier.
What I can think of is - remove one of the apps and update the other one to the universal binary.