diff --git a/AltStore/Operations/VerifyAppOperation.swift b/AltStore/Operations/VerifyAppOperation.swift index 1bce9d1e..701adfef 100644 --- a/AltStore/Operations/VerifyAppOperation.swift +++ b/AltStore/Operations/VerifyAppOperation.swift @@ -70,32 +70,45 @@ class VerifyAppOperation: ResultOperation throw VerificationError.mismatchedBundleIdentifiers(app, sourceBundleID: self.context.bundleIdentifier) } - // Make sure this goes last, since once user responds to alert we don't do any more app verification. - if let commentStart = app.entitlementsString.range(of: ""), let commentEnd = app.entitlementsString.range(of: "") + if #available(iOS 13.5, *) { - // Psychic Paper private entitlements. - - let entitlementsStart = app.entitlementsString.index(after: commentStart.upperBound) - let rawEntitlements = String(app.entitlementsString[entitlementsStart ..< commentEnd.lowerBound]) - - let plistTemplate = """ - - - - - %@ - - - """ - let entitlementsPlist = String(format: plistTemplate, rawEntitlements) - let entitlements = try PropertyListSerialization.propertyList(from: entitlementsPlist.data(using: .utf8)!, options: [], format: nil) as! [String: Any] - - let error = VerificationError.privateEntitlements(app, entitlements: entitlements) - self.process(error) { (result) in - self.finish(result.mapError { $0 as Error }) + // No psychic paper, so we can ignore private entitlements + app.hasPrivateEntitlements = false + } + else + { + // Make sure this goes last, since once user responds to alert we don't do any more app verification. + if let commentStart = app.entitlementsString.range(of: ""), let commentEnd = app.entitlementsString.range(of: "") + { + // Psychic Paper private entitlements. + + let entitlementsStart = app.entitlementsString.index(after: commentStart.upperBound) + let rawEntitlements = String(app.entitlementsString[entitlementsStart ..< commentEnd.lowerBound]) + + let plistTemplate = """ + + + + + %@ + + + """ + let entitlementsPlist = String(format: plistTemplate, rawEntitlements) + let entitlements = try PropertyListSerialization.propertyList(from: entitlementsPlist.data(using: .utf8)!, options: [], format: nil) as! [String: Any] + + app.hasPrivateEntitlements = true + let error = VerificationError.privateEntitlements(app, entitlements: entitlements) + self.process(error) { (result) in + self.finish(result.mapError { $0 as Error }) + } + + return + } + else + { + app.hasPrivateEntitlements = false } - - return } self.finish(.success(()))