我正在开发一个iPhone应用程序,它将在企业中安装很少的第三方应用程序.我有关于包ID的信息.有没有办法使用一些系统API判断应用程序是否已经安装?当前再次安装应用程序,覆盖当前安装.我需要以某种方式防止这种情况.(如果应用程序已经安装,苹果的AppStore应用程序将禁用安装选项.)

推荐答案

我认为这是不可能直接实现的,但如果应用程序注册uri方案,你可以测试它.

例如,facebook应用程序的URI方案是fb://.你可以在信息中注册.你的应用程序列表.[UIApplication canOpenURL:url]将告诉您某个url是否会打开.因此,如果测试fb://是否会打开,将表明安装了一个注册了fb://的应用程序——这对facebook应用程序来说是一个很好的提示.

// check whether facebook is (likely to be) installed or not
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
    // Safe to launch the facebook app
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"fb://profile/200538917420"]];
}

Objective-c相关问答推荐

警告:格式字符串不是字符串文字(可能不安全)

Objective C 中的多个委托

Objective C:给定一个Class id,我可以判断这个类是否实现了某个协议吗?还是有一定的 Select 器?

在哪里以及如何 __bridge

Objective-C 对象的列表 Select 器

处理 ARC 中的指针对指针所有权问题

具有匿名函数/块的 NSTimer?

UITableView 滚动事件

iOS 崩溃日志(log)中的异常类型

如果目录不存在,是否有更安全的方法来创建目录?

使用单独的委托/数据源时的 UITableView 问题

Objective C 中的对象分配和初始化

如何本地化 iOS 故事板

以编程方式设置 UIView 的自动调整大小掩码?

如何将 tintColor 应用于 UIImage?

使用 Objective-C 发布多部分/表单数据

使用 cocoaLumberjack 将日志(log)文件存储在哪里

判断 UIViewController 是否即将从导航堆栈中弹出?

iOS中的活动生命周期相当于什么?

如何将按钮放在不会在 iOS 中随表格滚动的 UITableView 上