gpt4 book ai didi

ios - 包含 iOS8 的 WebKit 框架验证失败

转载 作者:技术小花猫 更新时间:2023-10-29 10:47:11 31 4
gpt4 key购买 nike

我正在使用 WebKit 框架的 WKWebView,当我尝试提交到应用商店时,我收到了这个错误:

Your app contains non-public API usage. Please review the errors, correct them, and resubmit your application.
The app links to non-public libraries in Payload...: /System/Library/PrivateFrameworks/WebKit.framework/WebKit

如果我将部署目标设置为 8.0,则错误消失,但我也想支持 iOS 7。该错误似乎是 iOS7 也有 WebKit 框架的结果,但当时它是私有(private)的。

因此我想动态链接到 WebKit 库。我如何在 XCode 中执行此操作?

最佳答案

好吧,经过数小时的挫折,终于成功了。

在 Apple 修复验证之前,关键是在运行时动态链接到 WebKit 框架。您的项目应该已经使用运行时检查来优雅地回退到 iOS7 和更早版本的 UIWebView,即检查 [WKWebView 类]。

第 1 步:从项目设置中删除 WebKit 框架。转到您的目标 -> 常规 -> 链接框架和库,然后删除 WebKit。此时,您的代码将编译但无法链接,因为它无法解析 WKWebView 和关联的符号。

第 2 步:编辑您的 main.m 文件以动态加载库:

#import <UIKit/UIKit.h>
#import <TargetConditionals.h>
#import <dlfcn.h>
#import "MyAppDelegate.h"

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

int main(int argc, char * argv[])
{
@autoreleasepool {
// Dynamically load WebKit if iOS version >= 8
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
#if TARGET_IPHONE_SIMULATOR
NSString *frameworkPath = [[NSProcessInfo processInfo] environment][@"DYLD_FALLBACK_FRAMEWORK_PATH"];
if (frameworkPath) {
NSString webkitLibraryPath = [NSString pathWithComponents:@[frameworkPath, @"WebKit.framework", @"WebKit"]];
dlopen([webkitLibraryPath cStringUsingEncoding:NSUTF8StringEncoding], RTLD_LAZY);
}
#else
dlopen("/System/Library/Frameworks/WebKit.framework/WebKit", RTLD_LAZY);
#endif
}

return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
}
}

我使用运行时操作系统版本检查,因为 Apple 只允许从 iOS 8 开始加载动态库。模拟器和实际设备的库位置不同,所以我使用条件编译来检查。

第 3 步: 由于库是动态加载的,因此调用 [WKWebView class] 和 [WKWebView alloc] 将不起作用。遍历你的代码,改变每一个实例

[WKWebView class]
// change to:
NSClassFromString(@"WKWebView")

每次分配 WKWebView 时都会更改:

[WKWebView alloc]
// change to:
[NSClassFromString(@"WKWebView") alloc]

您还必须为关联的类执行此操作,包括 WKWebViewConfiguration,WKProcessPool、WKUserScript 以及您正在使用的任何其他工具。检查您的链接器错误是否有任何您可能遗漏的内容。

第 4 步: 现在您的代码应该可以成功编译。打包,提交到应用商店,庆祝。

关于ios - 包含 iOS8 的 WebKit 框架验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897123/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com