Manage iOS Enterprise Developer Program - iphone

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.

Related

how to create binary which can be installed in all iphones without creating App Store or Ad Hoc?

i want to create an application which will not launch in AppStore but all my clients can install my application in their devices. the problem is that i do not have all my clients devices UDID. how they can insert my application because i can't create Ad Hoc since i do not have all my clients UDID and i do not want to create an App Store binary.
Please tell me this is possible or not.?
Use InHouse distribution, see
https://developer.apple.com/programs/ios/enterprise/
and
http://www.apple.com/iphone/business/apps/in-house/
In short, you'll need an Enterprise account. With it, you can create inhouse-distributions that work the same as ad-hoc (i.e. you can distribute them directly or via Over-the-air), except that you don't need to specify UDIDs.
However, since this is a major security "flaw" you have to make sure that everyone who downloads/gets this app is properly authenticated one way or another.
Important: If your clients are not members or subcompanies of your company, I'd check the legal status of using InHouse distribution for this. I'm not sure myself.
If you can turn your app into a web app, then yes you can do it.
But assuming you are talking about a native iOS app, and you don't want to require clients to jailbreak their phones, then no, Apple have a single distribution channel and that's the App Store.
If your clients are 'internal' clients, ie you want to distribute within your own organisation, then the enterprise program is an option for you;
https://developer.apple.com/programs/ios/enterprise/
If your clients are large, and want to buy in volume and then re-distribute internally, another option may be the custom B2B program;
http://www.apple.com/business/vpp/

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.

Distributing iPhone App to developers in your team through iTunes

Was wondering if you can distribute your App to other developers in your team through iTunes. I guess you would upload the App as a beta version through iTunes Connect and anyone with a provisioned iPhone would receive the update. I didn't think it was possible but someone told me they were sure you could.
If this is not possible are there any other benefits of a company standard enrollment besides being able to add other people so they can get the same resources?
If your other team members don't have access to Xcode then you can do this through ad-hoc distribution.
First you need to get the device ID's (GUID) for all the involved members and generate a provisioning profile containing the ID's.
Then once you have built your executable application just zip this together with the provisioning profile.
The team members can install the application (including the provisioning profile) by dropping the application into iTunes and syncing with the iPhone.
If the developers are in your team, meaning the team as defined on the developer portal, far better for them to sync to the source (i.e. latest or specific label) you want to test and to build and install it themselves since they cal all have their own provisioning profiles. It would be possible for one developer to have all devices on one provisioning profile and to do all the build and install tasks for everyone, or it would be possible to use the ad-hoc distribution, but you need to sign up and pay for that method of course. I do not think there are any other ways to do this.

How to restrict application distribution to a group of users only via Apple AppStore?

I'm a first time iPhone application developer and I'm developing application for my client who wish to distribute this application to a group of people related to his business only, and as FREE application only. This is such an application which is not meant for general users so we definitely don't want this application is publicly listed in Apple AppStore, rather we want to distribute application to group of people privately. Just like sending them a link to download application via email or something. They click on it and application get downloaded. But in Apple I read that two programs are available like Standard Program and Enterprise Program. The standard one will list application publicly which we do not want, and enterprise programs looks compelling for enterprise users connected to MS Exchange server which we do not posses and not even wish to setup because its not needed.
Can any one help me answer following?
1. If we go with Standard program, how can we restrict application to be visible via some AppStore link ONLY and we will send that link to our users via email.
2. If we go with Enterprise Program, can we do a simple setup over our Apache+PHP+Linux environment i.e. without involving MS Exchange server.
Thanks,
Sameer.
One way around this is to submit your application to the App Store, but put it's availability date in the future.
Then, you can create promo codes and send them to the people you'd like to be able to download your application, but it won't show up in the store.
If you do it this way, you don't need to know anybody's UDID, but you're limited to 50 people per version of your application.
If we go with Standard program, how can we restrict application to be
visible via some AppStore link ONLY
and we will send that link to our
users via email.
It is very simple: You can not. You can either manually distribute the App through AdHoc distribution (for this you will need the UDID of every single iPhone the app will be installed and afaik the the license runs out every year and needs to be renewed) or post it to the AppStore publicly but restrict access to your application by using an authentication within the App itself.
If we go with Enterprise Program, can we do a simple setup over our
Apache+PHP+Linux environment i.e.
without involving MS Exchange server.
Afaik I think this should be possible as you basically are just doing a huge AdHoc distribution, but without Exchange Server it might get a pain as you will probably also need the UDID. Yet honestly I never took any closer look at this program.
You can setup the app to require a password or hot corner when first run.
The Enterprise Program is your only viable option for a native iPhone App. Re-read the program details. It's exactly what you want.
If you deploy your App as a Web-App, you can skip this and simply deploy on the company website, so if you don't need native iPhone options, this might also be a viable way to deploy your program.
-t
You will need to qualify for the Enterprise Program: you'll need a minimum number of employees and a DUNS number. Read the Enrollment document for more information. Your situation (as described) does not sound like it qualifies.

What's the point of App ID's and Provisioning Profiles?

As I understand it, an App ID is an code that's unique for an single application. Every time I start developing an new application, I have to create a new App ID.
But I don't get it what's up with that "provisioning profile". Do I need one for each single app? What's that for?
It's to protect the end users, by having a way to validate apps and their origin. It also serves as a centralized system to control development. On windows most apps use GUIDs for this, but they don't have any centralized info about them. Apple does, which is a pain at times, but it's a valid effort in the end.
The provisioning profile contains a list of devices that are allowed to run or debug your code. Everything is verified with a digital signature, which ultimately lets Apple control distribution. This is why you need to jailbreak in order to get apps from sources outside the App Store.