Ios Mac Catalyst是否支持UIActivityViewController?

Ios Mac Catalyst是否支持UIActivityViewController?,ios,swift,uikit,uikitformac,Ios,Swift,Uikit,Uikitformac,我正在尝试将我们的应用程序移植到Mac。但似乎在Mac应用程序上并没有出现适用于iOS/iPadOS的功能。没有任何弹出窗口 let activityController = UIActivityViewController(activityItems:items, applicationActivities:nil) activityController.setValue(NSLocalizedString("App Name", comment:""), forKey:"subject")

我正在尝试将我们的应用程序移植到Mac。但似乎在Mac应用程序上并没有出现适用于iOS/iPadOS的功能。没有任何弹出窗口

let activityController = UIActivityViewController(activityItems:items, applicationActivities:nil)

activityController.setValue(NSLocalizedString("App Name", comment:""), forKey:"subject")
activityController.modalPresentationStyle = .popover

let popoverController = activityController.popoverPresentationController

if popoverController != nil {
      popoverController!.barButtonItem = sender
      popoverController!.permittedArrowDirections = .down
}

self.present(activityController, animated:true, completion:nil)
看到一条可能相关的错误消息:

setting preferences outside an application's container requires user-preference-write or file-write-data sandbox access
我在沙盒中尝试了各种设置,但效果不佳

PS:删除此行后使其正常工作:activityController.setValue(NSLocalizedString(“应用程序名称”,注释:“”),forKey:“主题”)


显示的选项也取决于。例如,如果项目中有一个字符串和一个图像,那么“保存到照片”将不会显示。

嗯,我似乎有一个有趣的类似问题。我还得到了一个“更多”的迷你弹出窗口。但是如果我使用UIButton而不是UIView作为目标,它就可以工作

使用UIButton从调用此代码可以:

func shareImage(_ image: UIImage, from fromView: UIView) {
    let activityViewController = UIActivityViewController(activityItems: [image], applicationActivities: nil)
    activityViewController.popoverPresentationController?.sourceView = fromView
    activityViewController.popoverPresentationController?.sourceRect = fromView.bounds
    self.present(activityViewController, animated: true, completion: nil)
}
可能是macOS/Catalyst中的错误

这似乎还取决于共享的项目类型。带有PDF数据的相同代码不会在macOS上共享。但是UIImage运行得很好:///p>
\if\u MAC\u CATALYST_
#if _MAC_CATALYST_
//fix mac catalyst bug: UIActivityViewController add image to photo
@interface NSObject (FixCatalystBug)

@end

@implementation NSObject  (FixCatalystBug)

+ (void)load{
    Class cls = NSClassFromString(@"NSXPCDecoder");
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{

        SEL selectors[] = {
            #pragma clang diagnostic push
            #pragma clang diagnostic ignored "-Wundeclared-selector"
            @selector(_validateAllowedClass:forKey:allowingInvocations:)
            #pragma clang diagnostic pop
        };

        for (NSUInteger index = 0; index < sizeof(selectors) / sizeof(SEL); ++index) {
            SEL originalSel = selectors[index];
            SEL swizzledSel = NSSelectorFromString([@"fs_swizzled_" stringByAppendingString:NSStringFromSelector(originalSel)]);
            [cls fs_exchangeImpWithOriginalSel:originalSel swizzledSel:swizzledSel];
        }
    });
}

- (BOOL)fs_swizzled__validateAllowedClass:(Class)cls forKey:(id)key allowingInvocations:(id)allowingInvocations{
    BOOL _validate = NO;
    @try {
        _validate = [self fs_swizzled__validateAllowedClass:cls forKey:key allowingInvocations:allowingInvocations];
    } @catch (NSException *exception) {
        if ([key isEqualToString:@"NS.objects"] && [cls isKindOfClass:[NSURL class]]) {
            _validate = YES;
        }
    }
    return _validate;
}

@end
#endif
//修复mac catalyst错误:UIActivityViewController将图像添加到照片 @接口NSObject(FixCatalystBug) @结束 @实现NSObject(FixCatalystBug) +(空)荷载{ 类cls=NSClassFromString(@“NSXPCDecoder”); 静态调度一次; 一次发送(一次发送)^{ SEL选择器[]={ #pragma-clang诊断推送 #已忽略pragma-clang诊断“-未声明的选择器” @选择器(_validateAllowedClass:forKey:allowingInvocations:) #pragma-clang诊断流行语 }; 对于(整数索引=0;索引
UIActivityViewController
在Mac上为我显示。尝试取消对允许箭头方向的限制。嗨,谢谢你的帮助。这不起作用,但我看到一条消息“内容需要刷新:是):在应用程序容器外设置首选项需要用户首选项写入或文件写入数据沙盒访问”-我已将图片文件夹设置为读/写,沙盒中还有其他需要设置的内容吗?@rmaddy能否显示您的代码?当我显示UIActivityViewController时,我只得到一个带有“更多”文本的“按钮”。@sabiland你真的得到了一个窗口显示吗?我的什么也看不出来。你是否在Xcode中设置了要显示的内容?我只看到一个小弹出窗口,带有一个打开系统设置的“更多”按钮:S:)我在删除以下行后使其工作:activityController.setValue(NSLocalizedString(“应用程序名”,注释:),forKey:“主题”),我还检查了图像是否可以发送到照片应用程序,通过电子邮件发送。。。但不是空投。我复制/粘贴了你的代码(用我的UIButton),但我仍然会弹出“更多”的窗口:)天哪:)我发现了我遇到的问题。我正在将PNG发送到UIActivityViewController。这就是问题所在。当我发送纯UIImage时,一切正常:)当我选择添加到照片时,我得到以下异常:[xpc.exceptions]连接到pid 17561上名为com.apple.share.System.Add-to-iphoto.apple-extension-service的服务:在解码收到的选择器时捕获异常_completeRequestReturningItems:forExtensionContextWithUUID:completion:,正在删除传入消息。异常:解码参数0(调用的#2)时异常:异常:键“NS.objects”的值属于意外的类“NSURL”。允许的类是“{(NSDate、NSNumber、NSData、NSDictionary、NSArray、NSString)}”。虽然此代码可能会回答此问题,但提供有关如何和/或为什么解决此问题的附加上下文将提高答案的长期价值。