标签: ios8-share-extension

iOS扩展 - 检测"扩展状态更改"(背景/前景)

我有一个为iOS8实现的共享扩展.该服务使用OAuth进行身份验证.我用于扩展程序的登录信息与容器应用程序共享.

问题是:

当我在扩展程序中,然后应用程序切换到容器应用程序并注销,然后应用程序切换回包含扩展程序的主机应用程序 - 如何检测到扩展程序刚刚重新出现?扩展程序依赖于容器应用程序和扩展程序之间的共享数据库中存在的某些信息,但是,当应用程序注销时,该数据将被删除.

我已经尝试注册各种"应用程序通知",例如UIApplicationDidBecomeActiveNotification.但是,正如预期的那样,这些不会被要求扩展.

如何检测扩展的状态何时发生变化,以便在重新出现时可以使我的扩展更加强大?

ios ios8 ios8-share-extension ios8-extension

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

未调用功能didSelectPost()-iOS分享扩展

我在XCode上的iOS应用程序项目中添加了共享扩展名。但是,当我选择一张照片并选择要共享的扩展名时,决不会调用ShareViewController的didSelectPost()函数!为了测试这一点,我只是在上面放了一个断点并添加了somme日志打印。

有关信息,我有一个由XCode创建的ShareViewController类以及主要的故事板和info.plist。

谢谢

断点状态

ios swift ios8-share-extension ios8-extension

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

iOS 8.3共享扩展 - 启动URL方案

自iOS 8.3更新我的共享扩展(使用URL Schemes调用我的主应用程序)停止工作.所以我发现我必须启动我的应用程序的UIWebView方法不再适用.我也尝试过Apple推荐的方法,使用NSExtensionContext,但仍然没有结果.有什么想法吗?我的代码如下:

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
[self.view addSubview: webView];
NSString *urlString = "com.myappscheme://shareextension";
NSString * content = [NSString stringWithFormat : @"<head><meta http-equiv='refresh' content='0; URL=%@'></head>", urlString];
[webView loadHTMLString:content baseURL:nil];
Run Code Online (Sandbox Code Playgroud)

[self.extensionContext openURL:[NSURL URLWithString:urlString] completionHandler:^(BOOL success)
{
    NSLog(@"fun=%s after completion. success=%d", __func__, success);
}];
Run Code Online (Sandbox Code Playgroud)

我尝试从我的SLComposeServiceViewController控制器执行didSelectPost方法的两个代码块,这是之前它工作正常,然后将我的设备更新到iOS 8.3

objective-c ios ios8-share-extension ios-urlsheme ios8.3

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

如何获取通过共享扩展传递给App的图像格式URL

我正致力于使用共享扩展来共享库中的图像数组.我可以使用共享扩展内的图像

