我想在重新安装之前先卸载旧版本的iOS App

时间:2018-08-24 12:30:39

标签: ios swift

enter image description here

我创建了一个具有安装按钮的应用程序。通过点击这些按钮,用户可以安装企业应用程序(内部)。但是它只是替换设备中现有的版本,因此文档目录中存在的所有数据都保留在那里。我想要全新安装,这意味着它应该卸载该应用程序的任何现有版本并重新安装较新的版本。

    let installableLinkStr = "itms-services://?action=download-manifest&url=https://djoglobal.box.com/shared/static/jldbxp0mg4668jne2xuif8i43mh8dzwd.plist"

    guard let url = URL(string: installableLinkStr) else {
        print("Couldn't create URL")
        return
    }
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.openURL(url)
    }

3 个答案:

答案 0 :(得分:2)

我建议您在要更新的应用程序中实施版本迁移例程,而不是尝试完全删除该应用程序。总体策略:

  1. 启动时,检查当前版本是否为更新。您可以通过将CFBundleShortVersionString保留在用户默认值中,然后检查当前CFBundleShortVersionString是否与用户默认值中存储的字符串相同,并适当地处理结果,来确定当前版本是否为更新。别忘了坚持新的CFBundleShortVersionString进行更新,以备将来使用。
  2. 在更新时从“文档”目录中删除适当的文件。您可以删除文档目录的内容,或者最好将临时文档存储在嵌套目录中,该目录仅包含要在版本更改时删除的文件。
// in your app delegate
func application(_: UIApplication,
                 didFinishLaunchingWithOptions _: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Bool {
    if isVersionUpdate {
        // Delete unwanted documents.
    }
    return true
}

var isVersionUpdate: Bool {
    if let documentsVersion = documentsVersion {
        return appVersion != documentsVersion
    }
    return false
}

var documentsVersion: String? {
    get {
        return UserDefaults.standard.string(forKey: "DocumentsVersion")
    }
    set {
        UserDefaults.standard.set(newValue, forKey: "DocumentsVersion")
    }
}

var appVersion: String {
    guard let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String,
        !version.isEmpty
    else { fatalError("Argh, no version?!?!") }
    return version
}

注意:此答案未考虑到当前版本号是否高于存储的版本号。

答案 1 :(得分:1)

您需要为自己的内部应用程序使用MDM。 您将能够发送到MDM-server命令来重新安装应用程序。 MDM服务器将能够在您的设备上卸载并安装应用。

答案 2 :(得分:0)

您可以清除文档文件夹中的数据,包括数据库,json等。 是的,您可以盲目删除这些内容,这不会造成任何问题。因为如果您打算删除该应用程序并再次重新安装它,那么在这种情况下,您不必担心它所拥有的数据。因此,您可以编写一个清除所有内容的重置函数,在这种情况下,您可以在启动新应用程序时调用此函数。(可以通过应用程序的版本进行检测。)