方法一:使用WatchConnectivity框架實(shí)現(xiàn)共享辉饱,適用于Watch OS2.0
新版本一種實(shí)現(xiàn)方式:Watch OS2.0之后使用WatchConnectivity框架的WCSessionDelegate代理實(shí)現(xiàn)傳遞文件:
1.引入WatchConnectivity
import WatchConnectivity
2.遵循協(xié)議WCSessionDelegate
3.定義并初始化session對(duì)象
var session: WCSession!
session = WCSession.default()
session.delegate = self
// 激活session 必須激活才能實(shí)現(xiàn)數(shù)據(jù)傳遞缤言、消息傳遞
session.activate()
4.觸發(fā)發(fā)送方法
let pathURL = Bundle.main.url(forResource: "share", withExtension: ".png")
// 發(fā)送
session.transferFile(pathURL!, metadata: ["keys":"allValues"])
5.實(shí)現(xiàn)代理方法
// iPhone必須實(shí)現(xiàn)的方法:
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?)
{}
func sessionDidBecomeInactive(_ session: WCSession)
{}
func sessionDidDeactivate(_ session: WCSession)
{}
6.watch中使用同樣的方式峰弹,在代理中除了
// 必須實(shí)現(xiàn)的方法外
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?)
{}
// 使用下面的方法來獲取并使用
func session(_ session: WCSession, didReceive file: WCSessionFile)
{}
方法二:使用App Groups 扛稽, 適用于Watch OS1.0
1.創(chuàng)建證書
★這里Choose File選擇的是從鑰匙串中選擇鑰匙串訪問-->從正式頒發(fā)機(jī)構(gòu)請(qǐng)求證書-->存儲(chǔ)到磁盤的文件
★選中后上傳
★Continue之后會(huì)生成一個(gè)cer文件,點(diǎn)download下載到本地,然后在鑰匙串打開就可以看到名稱是剛才請(qǐng)求下來的證書文件了
★然后創(chuàng)建AppID
★App Services中勾選上必要的Service,此處勾選上AppGroups
★可以看到App Groups是待配置鞋拟,待會(huì)到App Groups中配置即可
★創(chuàng)建完成,找到剛才創(chuàng)建的App ID惹资,點(diǎn)Edit贺纲,在AppGroups點(diǎn)Edit,勾選上剛剛創(chuàng)建的Groups褪测,Continue--> Assign-->Done,可以看到該App ID下的App Groups服務(wù)已被激活
★然后是創(chuàng)建配置文件猴誊,選中剛才的App ID,Continue侮措,選擇相關(guān)證書-->Continue-->勾選上適配的設(shè)備懈叹,Continue,填寫信息后Continue分扎,然后DownLoad
★打開該文件澄成,在已創(chuàng)建的工程中Bulid Setting的CodeSinging勾選好開發(fā)證書,然后在TARGETS的Capabilities中打開App Groups畏吓,確保Steps里的三個(gè)對(duì)勾無報(bào)錯(cuò)后勾選之前創(chuàng)建的App Groups墨状,繼續(xù)以此方式設(shè)置watch的App Groups。
★★★★ 所幸菲饼,新版的Xcode已將上面繁瑣的步驟化簡肾砂,我們僅需要在創(chuàng)建工程時(shí)設(shè)置好BundleID,然后在TARGETS的General中的Singing項(xiàng)選好開發(fā)團(tuán)隊(duì)宏悦、勾選上Automatically manage signing通今,后續(xù)的一系列會(huì)自動(dòng)創(chuàng)建~~~設(shè)置App Groups時(shí)粥谬,點(diǎn)加號(hào)后在group.后面填寫相對(duì)應(yīng)的APP ID就可以了
★watch的設(shè)置其WatchKit Extension即可
★注意:勾選完App Groups之后生成的一個(gè)配置文件里的App GroupsID是第一個(gè)
★代碼獲取:
首先給iPhone的工程中添加一張測(cè)試圖片
1.在iPhone的文件中將該圖放入到共享文件夾中
let fileManager = FileManager.default
//共享文件夾路徑
let groupPath = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "group.com.zhangheng.DataSharingToWatch")?.path
shareLabel.text = groupPath
//找到圖片
let imagePath = Bundle.main.path(forResource: "share.png",ofType: nil)??""
let imageData = NSData(contentsOfFile: imagePath)
//圖片轉(zhuǎn)存到共享文件夾的路徑
let imageFullPath = groupPath?.appending("/share.png")
//存
fileManager.createFile(atPath: imageFullPath!,contents: imageData as?Data,attributes: nil)
2.在watch上讀取
//路徑group.com.zhangheng.DataSharingToWatch
let fileManager = FileManager.default
// group路徑
let groupPath = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "group.com.zhangheng.DataSharingToWatch")?.path
var paths = groupPath??"watch讀的路徑?jīng)]有"
print(paths)
//拿到圖片
let imagePath = groupPath?.appending("/share.png")
let imageData = NSData(contentsOfFile: imagePath!)
if nil == imageData {
paths = imagePath! + "||沒找到圖|||".appending(paths)
}
pathLabel.setText(paths)
//裝載
shareImageView.setImageData(imageData as Data?)