Команда разработчиков реализовала механизм обнаружения джейлбрейка. Но один из наших клиентов сообщил, что его телефон никогда не был взломан, но он все равно не может запустить наше приложение. В ходе расследования мы обнаружили, что клиент установил приложение 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 есть слово «Терминал». Возможно, именно поэтому это вызывает проблемы. Поэтому я загрузил еще одно приложение «Beam 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
.