共享扩展程序未出现在能够在iPhone上共享照片的应用程序列表中

Sau*_*tia 3 iphone xcode objective-c ios

我正在尝试创建一个共享应用程序扩展,并遵循此来源的教程:

http://www.technetexperts.com/mobile/share-extension-in-ios-application-overview-with-example/
Run Code Online (Sandbox Code Playgroud)

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

我首先安装容器应用程序,然后在XCode询问"选择要运行的应用程序"时选择照片应用程序来运行扩展程序.

现在,当我在扩展程序运行时打开照片时,会出现以下错误:

MobileSlideShow[3500:589624] *** error reading settings archive file: <ISRootSettings:
/var/mobile/Documents/com.apple.mobileslideshow.settings/ISRootSettings_10.plist> 
Run Code Online (Sandbox Code Playgroud)

现在,当我点击"共享"按钮时,我的容器应用程序不会出现在能够共享图片的应用程序列表中.

编辑: 我正在分享一些代码:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Dee*_*aki 12

您必须更改项目的共享扩展表单目标的部署目标,然后才能开始工作.

  • 起初我并不清楚这里的语言,但正如其他答案所指出的那样,我必须在构建设置中更改扩展的部署目标,以匹配主目标的部署目标。当您在 xcode 中创建新扩展时,它会自动将部署目标设置为最新的操作系统版本,而不是匹配主目标的部署目标版本 (4认同)

kri*_*mar 10

对我来说,取消选中“仅在安装时复制”选项有效。此选项可以在“构建阶段”>“嵌入应用程序扩展”下找到。


yua*_*lee 8

您的测试 iPhone 版本低于您的Deployment Info设置:

电子


Igo*_*mcy 5

您必须确定您需要哪种扩展标识符com.apple.ui-servicescom.apple.share-services

这是我的配置示例:

用户界面服务

这是使用 ui-services 出现的位置:

在此输入图像描述

在这里使用com.apple.share-services

在此输入图像描述

进而:

在此输入图像描述

为了一切正常,不要忘记确保您的项目具有与您的目标相同的部署信息目标版本(常规/部署信息/部署目标)

再见,希望有帮助!