Я хотел бы поставить профиль конфигурации со своим приложением для iPhone и установить его в случае необходимости.
Обратите внимание, мы говорим о профиле конфигурации, не профиле настройки.
Прежде всего такая задача возможна. Если Вы поместите профиль конфигурации в Веб-страницу и нажмете на него от Safari, то это будет установлено. Если Вы пошлете профиль по электронной почте и нажмете вложение, то это установит также. "Установленный" в этом средстве случая "Установка UI вызывается" - но я даже не мог получить это далеко.
Таким образом, я работал в соответствии с теорией, что инициирование установка профиля включает навигацию к нему как URL. Я добавил профиль к своему комплекту приложений.
A) Во-первых, я попробовал [sharedApp openURL] URL file:// в свой пакет. Никакая такая удача - ничего не происходит.
B) Я затем добавил страницу HTML к своему пакету, который имеет ссылку на профиль и загрузил его в UIWebView. Нажимание на ссылку ничего не делает. Загрузка идентичной страницы от веб-сервера в Safari, однако, хорошо работает - ссылка активируема по щелчку, установки профиля. Я обеспечил UIWebViewDelegate, ответив Да на каждый запрос навигации - никакое различие.
C) Затем я пытался загрузить ту же Веб-страницу из своего пакета в Safari (использующий [sharedApp openURL] - ничего не происходит. Я предполагаю, Safari не видят файлы в моем комплекте приложений.
D) Загрузка страницы и профиля на веб-сервере является выполнимой, но боль на организационном уровне, не говоря уже о дополнительном источнике отказов (что, если никакое 3G покрытие? и т.д.).
Таким образом, мой большой вопрос: **, как я устанавливаю профиль программно?
И мало вопросов: что может сделать ссылку неактивируемой по щелчку в UIWebView? Действительно ли возможно загрузить URL file:// из моего пакета в Safari? В противном случае есть ли местное расположение на iPhone, куда я могу поместить файлы, и Safari может найти их?
РЕДАКТИРОВАНИЕ на B): проблема находится так или иначе в том, что мы связываемся с профилем. Я переименовал его от .mobileconfig до .xml (потому что это - действительно XML), изменил ссылку. И ссылка работала в моем UIWebView. Переименованный в него назад - тот же материал. Выглядит, как будто UIWebView отказывается сделать материал всего приложения - так как установка профиля закрывает приложение. Я пытался говорить этому, что это в порядке - посредством UIWebViewDelegate - но это не убедило. То же поведение для mailto: URL в UIWebView.
Для mailto: URL общая техника состоит в том, чтобы перевести их в [openURL] вызовы, но это не вполне работает на мой случай, видят сценарий A.
Для itms: URL, однако, UIWebView работает как ожидалось...
EDIT2: испытанное питание URL данных к Safari через [openURL] - не работает, видит здесь: iPhone Open DATA: URL В Safari
EDIT3: найденный большим количеством информации о том, как Safari не поддерживает URL file://. UIWebView, однако, очень делает. Кроме того, Safari на средстве моделирования открывают их очень хорошо. Последний бит является самым печальным.
EDIT4: Я никогда не находил решение. Вместо этого я соединил двухбитовый веб-интерфейс, где пользователи могут заказать профиль, посланный по электронной почте им.
На этой странице объясняется, как использовать изображения из вашего пакета в UIWebView.
Возможно, то же самое будет работать и для профиля конфигурации.
Вы пробовали, чтобы приложение просто отправляло пользователю почту с профилем конфигурации при первом запуске?
-(IBAction)mailConfigProfile { MFMailComposeViewController *email = [[MFMailComposeViewController alloc] init]; email.mailComposeDelegate = self; [email setSubject:@"My App's Configuration Profile"]; NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MyAppConfig" ofType:@"mobileconfig"]; NSData *configData = [NSData dataWithContentsOfFile:filePath]; [email addAttachmentData:configData mimeType:@"application/x-apple-aspen-config" fileName:@"MyAppConfig.mobileconfig"]; NSString *emailBody = @"Please tap the attachment to install the configuration profile for My App."; [email setMessageBody:emailBody isHTML:YES]; [self presentModalViewController:email animated:YES]; [email release]; }
Я сделал это IBAction на случай, если вы захотите привязать его к кнопке, чтобы пользователь мог повторно отправить его себе в любое время. Обратите внимание, что в приведенном выше примере у меня может не быть правильного типа MIME, вам следует это проверить.
Я подумал о другом способе работы (к сожалению, у меня нет профиля конфигурации для тестирования):
// Create a UIViewController which contains a UIWebView - (void)viewDidLoad { [super viewDidLoad]; // Tells the webView to load the config profile [self.webView loadRequest:[NSURLRequest requestWithURL:self.cpUrl]]; } // Then in your code when you see that the profile hasn't been installed: ConfigProfileViewController *cpVC = [[ConfigProfileViewController alloc] initWithNibName:@"MobileConfigView" bundle:nil]; NSString *cpPath = [[NSBundle mainBundle] pathForResource:@"configProfileName" ofType:@".mobileconfig"]; cpVC.cpURL = [NSURL URLWithString:cpPath]; // Then if your app has a nav controller you can just push the view // on and it will load your mobile config (which should install it). [self.navigationController pushViewController:controller animated:YES]; [cpVC release];
Я думаю, что вы ищете "беспроводную регистрацию" с использованием простого протокола регистрации сертификатов (SCEP). Посмотрите OTA Enrollment Guide и раздел SCEP Payload в Enterprise Deployment Guide .
Согласно Обзору конфигурации устройства у вас есть только четыре варианта: