标签: ios8-share-extension

iOS 共享扩展不会终止

我创建了一个带有自定义 UI 的 iOS 共享扩展(不使用 SLComposeServiceViewController),一切都运行良好。

调用扩展后,它会获取共享 URL 或文本并将其发送。这就是它所做的一切,而且效果很好。

自定义 UI 很简单。一个图像视图显示一个图形,表明它正在发送,然后在完成后更改为“已发送”。然后这个就消失了。

问题是完成此操作后,扩展似乎消失了,但我无法再控制主机应用程序。就好像一个看不见的窗户或视图位于一切之上。(例如,Safari 中的图像旋转器仍然旋转,但我无法滚动或点击链接或按钮等)

[self.extensionContext completeRequestReturningItems:nil completionHandler:nil];共享完成后我会打电话,据我了解,这应该会关闭我的用户界面。我也尝试过[self.view removeFromSuperview]但没有运气。

发生在模拟器和设备上。我有什么遗漏的吗?

编辑:这是我为测试共享而构建的简单应用程序的视图层次结构,在共享之前和之后的 Reveal 中看起来像这样。该应用程序有两个按钮:共享文本和共享 URL,每个按钮都会弹出一个标准共享表。

http://joshh.is/1utYnKS

http://joshh.is/1rdVo34

objective-c ios ios8-share-extension

5
推荐指数
1
解决办法
1730
查看次数

如何在ios中访问共享扩展中的keyWindow?

我需要在我的应用程序的共享扩展中访问 keyWindow
- 添加一些指示器视图
- 访问窗口的宽度和高度

我在共享扩展类中编写了以下行:

UIWindow *mainWindow = [[UIApplication sharedApplication] keyWindow];
Run Code Online (Sandbox Code Playgroud)

但是,它说“sharedApplication”不可用。
如何访问共享扩展中的 keyWindow?

需要您的宝贵建议。
提前致谢

ios ios8 ios-app-extension ios8-share-extension ios8-extension

5
推荐指数
1
解决办法
3258
查看次数

如何从扩展程序中打开 iOS 应用程序?

我的应用程序注册了 URL Schemes:

在此处输入图片说明

但我不知道如何打开该应用程序,因为我无法UIApplication.sharedApplication()在扩展中使用。有可能吗?

ios swift ios8-share-extension

5
推荐指数
1
解决办法
807
查看次数

iOS共享扩展使用Swift更改预览图像的大小

在iOS共享扩展中,可以使用loadPreviewImageWithOptions获取预览图像.是否也可以更改预览图像的大小?

预览图像似乎是网站的屏幕截图.我想知道是否有可能获得原始大小的屏幕截图.

据记载,可以为选项创建字典.

https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSItemProvider_Class/index.html#//apple_ref/doc/constant_group/Options_Dictionary_Key

出于这个原因,我使用以下代码(尝试使用不同的值).

let options: [String: NSValue] = [NSItemProviderPreferredImageSizeKey: NSValue(CGSize: CGSizeMake(375.0, 600.0))]
itemProvider.loadPreviewImageWithOptions(options, completionHandler: { [ weak self ] image, error in
    if let image = image as? UIImage {
    }
})
Run Code Online (Sandbox Code Playgroud)

但结果始终是尺寸为84 x 79的图像

谢谢!

ios swift ios8-share-extension

5
推荐指数
0
解决办法
483
查看次数

iOS共享扩展:需要通过我的共享扩展共享所有pdf文件,包括网络链接pdf文件

我需要通过我的共享扩展程序共享其他应用程序的 pdf 文件。在我的共享扩展中,我正在使用这个NSExtensionActivationRule

