如何将我的应用程序添加到共享表操作

时间:2015-11-03 11:07:04

标签: ios objective-c

我正在尝试将我的应用添加到共享表中。如果您查看照片并按分享按钮,则会看到Facebook twitter ...

最近我从商店下载了一些应用程序,它们也出现在共享表中,所以我想在某种程度上它是可能的。

有可能吗?如果是这样的话

这个问题不是什么

  1. 这不仅仅是在您创建的应用之间共享数据。通常,自定义URL方案是出于此目的,但仅当您的数据源知道如何使用自定义方案时。但是这个问题是关于如何让你的应用程序为第三方应用程序(即照片)做好准备,以便与你分享标准内容(照片,电影等)。

  2. 这不是关于如何准备您的内容以便在Facebook或Twitter上分享。相反,它询问如何编写自己类似Facebook的应用程序,以便它可以接受共享

2 个答案:

答案 0 :(得分:8)

针对XCode 10,swift 4.2

进行了更新

是的,这是可能的。

创建扩展名

在您的XCode中转到File -> New -> Target,然后选择Share Extension

将在项目目录中创建一个扩展名为.appex的文件夹和文件。

文件夹将包含

Extension Name  --------- ShareViewController.swift
               |
                -------- Maininterface.storyboard 
               |
                -------- Info.plist

添加对项目类型的支持

在此plist中,为您的应用提供适当的扩展程序*。

<key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>10</integer>
            <key>NSExtensionActivationSupportsMovieWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>1</integer>
        </dict>
    </dict>

委托方法

ShareViewController文件内容

    override func isContentValid() -> Bool {
            // Do validation of contentText and/or NSExtensionContext attachments here
            return true
    }

    override func didSelectPost() {
             // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments.

            // Inform the host that we're done, so it un-blocks its UI. Note: Alternatively you could call super's -didSelectPost, which will similarly complete the extension context.
                self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
    }

    override func configurationItems() -> [Any]! {
            // To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here.
                return []
    }

从您身边分享帖子

你几乎就在那里。将所选项目从disSelectPost传递到您的应用程序。 您可以使用下面的外部代码

- ( void ) passSelectedItemsToApp
{
    NSExtensionItem * item = self.extensionContext.inputItems.firstObject;

    // Reset the counter and the argument list for invoking the app:
    m_invokeArgs = NULL;
    m_inputItemCount = item.attachments.count;

    // Iterate through the attached files
    for ( NSItemProvider * itemProvider in item.attachments )
    {
        // Check if we are sharing a JPEG
        if ( [ itemProvider hasItemConformingToTypeIdentifier: ( NSString * ) kUTTypeJPEG ] )
        {
            // Load it, so we can get the path to it
            [ itemProvider loadItemForTypeIdentifier: ( NSString * ) kUTTypeJPEG
                                             options: NULL
                                   completionHandler: ^ ( UIImage * image, NSError * error )
             {
                 static int itemIdx = 0;

                 if ( NULL != error )
                 {
                     NSLog( @"There was an error retrieving the attachments: %@", error );
                     return;
                 }

                 // The app won't be able to access the images by path directly in the Camera Roll folder,
                 // so we temporary copy them to a folder which both the extension and the app can access:
                 NSString * filePath = [ self saveImageToAppGroupFolder: image imageIndex: itemIdx ];

                 // Now add the path to the list of arguments we'll pass to the app:
                 [ self addImagePathToArgumentList: filePath ];

                 // If we have reached the last attachment, it's time to hand control to the app:
                 if ( ++itemIdx >= m_inputItemCount )
                 {
                     [ self invokeApp: m_invokeArgs ];
                 }
             } ];
        }
    }
}

还要确保您的.ipa文件中包含扩展程序。通过使用.zip技巧打开它。

调试扩展程序

如您所说,使用照片应用调试您的扩展程序。您可以使用附加到处理方法。 *步骤

1)打开照片应用程序

2)使用PID或进程名称

将您的扩展附加到xcode

3)与您的应用分享图片或视频。

4)应用程序将点击didSelectPost方法。

* Apple documentation

答案 1 :(得分:2)

@kemdo如果你的应用仍然不可见 - 尝试点击省略号,那么你会看到你的应用并在它附近切换。这对我的模拟器有帮助。