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

问题描述 投票:0回答:6

我正在尝试创建一个共享应用程序扩展,并按照此来源的教程进行操作:

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

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

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

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

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
ios objective-c iphone xcode
6个回答
33
投票

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


16
投票

您的测试 iPhone 版本低于您的

Deployment Info
设置:


10
投票

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


5
投票
com.apple.ui-services

com.apple.share-services

这是我的配置示例:

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

这里使用

com.apple.share-services

:


然后:

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

再见,希望对你有帮助!


0
投票
technetexperts

教程,一个可能的问题是传递给 @"group.iosApp.testSharing"

NSUserDefaults
.plist
 中描述的不匹配
    


0
投票

这是我的主要目标:

这就是我的扩展 Info.plist 的样子:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>NSExtension</key> <dict> <key>NSExtensionAttributes</key> <dict> <key>NSExtensionActivationRule</key> <string>TRUEPREDICATE</string> </dict> <key>NSExtensionMainStoryboard</key> <string>MainInterface</string> <key>NSExtensionPointIdentifier</key> <string>com.apple.share-services</string> <key>NSExtensionPrincipalClass</key> <string>$(PRODUCT_MODULE_NAME).ShareViewController</string> </dict> </dict> </plist>

还有其他想法吗?

© www.soinside.com 2019 - 2024. All rights reserved.