2015-02-13 5 views
0

Я пытаюсь получить мое приложение iOS 8, указанное в общем меню общего доступа iOS 8 для расширений изображений .png, .jpg (.jpeg), .gif (static). Что мне нужно добавить в файл info.plist? Я пробовал код ниже с iOS docs example, но это не сработало, мое приложение не отображается в списке общих ресурсов.Как получить список в общем меню общего доступа iOS 8?

<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

Определение "не работает". Имейте в виду, что приложения «Фотографии и почта» (по какой-то глупой, неизвестной причине) не дают возможности открывать изображения в сторонних приложениях. – rmaddy

+0

Мое приложение не отображается в списке меню общего доступа. Я также попробовал несколько других приложений, и мое приложение тоже не входит в список. Правильно ли строка вводится для файлов изображений ?: ' com.apple.ui-services' – Tom

+0

Для этого вам не требуется расширение. Вы хотите появиться в меню «Открыть в». См. Http://stackoverflow.com/questions/2774343/how-do-i-associate-file-types-with-an-iphone-application/2781290#2781290 – rmaddy

ответ

0

Вы пропускаете NSExtensionActivationRule. См Удлинительный руководство по программированию от Apple: Declaring Supported Data Types for a Share or Action Extension

Например, чтобы объявить, что ваш Share расширение может поддерживать до десять изображений, один фильм и один 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> 
+0

Будет ли мое приложение отображаться в меню совместного доступа iOS 8, если я добавлю это в свой info.plist или мне нужно написать расширение для него тоже? – Tom

+0

@Tom, вам нужно добавить эти атрибуты в info.plist вашего расширения Share или Action. –

+0

Это запутанная часть для меня. Я хотел бы получить свое приложение, вызванное из меню «Поделиться», а не расширение для приложения. Будет ли код работать, если я добавлю его в свои приложения info.plist? – Tom

0

Первое первых, вы должны понимать, о том, приложение связи. Вам нужна настраиваемая схема URL для вашего приложения. Пожалуйста, обратитесь: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html

Теперь после того, как у вас есть собственный URL Sheme, действуйте следующим образом:

Чтобы получить перечисленный в широком меню доли системы, Вам необходимо сделать собственную активность.

сделать класс, как в следующем: В 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: 
// [email protected] should be 126 px, iPadShare should be 53 px, [email protected] 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]; 
} 
Смежные вопросы