开发团队实施了越狱检测机制。但我们的一位客户报告说,他的手机从未越狱过,但他仍然无法运行我们的应用程序。 经调查,我们发现客户端已从应用商店安装了“La Terminal - SSH Client”应用程序。这是导致这个问题的原因。卸载此应用程序后,我们公司的应用程序运行良好。
越狱代码:
func isDeviceJailBroken() -> Bool {
if UIDevice.current.isSimulator { return false }
let appNames = ["cydia",
"Sileo",
"Icy",
"MxTube",
"RockApp",
"blackra1n",
"SBSettings",
"FakeCarrier",
"WinterBoard",
"IntelliScreen",
"loader",
"FlyJB",
"Zebra",
"WinterBoard",
"Snoop-itConfig",
"Terminal"]
for appName in appNames {
if UIApplication.shared.canOpenURL(URL(string: "\(appName)://")!) {
return true
}
}
return false
}
我认为这个 SSH 客户端应用程序的捆绑 ID 中有“终端”一词。也许这就是它引起问题的原因。 所以我下载了另一个应用程序“Beam Terminal”,它的捆绑 ID 中有 Terminal 一词。但这次我们公司的应用程序可以运行了。
La Terminal - SSH Client (Error)
https://itunes.apple.com/lookup?id=1629902861
bundleId: com.xibbon.LaTerminal
Beam Terminal (No Error)
https://itunes.apple.com/lookup?id=603488666
bundleId: com.beamwallet.BeamTerminal
谁能告诉我这里的图案是什么?
首先,这些不是“应用程序名称”。它们是 URL 方案。我假设您的开发团队已经收集了上述每个应用程序的 URL 方案,或者他们只是插入了应用程序名称,希望应用程序名称恰好与应用程序的 URL 方案匹配?很难确定,因为他们已经将“应用程序名称”与“url 方案”混为一谈,这是两个截然不同的东西。
无论如何,有问题的应用程序似乎已将上述“应用程序名称”之一注册为其 URL 方案,这就是为什么
canOpenURL()
返回 true
。