gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:07:05 25 4
gpt4 key购买 nike

我正在尝试将我的应用程序添加到共享表中。如果您查看一张照片并按下分享按钮,您会看到 Facebook 推特 ...

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

这可能吗?如果是怎么办

这个问题不是什么

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

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

最佳答案

针对 Xcode 11.2.1、swift 5.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>

委托(delegate)方法

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

关于ios - 如何将我的应用程序添加到共享表操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33497578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com