1. ホーム
  2. iphone

iPhoneへの設定プロファイルのインストール - プログラムによるもの

2023-08-30 05:53:11

質問

iPhoneアプリケーションに構成プロファイルを同梱し、必要に応じてインストールしたいのですが。

プロビジョニングプロファイルではなく、コンフィギュレーションプロファイルについて話していることに注意してください。

まず第一に、そのようなタスクは可能です。Web ページに構成プロファイルを配置し、Safari からそれをクリックすると、インストールされます。この場合、quot; Installed" は、インストール UI が呼び出されることを意味しますが、私はそこまでできませんでした。

そこで私は、プロファイルのインストールを開始するには、URL としてプロファイルにナビゲートする必要があるという理論に基づいて作業していました。私はプロファイルをアプリ バンドルに追加しました。

A) まず、バンドルにfile://のURLを入れて[sharedApp openURL]を試しました。幸運はありません-何も起こりません。

B) 次に、プロファイルへのリンクを持つHTMLページをバンドルに追加し、UIWebViewにロードしました。リンクをクリックしても何も起こりません。しかし、SafariでWebサーバーから同じページをロードすると、リンクはクリック可能で、プロファイルがインストールされ、正常に動作します。私は UIWebViewDelegate を提供し、すべてのナビゲーション要求に YES と答えましたが、違いはありませんでした。

C) 次に、Safari で私のバンドルから同じ Web ページを読み込もうとしました([sharedApp openURL] を使用) - 何も起こりません。私は、Safari が私のアプリ バンドル内のファイルを見ることができないことを推測します。

D) ウェブサーバーにページとプロファイルをアップロードすることは可能ですが、組織レベルでは苦痛であり、言うまでもなく、失敗の余分なソースです (3G のカバレッジがない場合はどうなるか?など)。

そこで、私の大きな疑問があります。**プログラム的にプロファイルをインストールするにはどうしたらよいでしょうか。

そして小さな疑問は、UIWebView 内でリンクをクリックできないようにするにはどうしたらよいでしょうか。から file:// URL をロードすることは可能ですか? 私の を読み込むことはできますか?そうでない場合、iPhone のローカルな場所にファイルを置いて、Safari がそれを見つけることができるようにすることはできますか?

B)のEDITです。 問題は、プロファイルにリンクしているという事実のどこかにあります。私はそれを .mobileconfig から .xml にリネームし (それは本当に XML であるので)、リンクを変更しました。そして、リンクは私のUIWebViewで機能しました。名前を変えても同じです。プロファイルをインストールするとアプリが終了してしまうので、UIWebViewはアプリケーション全体に関わることをやりたがらないようです。UIWebViewDelegateを使用して、それがOKであることを伝えようとしましたが、それは納得のいくものではありませんでした。UIWebView内のmailto: URLのための同じ動作。

mailtoの場合。 の URL に対して、一般的なテクニックはそれらを [openURL] 呼び出しに変換することですが、私の場合、それはうまくいきません、シナリオ A を参照してください。

itms: URLについては、しかし、UIWebViewは期待どおりに動作します...。

EDIT2です。 openURL]でSafariにデータURLを送り込んでみましたが、うまくいきませんので、こちらをご覧ください。 iPhoneでDATAを開く。サファリでURLを開く

EDIT3です。 Safariがfile:// URLをサポートしていないことに関する多くの情報を発見しました。しかし、UIWebViewは非常にサポートしています。また、シミュレータのSafariでは問題なく開くことができました。後者の部分が最もイライラさせられます。


EDIT4です。 私は解決策を見つけられませんでした。その代わりに、ユーザーがプロファイルを電子メールで送信できるような、2 ビット構成の Web インターフェイスを用意しました。

どのように解決するのですか?

1) ローカルサーバーをインストールします。 ルーティングHTTPSサーバ



2) カスタムヘッダーを設定する :

[httpServer setDefaultHeader:@"Content-Type" value:@"application/x-apple-aspen-config"];

3) mobileconfigファイルのローカルルートパス(Documents)を設定します。

[httpServer setDocumentRoot:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]];

4) ウェブサーバーがファイルを送信する時間を確保するために、次のように:

Appdelegate.h

UIBackgroundTaskIdentifier bgTask;

Appdelegate.m
- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSAssert(self->bgTask == UIBackgroundTaskInvalid, nil);
    bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{
        dispatch_async(dispatch_get_main_queue(), ^{
            [application endBackgroundTask:self->bgTask];
            self->bgTask = UIBackgroundTaskInvalid;
        });
    }];
}

5) コントローラーで、Documents に保存されている mobileconfig の名前で safari を呼び出します。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://localhost:12345/MyProfile.mobileconfig"]];