我正在尝试将我的iOS 8应用程序列在iOS 8系统范围的共享菜单中,用于图像扩展名.png,.jpg(.jpeg),. gif(静态)。
我需要将哪些内容添加到info.plist
文件中?我尝试了iOS docs example下面的代码,但是没有用,我的应用程序没有显示在共享列表中。
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionServiceRoleType</key>
<string>NSExtensionServiceRoleTypeEditor</string>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.ui-services</string>
<key>NSExtensionPrincipalClass</key>
<string>ActionViewController</string>
</dict>
为清楚起见,我的意思是iOS 8 Share Menu
(也称为share sheet
):http://cdn1.tekrevue.com/wp-content/uploads/2014/09/ios8-share-sheets-customize.jpg
答案 0 :(得分:0)
首先,您需要了解应用间通信。 您需要的是您的应用程序的自定义网址方案。请参阅: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html
现在有了自定义网址后,按以下步骤操作:
要在系统范围的共享菜单中列出,您需要进行自定义活动。
创建如下的类: 在YourActivity.h文件中
@interface YourActivity : UIActivity
-(void)someInitialisationMethod:(NSString*)string;
@end
并在YourActivity.m文件中
#import "YourActivity.h"
@implementation YourActivity
- (NSString *)activityType
{
return @"UIActivityCategoryShare";
}
- (NSString *)activityTitle
{ // here give the title of your app or the action name that it performs
return @"YourAppName";
}
+ (UIActivityCategory)activityCategory
{// there are two types of category- share and action
return UIActivityCategoryShare;
}
- (UIImage *)activityImage
{
// Note: These images need to have a transparent background and I recommend these sizes:
// iPadShare@2x should be 126 px, iPadShare should be 53 px, iPhoneShare@2x should be 100
// px, and iPhoneShare should be 50 px. I found these sizes to work for what I was making.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
return [UIImage imageNamed:@"YourActivityImage.png"];
}
else
{
return [UIImage imageNamed:@"YourActivityImage.png.png"];
}
}
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems
{
NSLog(@"%s", __FUNCTION__);
return YES;
}
- (void)prepareWithActivityItems:(NSArray *)activityItems
{
NSLog(@"%s",__FUNCTION__);
}
- (UIViewController *)activityViewController
{
NSLog(@"%s",__FUNCTION__);
return nil;
}
- (void)performActivity
{
// This is where you can do anything you want, and is the whole reason for creating a custom
// UIActivity
NSURL *yourCustomURLMaybe = [NSURL URLWithString:someInitialisedString];
if ([[UIApplication sharedApplication] canOpenURL: yourCustomURL]) {
[[UIApplication sharedApplication] openURL: yourCustomURL];
}
else
{
NSLog(@"YourActivity not found");
}
[self activityDidFinish:YES];
}
@end
现在您的自定义活动已经完成 您需要使用像这样的共享菜单启动它
NSString *yourCustomUrl = [NSString stringWithFormat:@"YourCustomURLScheme?..."];
NSString *escapeAdded = [yourCustomUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *finalCustomURL = [NSURL URLWithString:escapeAdded];
YourActivity *ca;
if ([[UIApplication sharedApplication] canOpenURL: finalCustomURL])
{
ca = [[YourActivity alloc]init];
}
else
{
ca = nil;
}
NSArray *applicationActivityArray = [[NSArray alloc] initWithObjects:ca,nil];
最后,当您显示共享框时,将以上数组添加到应用程序活动:
activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[...] applicationActivities:applicationActivityArray];
}
答案 1 :(得分:0)
您缺少NSExtensionActivationRule。请参阅Apple的扩展编程指南:Declaring Supported Data Types for a Share or Action Extension
例如,声明您的共享扩展程序最多可以支持 你可以使用10个图像,一个电影和一个网页URL 跟随字典获取NSExtensionAttributes键的值:
<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>