web-dev-qa-db-ja.com

LSApplicationWorkspaceはiOS11では機能しませんか?

すべてのアプリケーションとスキームをスキャンし、プライベートAPIを使用して取得する必要があるプライベートアプリがありますLSApplicationWorkspace defaultWorkspaceprivateURLSchemesallInstalledApplicationsなどの他の関数メソッドを使用します。このアプリはうまく機能し、iOS 11より前のプライベートAPIから必要なものをすべて取得できますが、このバージョンでは、警告と空の配列しか表示されませんでした。 Appleは、開発者がiOS11のプライベートで使用できないプライベートAPIを制限しているようです。

だから私の質問は、iOS 11で私のニーズを達成するための代替方法は何ですか?

14
ovo

更新:この方法はiOS12では機能しません-資格が必要です

特定のアプリケーションがインストールされているかどうかを確認する方法があります。返されたallInstalledApplicationsのようなすべてのアプリのリストではありませんが、特定のバンドルIDを照会するのに役立ちます。

次に例を示します。メソッドはバンドルIDを受け取り、デバイスにインストールされている場合はtrueを返します。

- (BOOL)checkIfAppInstalled: (NSString*)bundleID {
    dlopen("/System/Library/PrivateFrameworks/MobileContainerManager.framework/MobileContainerManager",RTLD_NOW);
    Class MBAppManager = NSClassFromString(@"MCMAppDataContainer");
    NSError  * error ;
    id contentApp = [MBAppManager performSelector:@selector(containerWithIdentifier:error:) withObject:bundleID withObject:error];
    return contentApp != nil;
}
2
inspector_60

企業では、Appleモバイルデバイス管理(MDM)プロトコルManagedApplicationListコマンドを使用して、管理対象アプリケーションのステータスを取得できます

0
Sweet.Shi

から この投稿 。元の質問の下の@ovoのコメントから、それはうまくいくようです。

MobileContainerManager.frameworkを使用すると、バンドルIDを使用してアプリがインストールされているかどうかを確認できます。

//If the device is iOS11
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 11.0) {
        NSBundle *container = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/MobileContainerManager.framework"];
        if ([container load]) {
            Class appContainer = NSClassFromString(@"MCMAppContainer");

            id test = [appContainer performSelector:@selector(containerWithIdentifier:error:) withObject:bundleId withObject:nil];
            NSLog(@"%@",test);
            if (test) {
                return YES;
            } else {
                return NO;
            }
        }
        return NO;

    } else {
           //Usual way
    }
0
strano

プライベートAPIはまさにそれです—プライベートAPI。これの使用は完全にサポートされていないため、OSの将来のバージョンで引き続き機能するプライベートAPIに依存することはできません。

さらに、プライベートAPIを使用するアプリがApp Storeにアクセスできたとしたら、それはAppleのレビュー担当者がスキャンするものの1つであるため、非常に驚​​きます。

0
Charles Srstka