如何在每次构建/归档时清除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的本地存储目录:
- 打开Xcode项目,选中目标(Target),切换到Build Phases标签页
- 点击左上角的
+按钮,选择New Run Script Phase - 将脚本内容替换为:
# 仅在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
相关产品推荐
相关产品推荐

