首先,我们需要一个主进程,即主工程。在这里,只讲诉下如何创建Widget
点击file -> New -> Target 选择today
然后打开APPGroups。 按照下图完成打开。
然后找到APPgroups ,点击打开
然后点击下面的加号,新添加一个。最后命名为反域名形式。新建完成,选择新建的那个。然后widget也重复操作,注意的是,widget不需要再次新建group,只需要选择你主工程新建并且选择的那个group。
下图是widget的
/*
*~~~~~~
*/
如果在这里遇见问题,没有三个勾的,
首先,你可以点击下面有一个fix issues按钮 ,其次你需要确定你选择开发者账号和证书是否正确以及team是否填写。
若是还不行,那么登陆到menber center ---identiidentifiers--APP Groups --- + 号新建一个。然后返回选择。
若是如上,全是勾的,那么APPgroups 创建好了。
如果要跳转到app,需要在主程序的info.plist中新添 URL types 并且配置
- (IBAction)CreateNew:(id)sender {//这是MainInterface.storyboard中拖出来的button按钮的方法
//跳转到app主页
[self.extensionContextopenURL:[NSURLURLWithString:@"BottomdayApp://action=GotoNew"]completionHandler:^(BOOL success) {
NSLog(@"open url result:%d",success);
}];
}
然后还需要到application中写
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{//判断跳转
NSString* prefix =@"BottomdayApp://action=";
if ([[urlabsoluteString] rangeOfString:prefix].location !=NSNotFound) {
NSString* action = [[url absoluteString] substringFromIndex:prefix.length];
if ([action isEqualToString:@"GotoHomePage"]) {
//如果action=GotoHomePage 则跳到。。。
}elseif ([action isEqualToString:@"GotoNew"]) {
//写跳转代码。
//如果action=GotoNew 跳转到。。。。
return YES;
}
}
return YES;
}
下图中得item0 中得字符串是appgroup的名字,在数据的交互时候需要用到这个字符串。
/*
* 数据存入appgroups,写在主工程中。
*/
NSUserDefaults *sharedUserDefault = [[NSUserDefaultsalloc] initWithSuiteName:@"group.com.daybyday.app"];
NSData *data = [NSKeyedArchiverarchivedDataWithRootObject:@"这里可以是数组,字典,字符串等"];
[sharedUserDefaultsetObject:data forKey:@"DayByday"];
// 切莫忘记,依旧调用 synchronize 立即写入沙盒中
[sharedUserDefaultsynchronize];
/* 从appgroups中数据获取
* 写在TodayViewController中
*/
NSUserDefaults *sharedUserDefaults = [[NSUserDefaultsalloc] initWithSuiteName:@"group.DayByday"];//注意不要写成NSUserDefaults *sharedUserDefaults = [NSUserDefaults standardUserDefaults];
NSData *unarchiverData = [sharedUserDefaults objectForKey:@"DayByday"];//这里的key和存入数据时候的key必须相同。
NSMutableArray *dataArray = [NSMutableArrayarrayWithArray:[NSKeyedUnarchiverunarchiveObjectWithData:unarchiverData]];
最后。我们只要布局,然后把数据放上就ok了。
布局代码,我就不写了,我放上写好的效果图
接下去说说上传过程把。首先,你需要根据主工程和widget两个的Bundle Identifier分别注册两个APP ID
注册时候勾上APP group
并且在完成之后编辑APPgroup ,使之状态为Enabled。
然后分别注册两个Provisioning Profiles 的Distribution并且下载。
上传时候需要配置的文件
小编是个小菜鸟,还在努力探索中,有什么需要修改或者有什么好玩的新东西记得给小编留言哦。
附上几个关于widget的博客地址
http://blog.csdn.net/yongyinmg/article/details/40982791
http://www.onevcat.com/2014/08/notification-today-widget/
http://www.cocoachina.com/industry/20140627/8960.html