如何从字符串中挂接 obj-c 选择器(通过调整)?

How to hook obj-c selector from string(by tweak)?

我们可以得到 ios 已安装的包 ID 列表,如下所示:

Class lsawsc = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [lsawsc performSelector:NSSelectorFromString(@"defaultWorkspace")];
NSArray *arr = [workspace performSelector:NSSelectorFromString(@"allInstalledApplications")];
for (NSString * tmp in arr)
{       
   NSLog(@"%@", tmp);
}

arr(NSArray) 是 bundle id 列表。而且我想在调整中通过钩子隐藏一些包 ID。但是不知道hook selector的代码怎么写...请帮忙,谢谢!

您可以只用过滤后的应用填充一个新数组并使用它:

NSArray *installedApps = /* result of allInstalledApplications invocation */;

NSMutableArray *filteredApps = [NSMutableArray new];

for (NSString *app in installedApps) {
    if (/* filter/hook allows app */) {
        [filteredApps addObject:app];
    }
}

// Use filteredApps

注意:LSApplicationWorkspace 是私有的API,因此使用它会阻止在 Apple App Store 中发布。