xcode 8 widget 真機調試

作者: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:
主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改變。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章