功能:在翻看图片和网页的时候,想要把这些东西分享给通讯app的好友。
实现这个功能之前,在各种网页上寻找过各种方法,可是网上的文献不多并且不怎么具体,废话不多说,马上来总结一下我是怎么学习的。
1.首先建立一个分享应用拓展
File->New->Target
看到了IOS下的Application Extension->Share Extension
这里其实就建立了一个相对独立的工程,里面有一份cocoa class 一个storyboard还有一个info.plist文件
(这里给几个定义,新建了Share Extension后,这里其实是一个独立的app,我们称为host app,
用来管理extension,然后我们的通讯app,就是主体应用,我门称为contrain app)
2.进入share view controller
先到h文件去看,我们可以看到这个viewcontroller继承了一个叫SLComposeServiceViewController的类
按住command点击SLComposeServiceViewController,可以看到除了一般viewcontroller的方法外,有几个不一样的方法。
- (void)didSelectPost;按下post键处理事件
- (void)didSelectCancel;按下cancel键处理事件
- (BOOL)isContentValid;文本改变时处理事件(一般用作文本字数的限制)
- (NSArray *)configurationItems;这里可以给post界面添加items可以给分享的事件多样选择
- (void)pushConfigurationViewController:(UIViewController *)viewController;这里的push只能给host app中vc的跳转,对于我们功能的实现,用处不大。
self.textView为文本。
3.info.plist
介绍一下info.plist
这里我们可以看到NSExtension
展开后看到NSExtensionActivationRuleNSExtensionActivationSupportsImageWithMaxCount这个是允许共享图片,value自然就是int类型的个数(允许分享的个数)
NSExtensionActivationSupportsMovieWithMaxCount这个自然就是影片
NSExtensionActivationSupportsWebURLWithMaxCount这个是网络连接
修改info.plist的相关属性,我们就可以修改成为满足我们需求的share extension
4.把host app和 contrain app连接起来
这一步就尤为重要了,我们想要把图片分享给我们想分享的好友用户,就要进入contrain app的选取用户的界面,那么我们怎么打开contrain app呢?
我们找到了以下办法:
NSString *className = [[NSString alloc] initWithData:[NSData dataWithBytes:(unsigned char []){0x55, 0x49, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E} length:13] encoding:NSASCIIStringEncoding];
NSURL *urls=[NSURL URLWithString:@"test://"];
if (NSClassFromString(className)){
id object = [NSClassFromString(className) performSelector:@selector(sharedApplication)];
[object performSelector:@selector(openURL:) withObject:urls];
}
一般的open url并不能正常地打开contrain app
这里要给contrain app添加url属性,打开contrain app的info.plist。
添加一个key,右键按add row ,选取URL types,在item 0分别添加URL Schemes和URL identifier
给URL identifier添加身份,然后再URL Schemes中item 0改value为test。(test为你想要给他起的url名字)
到了这一步,我们就可以把host app和contrain app连接起来,在分享的时候回到自己的主体app,实现选取用户并进行分享。