xcode 8 widget 真机调试

本文详细介绍了在iOS环境中配置和调试Widget的过程,包括宿主应用与Widget的bundle ID设置、开发者证书配置、Xcode中App Group的配置及常见错误解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:Love@YR
链接:http://blog.youkuaiyun.com/jingqiu880905/article/details/52983303
请尊重原创,谢谢!

真机调试widget,牵扯到配置group。
首先我们的宿主app id为com.xxx.jeantest , Today widget插件的bundle id为com.xxx.jeantest.StockReminder(StockReminder是随意取的名字,你也可以取其他)
这里我们需要注意,widget的bundle id必须以宿主bundle id作为前缀。
然后它俩之间建立的group id为group.xxx.freeInHouse(你可以取任意名)
下面看开发者证书那里如何配置:
一、Identifiers-App Groups 里添加一个app group id为:group.xxx.freeInHouse
这里写图片描述

二、创建app id。创建的时候选择Explict App ID,App Services里面勾选上App Groups
这里写图片描述

主app:
主app

widget:
widget

三、配置provisioning profile(这里不再赘述certificate的生成步骤,添加device等)
此时因为选择了勾选了App Groups这个service的app id,所以可以看到enabled services那里有此项
这里写图片描述

至此已经完成在开发者网站上配置含有widget的证书。
下面看下xcode里面如何配置:
一、当然是主app和widget这俩target的bundle id要和上面俩对应。
二、当然是这俩target的code signing那边provisioning profile,certificate都选对。
主target:
主target

widget target:
widget target
注意此处的entitlements!!!
三、配置app group
xcode 主target 配置app group:

xcode 主target 配置app group

xcode widget target 配置app group:

xcode widget target 配置app group

关于entitlements:
当在xcode里加入app group就会自动生成entitlements。如果删了可以创新创建。看下其里面的内容:
这里写图片描述

这两个target相当于两个二进制文件,不能互相访问资源目录,程序中我们如何查找它们的共享目录呢?

 NSFileManager * fileManager  = [NSFileManager defaultManager];
    NSString * groupPath = nil;
    NSURL * groupURL = nil;
    if([fileManager respondsToSelector:@selector(containerURLForSecurityApplicationGroupIdentifier:)])
    {
        groupURL = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.xxx.freeInHouse";//即group id
    }
    if(groupURL)
    {
        groupPath = groupURL.path;
        groupPath = [groupPath stringByAppendingPathComponent:@"sharefilename"];
    }

如果是userdefault就把

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

换成

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.freeInHouse"];

四、编译主target xxx-iphone-free 发现一些错误
1)错误log:
No profile matching ‘PaidWatchkitappAdhoc’ found: Xcode couldn’t find a profile matching ‘PaidWatchkitappAdhoc’. Install the profile (by dragging and dropping it onto Xcode’s dock item) or select a different one in the General tab of the target editor.
Code signing is required for product type ‘WatchKit App’ in SDK ‘iOS 10.0’

其中PaidWatchkitappAdhoc 是WatchKit App的provisioning profile,经查,发现此处:

这里写图片描述
把xxx-free watchkit extension.appex去掉即可。因为此处我们只调试today widget

2)编译还有个错误:

这里写图片描述

解决方法:把iCloud 关掉:

这里写图片描述

看到一篇有点关联的好文章:
http://www.cnblogs.com/lrr0618/p/5388350.html
里面有讲APP group的。

最后再说下iOS10上关于widget的改动:
发现用原来的代码widget总是显示不全,就是个固定高度。后来才知道10上加了折叠展开功能。

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize 

在这个方法里实现模式的切换,就会出现折叠展开按钮,并进行相应的frame改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值