使用包标识符打开应用程序

时间:2011-08-29 11:46:50

标签: iphone cfbundleidentifier

是否可以使用bundle identifier从我们的应用程序中打开一个应用程序。假设我在设备com.test.app1com.test.app2上安装了两个应用。我可以从我的app2打开app1。

我知道openUrl方法。为此,我必须在info.plist中注册url方案。然后我可以使用以下方法:

[[UIApplication sharedApplication] openUrl:[NSURL urlWithString:@"myApp1://"]];

但是如果我没有注册网址方案或者不知道注册网址会怎么样。

任何想法......?

6 个答案:

答案 0 :(得分:7)

您可以使用私有API来执行此操作

Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject * workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
BOOL isopen = [workspace performSelector:@selector(openApplicationWithBundleID:) withObject:@"com.apple.mobilesafari"];

答案 1 :(得分:3)

我认为这不可能。

答案 2 :(得分:3)

您可以使用openUrl来电,但为了取得成功,您必须在项目的xy-Info.plist文件中添加一些值。

enter image description here

完成后,您可以致电:

[[UIApplication sharedApplication] openUrl:[NSURL urlWithString:@"xingipad://"]];

答案 3 :(得分:1)

@EvanJIANG的Swift版本答案。

guard let obj = objc_getClass("LSApplicationWorkspace") as? NSObject else { return false }
let workspace = obj.perform(Selector(("defaultWorkspace")))?.takeUnretainedValue() as? NSObject
let open = workspace?.perform(Selector(("openApplicationWithBundleID:")), with: "com.apple.mobilesafari") != nil
return open

答案 4 :(得分:0)

可以使用URL Schemes。

答案 5 :(得分:0)

答案:您无法仅使用Bundle标识符直接打开应用程序。

解决方案:您可以实现深层链接(并将您的包ID作为深层链接ID)概念来执行此操作:Deep-linking