swift开发一个Widget应用

对于从零开发一个Widget应用,本文主要介绍如下几点:

1.为现已有工程添加Widget;

2.绘制UI;

3.App间跳转;

4.数据共享的方式;

1.为现有工程添加Widget

新建工程

选择`Today Extension`,确认,为工程添加Widget成功.

2.绘制UI

和普通控制器一样,正常的绘制UI即可,认工程使用SB构建,自己可以选用代码构建,需要注意的是,要删除plist中相关的代码.

3.App间跳转

app跳转可以通过URI方式打开和传值.

extensionContext?.open(URL(string: "mainApp://controller?type=1")!,completionHandler: { (result) in

print(result)

})

4.数据共享的方式

扩展程序一般都不是脱离宿主程序单独运行的,难免需要和宿主程序进行数据交互。通过App Groups提供的同一group内app共同读写区域,可以用NSUserDefaults和NSFileManager两种方式实现extension和containing app之间的数据共享

使用App Groups需要在主程序和widget程序中分别打开App Groups选项,保证两个地方选择的groups相同,如下:

UserDefaults方式:

//写入数据
let userDefaults = UserDefaults(suiteName: "group.com.walden.Widget-Demo")
userDefaults?.set("abcdefg",forKey: "widget")
userDefaults?.synchronize()
//读取数据
let userDefaults = UserDefaults(suiteName: "group.com.walden.Widget-Demo")
let str = userDefaults?.value(forKey: "widget") as? String

FileManager方式:

//写入数据
var containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.walden.Widget-Demo")
containerURL = containerURL?.appendingPathComponent("Library/Caches/widget")
let value = "abcdefg"
try? value.write(to: containerURL!,atomically: true,encoding: .utf8)

//读取数据
var containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.walden.Widget-Demo")
containerURL = containerURL?.appendingPathComponent("Library/Caches/widget")
let v = String(contentsOf: containerURL!,encoding: .utf8)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...