You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在每次构建/归档时清除WKWebView的本地存储?

问题描述

我正在开发一款嵌入WKWebView的应用,该WKWebView加载的网站会设置并读取本地存储。当前使用的基础配置如下:

let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.load(URLRequest(url: URL(string: "https://www.somewebsite.com")!))

但遇到一个问题:归档/分发测试版应用时,构建产物会保留开发期间(Xcode构建运行时)设置的本地存储数据,导致分发版本里仍有这些残留数据。想知道有没有办法在每次构建/归档时自动清除这些数据?


解决方法

方法一:添加Xcode构建前脚本(推荐)

直接在Xcode项目设置里添加构建前脚本,每次构建时自动清理WKWebView的本地存储目录:

  1. 打开Xcode项目,选中目标(Target),切换到Build Phases标签页
  2. 点击左上角的+按钮,选择New Run Script Phase
  3. 将脚本内容替换为:
# 仅在Release构建(归档默认用该配置)时清除数据
if [ "${CONFIGURATION}" = "Release" ]; then
    rm -rf "${SYMROOT}/../Build/Products/${CONFIGURATION}-${PLATFORM_NAME}/${PRODUCT_NAME}.app/Library/WebKit/WebsiteData"
fi

方法二:代码层面启动时清除数据

如果需要更灵活的控制,可以在App启动时,针对Release版本调用API清除本地存储:

import WebKit

func clearWKWebViewLocalStorage() {
    let dataStore = WKWebsiteDataStore.default()
    let allDataTypes = WKWebsiteDataStore.allWebsiteDataTypes()
    dataStore.removeData(ofTypes: allDataTypes, modifiedSince: Date.distantPast) {
        print("WKWebView本地存储已清除")
    }
}

// 在App启动入口调用,比如AppDelegate或SceneDelegate的启动方法中
#if RELEASE
clearWKWebViewLocalStorage()
#endif

注意:需要为Release配置添加编译标志——在Target的Build Settings -> Swift Compiler - Custom Flags -> Other Swift Flags里,为Release项添加-D RELEASE。

方法三:手动清理构建缓存

如果不想修改代码或添加脚本,也可以在归档前手动清理:

  • 点击Xcode顶部菜单Product -> Clean Build Folder(快捷键Shift+Command+K)
  • 或者直接删除~/Library/Developer/Xcode/DerivedData下对应项目的目录,彻底清除所有构建残留

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:47:18