1

エンタープライズ開発プログラムを使用して、社内の IOS アプリを展開しています。アプリ内からアップグレードをダウンロードしてインストールするボタンをユーザーがタッチできるようにする VC がある段階にあります。

それはうまくいきます。ただし、ネットワークが少し遅い場合、「Would you like to install, such and such...」という IOS プロンプト メッセージがユーザーにスローされ、少し遅れて表示されます。したがって、ユーザーが「インストール」ボタンを押した後、それを無効にします。ただし、IOS からプロンプトが表示されたときにユーザーが「キャンセル」に触れた場合、これを検出する方法がわかりません。

iPhone 3、4、および 5 の複数のデバイスで Xcode 4.5 および IOS6.0 を使用しています。

リンク全体を示すことなく、ダウンロードを行うコードは次のとおりです。

- (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:(NSInteger)buttonIndex {

if (buttonIndex == 0) {

    [self.IBOInstallActivityInd startAnimating];
    [self enableInstallButton:NO];
    self.tabBarController.tabBar.userInteractionEnabled = NO;
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:APP_INSTALL_FROM]];

    }

} // actionSheet:clickedButtonAtIndex

そして、私が言ったように、良いです - それは動作します. しかし、ユーザーがプロンプトに対して「キャンセル」をタッチした場合、私はそれを伝えたいと思っています。ご覧のとおり、ユーザー インターフェイスをロックしています。アプリが閉じられてアップグレードされる場合、その理由を尋ねるかもしれません。

さて、ネットワークの速度にもよりますが、ユーザーがボタンを複数回クリックしないことを証明したいと思います。ただし、ユーザーがキャンセルした場合は、ユーザー インターフェイスを再開したり、タブ バーを有効にしたりできるようにしたいと考えています。

Web をクロールしましたが、何も見つかりませんでした。そして、その答えはおそらく Apple サイトにあると思います。しかし、それには非常に多くの読書が必要です。

誰かが何かアイデアを持っていますか?

4

1 に答える 1

2

キャンセルアクションをキャプチャする方法はわかりませんが、この状況にどのように対処するかを説明できます。

コンパイルするすべてのビルドには特定のリビジョンが組み込まれており、サーバーのplistファイルにも埋め込まれています。このアプリは、2つのバージョン番号を比較して、更新が利用可能かどうかを判断します(バージョンが一致しないため、ロールバックも可能です)。

あなたの場合、あなたができることは、単にそのVCにX秒ごとにサーバーを検証させ、状態を更新させることです。アップグレードを行うとアプリから起動し、そうでない場合は更新するとボタンが再び有効になります。

より簡単な解決策:VCに移動するときにのみこのクエリを実行します。したがって、キャンセルした場合は、VCを終了して再入力する必要があります。

plistファイルの解析は次のようになります。

            NSString *localCopyPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
            localCopyPath = [localCopyPath stringByAppendingPathComponent:@"MDM_SERVER.plist"];
            NSFileManager *fileManager = [[NSFileManager alloc] init];

            BOOL created = [fileManager createFileAtPath:localCopyPath contents:plistData attributes:nil];                
            if (created) {
                NSDictionary *fullDict = [NSDictionary dictionaryWithContentsOfFile:localCopyPath];
                if (fullDict) {
                    NSArray *a = [fullDict objectForKey:@"items"];
                    NSDictionary *mdmDict = [a objectAtIndex:0];
                    NSDictionary *metaDict = [mdmDict objectForKey:@"metadata"];

                    // String of format "1.0.1779"
                    NSString *serverFullVersion = [metaDict objectForKey:@"bundle-version"];

                    // We will always compare on the last digit
                    NSUInteger lastPeriod = [serverFullVersion rangeOfString:@"." options:NSBackwardsSearch].location;
                    if (NSNotFound != lastPeriod && [serverFullVersion length] > lastPeriod) {
                        // update the time when we found an answer
                        mdmCheckedAt = [NSDate date];
                        NSString *serverSvnRevision = [serverFullVersion substringFromIndex:(lastPeriod + 1)];
                        // the big test - if our own svn version is different, then load the 
                        // URL to tell iOS to upgrade ourself
                        if (![kRevisionNumber isEqualToString:serverSvnRevision]) {
// Your Code HERE
于 2012-11-12T18:22:16.237 に答える