<key>NSExtensionActivationRule</key>
<string>SUBQUERY (
        extensionItems,
        $extensionItem,
        SUBQUERY (
           $extensionItem.attachments,
           $attachment,(
           ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf";
           || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url";
        ).@count == $extensionItem.attachments.@count
   ).@count == 1
</string>
Run Code Online (Sandbox Code Playgroud)

对于 URL 内容,我能够在其他应用程序的所有激活控制器中看到我的应用程序图标。但我只需要为 PDF url 激活扩展。

我可以创建一个NSExtensionActivationRule,它可以选择所有 pdf 文件通过共享扩展进行共享,包括 URL 和内容。

objective-c ios ios8-share-extension

5
推荐指数
1
解决办法
2140
查看次数

带有 NSExtensionActivationRule 自定义 SUBQUERY 的 iOS 共享扩展

我已经为 iOS 应用程序实现了一个共享扩展。该扩展程序可成功处理图像和视频。

现在我正在寻找一种方法来使扩展适用于更多文件类型,例如 PDF、电子表格(Excel、Pages 等)、文档(MS Word、其他类似类型)、演示文稿(Powerpoint、Pages 等) 、简单的文本文件(Txt、xml、.c、.h 等)和网页 URL。

问题是我希望能够使用以下规则激活扩展:

1. 图片和视频一共可以选择25个项目,最多25个图片和/或最多5个视频。所以我们可以只有 1-25 个图像或 1-5 个视频或 20 个图像和 5 个视频或任何组合,只要总项目数保持小于或等于 25 且视频保持小于或等于 5

2. 如果选择了Image/s 或Video/s,则不能选择其他类型。

3. PDF 最多 1 个,未选择其他类型。

4. 电子表格最多 5 个,未选择其他类型。

我一直试图通过对 NSExtensionActivationRule 使用自定义 SUBQUERY 来实现这一点,但一直无法弄清楚。

我浏览了许多堆栈溢出帖子,还有一些不是关于堆栈溢出的帖子,也通过 Apple 文档,除了简单的示例之外没有任何其他内容,但我还没有能够成功编写符合我要求的 SUBQUERY。

例如,我尝试编写以下 SUBQUERY,它应该仅在选择图像时激活扩展,并且专门忽略 PDF、演示文稿、音频、电影和文本文件。但是扩展被激活用于文本和 PDF,也可能用于其他被忽略的项目,尽管我没有专门检查每一个。

SUBQUERY (
            extensionItems,
            $extensionItem,
            SUBQUERY (
            $extensionItem.attachments,
            $attachment,
        (
                       ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.fax"       
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg"
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg-2000"
                    || ANY …
Run Code Online (Sandbox Code Playgroud)

ios ios8-share-extension

5
推荐指数
0
解决办法
1338
查看次数

同时从 2 个不同目标访问 Realm

比方说,我想使用领域作为我的共享扩展,所以问题是,我可以在包含应用程序运行时访问共享目标中的领域。看起来不可能,但是我可以请有经验的人给我建议吗?谢谢!

realm ios ios8-share-extension

5
推荐指数
1
解决办法
1168
查看次数

NSItemProvider loadItemForTypeIdentifier 不尊重 NSItemProviderPreferredImageSizeKey

我正在尝试在我的应用程序扩展中获取最大 1080x1080 像素的调整大小图像:

NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
NSItemProvider *provider = item.attachments.firstObject;
id imageOptions = @{
               NSItemProviderPreferredImageSizeKey: [NSValue valueWithCGSize:CGSizeMake(1080, 1080)]
               };
if([provider hasItemConformingToTypeIdentifier:(NSString*)kUTTypeImage]){
    [provider loadItemForTypeIdentifier:(NSString*)kUTTypeImage options:imageOptions completionHandler:^(id<NSSecureCoding>  _Nullable item, NSError * _Null_unspecified error) {
        if(error){
            NSLog(@"An error occured.");
            [self.extensionContext completeRequestReturningItems:nil completionHandler:nil];
        }else{
            NSURL *url = (NSURL*)item;
            UIImage *result = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
            //RESULT IS FULL SIZE HERE: 3024x4032

        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

然而,结果图像是3024x4032。我究竟做错了什么?

ios-app-extension ios8-share-extension share-extension ios11

5
推荐指数
0
解决办法
846
查看次数

使用自定义类而不是 SLComposeServiceViewController 共享扩展

我目前正在使用共享扩展功能。

在这里,当我搜索很多时,似乎总是使用 SLComposeServiceViewController 将带有一些文本内容的图像共享到特定应用程序。

但我希望自定义 UIViewController 类加载了从照片应用程序中选择的图像,在打开时它就像邮件编辑器一样 mail extension on share sheet

所以我得到了这个示例,并按照以下 git hub 链接(第二个)中的说明操作:

是的,它似乎4 years ago是迁移并转换为Swift 4.1版本。在我修改了这些更改并对其进行调试之后。它不像在 GitHub gif 上那样工作。是的,在初始时间,当我在共享表上触摸扩展应用程序时,我可以显示和关闭控制器。但是在我驳回并再次尝试呈现之后,这次它没有在 GitHub gif 上做出反应。

Martin 只显示和隐藏self.view of UINavigationController Y position value. 一旦我按下Cancel or save条形按钮,然后我尝试在共享表上通过扩展打开它,它不起作用并且那里没有反应。

这里是来源 NSExtensionPrincipalClass - EntryViewController

import UIKit  

@objc(EntryViewController)


class EntryViewController : UINavigationController {

init() {
    super.init(rootViewController: ShareViewController())
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: …
Run Code Online (Sandbox Code Playgroud)

ios swift ios8-share-extension share-extension

5
推荐指数
1
解决办法
2278
查看次数

共享扩展程序 - 自 iOS 14 以来首次尝试时应用未显示在共享菜单中

升级到 Xcode 12 和 iOS 14 后,似乎开始发生一些奇怪的事情。

应用程序以前在共享菜单选项中显示正常,但突然间它表现得很奇怪并且只在第二次尝试之后才显示。

我的目标是获取网页网址。这是我的共享激活规则。

在此处输入图片说明

我什至尝试过新项目并添加了上面带有激活规则的共享扩展。它也做同样的事情,并且应用程序仅从第二次开始显示在共享选项中。此问题主要发生在 Safari 中。

它曾经在 iOS 14 之前运行良好,我也没有在 iOS 14 更改日志中找到任何可能导致问题的共享扩展。谁能帮我指出可能出错的地方或某些可能的原因。

提前致谢!!!

ios ios-app-extension ios8-share-extension ios14

5
推荐指数
1
解决办法
1296
查看次数