作者:Love@YR
鏈接:http://blog.csdn.net/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:
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:
widget target:
注意此處的entitlements!!!
三、配置app group
xcode 主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改變。