- (void)getImageFromExtension:(NSExtensionItem *)extensionItem
{
    for(NSItemProvider *attachment in extensionItem.attachments)
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            if([attachment hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage])
            {
                [attachment loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(id<NSSecureCoding> item, NSError *error) {
                    NSURL *image = (NSURL *)item;
                    if(error)
                    {
                        NSLog(@"Error retrieving image");
                    } else {
                        dispatch_async(dispatch_get_main_queue(), ^{
                            NSLog(@"*** ### %@",[UIImage imageWithData:[NSData dataWithContentsOfURL:image]]);
                        });
                    }
                }];
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我真正需要的是,我需要将图像URL传递给容器应用程序.但无法从该URL获取图像.网址格式是file:///var/mobile/Media/DCIM/101APPLE/IMG_1705.JPG

此URL中的数据始终为null.如何从这个URL获取图像?

cocoa-touch ios ios8-share-extension ios-sharesheet

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

如何仅与共享扩展共享图像或视频

我想要我的扩展支持文本,网址,视频和10张图片.

我已将plist配置如下: 在此输入图像描述

这工作正常,但我希望我的扩展程序不支持图像和视频同时.

我知道我很可能必须构建一个"SUBQUERY(..)"语句.我的谓词是这样的:

SUBQUERY (
extensionItems,
$extensionItem,
SUBQUERY (
$extensionItem.attachments,
$attachment,(
     NOT ( ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
           AND ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie")
     ) AND (
           ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.text")
).@count < 10
).@count == 1
Run Code Online (Sandbox Code Playgroud)

但它对我不起作用.在这种情况下我该如何使用.谢谢你的帮助!

ios ios-app-extension ios8-share-extension

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

如何将文件添加到应用组共享目录?

因此,我有一个带有共享扩展名的应用程序,每个应用程序都有自己的目标。应用程序捆绑标识符的核心是com.company.app,扩展名是com.company.app.share。每个都有自己的权利文件,核心应用程序App Groups -> group.com.company.app和共享扩展名相同。这两个捆绑包标识符都在apple开发者网站上列出,但是由于某些原因,

我似乎没有正确的权限来写入共享private/var/mobile/Containers/Shared/AppGroup/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/Library/Caches/目录。

我收到的错误消息是: You don’t have permission to save the file “Caches” in the folder “Library”.

目录的保存方式如下:

GetZipURLInItems(self.extensionContext.inputItems, ^(NSURL *url, NSError *error) {
    if (error == nil) {

        NSURL *containerURL = [[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:GroupIdentifier] URLByAppendingPathComponent:@"Library/Caches"];
        NSLog(@"EXT: containerURL: %@", containerURL);

        [WPZipArchive unzipFileAtPath:[url path] toDestination:[containerURL absoluteString]];

        [self listDirectoryAtPath:[containerURL absoluteString]];
    }});
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?

filesystems permissions ios bundle-identifier ios8-share-extension

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

如何在Swift的Share Extension中提取zip文件并获取提取的组件

我需要执行以下操作-

  1. 我有另一个应用程序,其中我将以zip格式导出用户config(.txt)和contact(.vcf)。

  2. 在第二个应用程序中,我有一个共享扩展名以获取导出的zip,在共享扩展名中,我需要提取zip文件并获取txt和vcf文件,然后将它们上传到解析服务器。

在共享扩展名中打开导出的zip之前,我已经做完了。但我无法提取压缩文件。我在互联网上找不到答案。

这是我的 ShareViewController

import UIKit
import Social
import Parse
import MobileCoreServices
import SSZipArchive

class ShareViewController: SLComposeServiceViewController {

    var requird_data : NSData!
    var path : URL!

    override func viewDidLoad() {
        super.viewDidLoad()
        //Parse.setApplicationId("cGFyc2UtYXBwLXdob3N1cA==", clientKey: "")
        initUI()
        getURL()
        textView.delegate = self
        textView.keyboardType = .numberPad
    }

//    override func viewWillAppear(_ animated: Bool) {
//        super.viewWillAppear(true)
//
//    }

    func initUI()
    {

        navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
        title = "upup"

        navigationController?.navigationBar.tintColor = .white
        navigationController?.navigationBar.backgroundColor = UIColor(red:0.97, green:0.44, blue:0.12, alpha:1.00)
        placeholder = "Please enter …
Run Code Online (Sandbox Code Playgroud)

zip swift ios8-share-extension swift3

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

无法通过共享扩展打开/读取图像

我正在尝试在应用程序扩展中获取图像。问题是当类型为“public.image”时我无法获取图像,但是当类型为“public.png”时它会成功。我想做的只是获取图像并将其上传到服务器。

这是我正在使用的代码。

if let extensionContext = self.extensionContext,
        let item = extensionContext.inputItems.first as? NSExtensionItem,
        let attachment = item.attachments?.first as? NSItemProvider {

        guard let type: String = attachment.registeredTypeIdentifiers.first else { return } 
        // -> "public.png" or "public.image"
        attachment.loadFileRepresentation(forTypeIdentifier: type, completionHandler: { (url, error) in
            guard let url = url else { return }
            do {
                let imageData = try Data(contentsOf: url)
                if let image = UIImage(data: imageData) {
                    // some task with image
                } else {
                    // reach here!!!!!
                }
            } catch …
Run Code Online (Sandbox Code Playgroud)

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

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

PDF 未显示 Swift Share 扩展

使用Swift5.3.2、iOS13.0、

我的共享扩展适用于图像和视频。

但它不适用于 PDF。

问题是我的应用程序在我尝试与我的应用程序共享的 PDF 文档的共享应用程序列表中不可见。

我知道必须在 info.plist 中正确设置规则。

我尝试了以下两次尝试 - 但都没有成功!

谁能告诉我 iOS 中的 PDF 共享扩展需要什么?

尝试1:Info.plist

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsFileWithMaxCount</key>
            <integer>20</integer>
            <key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>100</integer>
            <key>NSExtensionActivationSupportsMovieWithMaxCount</key>
            <integer>25</integer>
        </dict>
    </dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
    <key>NSExtensionPrincipalClass</key>
    <string>CustomShareNavigationController</string>
</dict>
Run Code Online (Sandbox Code Playgroud)

尝试2:Info.plist

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <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.file-url"
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg"
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO …
Run Code Online (Sandbox Code Playgroud)

share swift ios8-share-extension uiactivityitemprovider

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

如何从 IOS 共享扩展访问文件(图像)

我在我的应用程序上实现了共享扩展。在主应用程序上,我使用 onOpenURL 来访问共享文件。

示例 url =“myURlScheme://?share_url=file:///var/mobile/Media/PhotoData/OutgoingTemp/FA5F8F47-37E0-4E88-AF3B-C63B88BE6443/IMG_0247.JPG”

我的 onOpenURL:

            .onOpenURL { url in
            // Handle the deep link URL here
            if url.scheme == "myURlScheme",
               let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
               let shareURLString = components.queryItems?.first(where: { $0.name == "share_url" })?.value
               {
                // Use the shared image URL in your app
                // Example: pass it to a view model or trigger appropriate logic
                let shareURL = URL(fileURLWithPath: shareURLString)
                loadFrom(URLAdress: shareURL)
            }
        }
Run Code Online (Sandbox Code Playgroud)

加载函数:

    DispatchQueue.global().async {
        do {
            if URLAdress.startAccessingSecurityScopedResource() {
                let imageData …
Run Code Online (Sandbox Code Playgroud)

uikit ios swift ios8-share-extension swiftui

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