You can distribute with an Enterprise Certificate to technically as many devices as you'd like, there are some legal limitations thru the Agreement thou.
The users would install the app by a website provided by you. On this website you would have a link to the manifest.plist like this. The manifest.plist can automatically be generated by Xcode when using Archive > Distribute > Enterprise
<a href="itms-services://?action=download-manifest&url=https://yourserver/yourpath/manifest.plist">Download and Install</a>
After downloading and first launch, user would also go to Preferences > General > Profiles > your company name > Accept
This is because Apple recommends you to distribute thru an Enterprise Device Management (which is completely another question and topic).
To update the app, you'll need to check on launch if there is a newer version and the point the user to the new IPA.
static NSString* plistURL = @"https://yourserver/yourpath/manifest.plist";
@implementation YourAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self performSelectorInBackground:@selector(checkForUpdate) withObject:nil];
return YES;
}
- (void)checkForUpdate;
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:plistURL]];
NSData *plistData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if (plistData) {
NSPropertyListFormat plistFormat;
NSDictionary *temp = [NSPropertyListSerialization propertyListWithData:plistData options:NSPropertyListImmutable format:&plistFormat error:nil];
NSString *onlineVersion = [[temp valueForKeyPath:@"items.metadata.bundle-version"] lastObject];
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
if (! [onlineVersion isEqualToString:appVersion]) {
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView* dialog = [[UIAlertView alloc] initWithTitle:@"A new version of «Your App» is available"
message:@"Would you like to update now? Caution: Since the app is very big, please install it while connected to a Wi-Fi network." delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Update...", nil];
[dialog show];
});
}
}
}
Documentation by Apple is extensive and good: Distributing Apple Developer Enterprise Program Apps