在MacOS上使用WebKit进行构建时,为什么会出现“预期的平台名称”错误?

问题描述 投票:0回答:1

我最近将构建系统更新为macOS 10.15和Xcode 11.3.1,但是当我尝试编译我的程序之一时,出现“期望的平台名称,例如'macos'”错误,并且构建停止。我已经确定只有在使用WebKit构建该问题时才会发生-如果我注释掉该代码,则该软件将正确构建并运行(当然,除了显示HTML的能力之外)。我想知道问题是否可能出在我使用的WebViews中(不推荐使用),所以我改为将代码更新为WKWebView,但问题仍然存在。当然,由于出现此错误,所以我不知道是否已正确更新到WKWebView-它不会运行,并且这部分代码也不会显示任何其他错误。

HTMLViewController.h:

#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>
#import "ReadEML.h"

@interface HTMLViewController : NSViewController //<WebPolicyDelegate>
{
    NSSize dpi; 
}
@property (assign) IBOutlet WKWebView *mailContentView;

- (WKWebView*)contentView;
- (void)displayContentFromReader:(id)emlReader;
- (void)setFormattingOn:(bool)formatting;

- (void)webView:(WKWebView *)webView
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;

@end

HTMLViewController.m

#import "HTMLViewController.h"
#import "Webtools.h"
#import "Stringtools.h"

@interface HTMLViewController ()

@end

@implementation HTMLViewController

- (void)awakeFromNib {
    CGDirectDisplayID displayID = [_mailContentView.window.screen.deviceDescription[@"NSScreenNumber"] unsignedIntValue];
    CGSize size = CGDisplayScreenSize(displayID);
    CGDisplayModeRef mode = CGDisplayCopyDisplayMode(displayID);

    dpi.width = CGDisplayModeGetWidth(mode) * 25.4 / size.width;
    dpi.height = CGDisplayModeGetHeight(mode) * 25.4 / size.height;
    CGDisplayModeRelease(mode);

    float scaling = [AppDelegate.sharedAppdelegate getPreferenceForKey:@"DefaultZoom"]?[[AppDelegate.sharedAppdelegate getPreferenceForKey:@"DefaultZoom"] intValue]:100;

    [_mailContentView.webFrame.frameView.documentView scaleUnitSquareToSize:NSMakeSize(dpi.width / (dpi.width / (scaling / 100.0)), dpi.height / (dpi.height / (scaling / 100.0)))];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    return self;
}

- (WKWebView*)contentView {
    return _mailContentView;
}

- (void)webView:(WKWebView *)webView
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    if (navigationAction.request.URL) {
        decisionHandler(WKNavigationActionPolicyCancel);
        [NSWorkspace.sharedWorkspace openURL:navigationAction.request.URL];
    } else {
        decisionHandler(WKNavigationActionPolicyAllow);
    }
}

- (void)displayContentFromReader:(id)dataCollector {
    @autoreleasepool {        
        NSString* pathStem = getTempCacheDirectory();
        NSURL* rootURL = [NSURL URLWithString:[pathStem stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        NSURL* ReadRootURL = [NSURL fileURLWithPath:[pathStem stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

        [_mailContentView.webFrame loadHTMLString:[dataCollector getContent:@"RawHTML"] baseURL:ReadRootURL];
    }
}

@end

我的直觉告诉我,这个特殊问题不在我的代码中-有人可以暗示还会发生什么吗?就像我说的那样,如果我不导入.h文件,而是删除了代码中所有对其用法的引用,则代码可以毫无问题地进行编译。

它也可以在macOS 10.14上毫无问题地进行编译。

我很困惑!

objective-c macos webkit wkwebview
1个回答
0
投票

这可能会帮助某些人解决这个特定的问题-我找到了一个适合我的解决方案,但是我对此感到不满意,因为它感觉很hacky。

只需在头文件中添加以下定义,代码就可以毫无困难地进行编译。我仍然很想了解Apple为什么更改了此设置,无论是故意还是错误,以及“正确”的解决方案应该是什么。

#define TARGET_OS_MACCATALYST 1
© www.soinside.com 2019 - 2024. All rights reserved.