Почему при сборке с WebKit на MacOS появляется ошибка «Ожидается имя платформы»? - PullRequest
0 голосов
/ 17 апреля 2020

Я недавно обновил свою систему сборки до 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.

Я озадачен!

1 Ответ

0 голосов
/ 18 апреля 2020

Это может помочь некоторым людям с этой конкретной c проблемой - я нашел решение, которое работает для меня, но я не доволен им, потому что оно кажется хакерским.

Просто добавьте следующее определите свой заголовок, и ваш код должен скомпилироваться без труда. Мне все равно было бы интересно понять, почему Apple изменила это, намеренно или из-за ошибки, и каким должно быть «правильное» решение.

#define TARGET_OS_MACCATALYST 1
...