2017-02-16 101 views
0

我试图创建一个共享的应用程序扩展,并遵循从这个来源教程:共享扩展未出现在能够共享照片的应用程序名单上的iPhone

http://www.technetexperts.com/mobile/share-extension-in-ios-application-overview-with-example/ 

我使用的XCode 8.0(8A218a )在模拟器上它按预期工作。在iOS 9.3.3的我的iPhone 5s上。

我先安装容器应用程序,然后在XCode询问“选择要运行的应用程序”时选择Photos应用程序来运行Extension。

现在,当我打开一张照片,同时延长运行时,出现以下错误:

MobileSlideShow[3500:589624] *** error reading settings archive file: <ISRootSettings: 
/var/mobile/Documents/com.apple.mobileslideshow.settings/ISRootSettings_10.plist> 

现在,当我点击分享按钮,我的容器的应用程序不会出现在应用程序的可共享的列表图片。

编辑: 我分享一些代码:

ShareViewController.m

@implementation ShareViewController 
- (BOOL)isContentValid { 
    // Do validation of contentText and/or NSExtensionContext attachments here 
    return YES; 
} 

- (void)didSelectPost { 

    for (NSItemProvider* itemProvider in ((NSExtensionItem*)self.extensionContext.inputItems[0]).attachments) { 

     if([itemProvider hasItemConformingToTypeIdentifier:@"public.jpeg"]) { 
      NSLog(@"itemprovider = %@", itemProvider); 

      [itemProvider loadItemForTypeIdentifier:@"public.jpeg" options:nil completionHandler: ^(id<NSSecureCoding> item, NSError *error) { 

       NSData *imgData; 
       if([(NSObject*)item isKindOfClass:[NSURL class]]) { 
        imgData = [NSData dataWithContentsOfURL:(NSURL*)item]; 
       } 
       if([(NSObject*)item isKindOfClass:[UIImage class]]) { 
        imgData = UIImagePNGRepresentation((UIImage*)item); 
       } 

       NSDictionary *dict = @{ 
             @"imgData" : imgData, 
             @"name" : self.contentText 
             }; 
       NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.iosApp.testSharing"]; 
       [defaults setObject:dict forKey:@"img"]; 
       [defaults synchronize]; 
      }]; 
     } 
    } 
} 

@end 

ViewController.m

@implementation ViewController 

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 
    NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.iosApp.testSharing"]; 
    NSDictionary *dict = [defaults valueForKey:@"img"]; 

    if (dict) { 

     NSData *imgData = [dict valueForKey:@"imgData"]; 
     UIImage *image = [UIImage imageWithData:imgData]; 
     [_shareImageView setImage:image]; 
     _shareImageNameLabel.text = [dict valueForKey:@"name"]; 
     [defaults removeObjectForKey:@"img"]; 
    } 

} 

@end 
+1

你能分享一些相关的代码吗? – ystack

回答

5

描述的你必须改变共享扩展形式项目的目标部署目标,然后它开始工作。

+0

谢谢,这会在共享选项中提出我的共享应用程序扩展选项。 但是在该扩展上点击不会打开我的应用程序。 –

+0

删除旧的应用程序并再次运行,然后显示共享扩展弹出。 –

0

我通过TE去chnetexperts教程,一个可能的问题貌似@"group.iosApp.testSharing"传递到NSUserDefaults不匹配.plist

+0

谢谢,但plist不必拥有这个应用程序组名称。 问题其实是别的。这个答案帮助了我:http://stackoverflow.com/a/42273617/5237727。 默认情况下,共享扩展的部署目标是iOS 10.0 –