iOS12 어플리케이션 설치 여부 판단
일반적으로 URL schemes를 통해 판단하는 것은 큰 문제가 없지만, 일부 안전 수준이 높은 경우 정확한 판정을 위해서는 개인 API 방법이 필요하다.
인터넷에는 개인 API 방법으로 설치 여부를 판단하는 방식을 소개하는 글이 많다.iOS10 이전에 LSApplicationWorkspac을 통해 설치 응용 프로그램 목록을 받는 방식으로 모든 응용 프로그램의 bundleID를 받습니다
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
NSArray *allApplications = [workspace performSelector:@selector(allApplications)];
for (NSString *appStr in allApplications) {
NSString *app = [NSString stringWithFormat:@"%@",appStr];
NSRange range = [app rangeOfString:@" App bundle ID"];
if (range.length > 1) {
NSLog(@" ");
}
}
iOS11에 이르러 이러한 방식은 이미 효력을 상실하였으며, 개인 MCMAPpContainer의 방식을 통해 bundID가 설치되었는지 아닌지를 판단하였다.
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];
if (test) {
return YES;
}else{
return NO;
}
}
return NO;
안타깝게도 iOS12에 이르러 이런 방식도 권한 문제로 금지되었다.그럼 다른 방법으로 판단할 수 있는 방법이 있나요?
연구를 통해 LSApplicationWorkspace 클래스의 all Applications 방법은 iOS10 이후 더 이상 사용할 수 없게 되었다.하지만 한 가지 방법
installedPlugins
을 사용할 수 있다.이 방법은 현재 시스템에 설치된 모든 extension 플러그인을 되돌려줍니다. 구체적인 코드는 다음과 같습니다.Class lsawsc = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [lsawsc performSelector:NSSelectorFromString(@"defaultWorkspace")];
NSArray *plugins = [workspace performSelector:NSSelectorFromString(@"installedPlugins")]; // plugins
[plugins enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *pluginID = [obj performSelector:(@selector(pluginIdentifier))];
NSLog(@"%@",pluginID);
}];
예를 들어 위챗: iOS12의 경우 세 개의 플러그인com을 되돌릴 수 있습니다.tencent.xin.siriext com.tencent.xin.siriextensionui com.tencent.xin.sharetimeline 이름에 따라 공유 플러그인 하나,siri 플러그인 두 개.
이렇게 하면 응용 프로그램의 설치 여부를 판단할 수 있지만, 아직 두 가지 작은 문제가 존재한다
현재 iOS12 새 버전 판단 앱 설치는 이런 옆에서 두드리는 방법만 찾았을 뿐 더 좋은 방법이 있다면 알려주세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.