我正在尝试将我的应用添加到共享表中。如果您查看照片并按分享按钮,则会看到Facebook twitter ...
最近我从商店下载了一些应用程序,它们也出现在共享表中,所以我想在某种程度上它是可能的。
有可能吗?如果是这样的话
这个问题不是什么
这不仅仅是在您创建的应用之间共享数据。通常,自定义URL方案是出于此目的,但仅当您的数据源知道如何使用自定义方案时。但是这个问题是关于如何让你的应用程序为第三方应用程序(即照片)做好准备,以便与你分享标准内容(照片,电影等)。
这不是关于如何准备您的内容以便在Facebook或Twitter上分享。相反,它询问如何编写自己类似Facebook的应用程序,以便它可以接受共享
答案 0 :(得分:8)
是的,这是可能的。
在您的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或进程名称
将您的扩展附加到xcode3)与您的应用分享图片或视频。
4)应用程序将点击didSelectPost方法。
答案 1 :(得分:2)
@kemdo如果你的应用仍然不可见 - 尝试点击省略号,那么你会看到你的应用并在它附近切换。这对我的模拟器有帮助。