首先,处于保护用户隐私的考虑,苹果将一些数据绑定到了指定控件上,比如我们选择了一个应用(Application),直接获取他的图标、名字、ID之类的都是空的,需要把他传入到指定的UI控件中,控件里面有获取相关信息的能力,并展示。这些展示应用信息、读取应用列表的控件都是基于swift UI来的,我们要熟悉swift UI。API也偏新一些,好多都是iOS16、iOS17以上才支持的,所以建议最低支持到iOS17
下面先介绍主要类库及其功能
综合管理(ManagedSettings)
# | 分类 | 功能 |
---|---|---|
ManagedSettingsStore | 核心类,设置存储中心 | |
1 | ManagedSettingsGroup | 基础协议 |
2 | AppStoreSettings | 设置是否允许APP内购买、独立的购买密码等 |
3 | ApplicationSettings | 隐藏应用、禁止安装、禁止卸载 |
4 | CellularSettings | 网络:禁止修改网络设置、禁止SIM卡设置 |
5 | DateAndTimeSettings | 时间和日期:禁止修改时间日期 |
6 | GameCenterSettings | 禁止多人游戏、禁止添加好友 |
7 | AccountSettings | Apple ID、Icloud |
8 | MediaSettings | 禁用图书中的色情内容、音乐服务、 |
9 | PasscodeSettings | 禁止修改设备密码 |
10 | SafariSettings | cookie、自动填充密码 |
11 | ShieldSettings | 禁止使用(应用或者网站)设置 |
12 | SiriSettings | 是否禁用 |
13 | WebContentSettings | 网站拦截 |
FamilyControls
选择应用后如何展示出来呢,在FamilyControls下面,有个扩展,也就是说需要用Label来展示,传入对应的token即可
extension Label where Title == FamilyActivityTitleView, Icon == FamilyActivityIconView {
/// Creates a label representing a family activity application.
public init(_ applicationToken: ApplicationToken)
/// Creates a label representing a family activity category.
public init(_ categoryToken: ActivityCategoryToken)
/// Creates a label representing a family activity web domain.
public init(_ webDomainToken: WebDomainToken)
}
/// TitleView的定义
@MainActor @preconcurrency public struct FamilyActivityTitleView : View {
@MainActor @preconcurrency public var body: some View { get }
@available(iOS 15.0, *)
@available(tvOS, unavailable)
@available(watchOS, unavailable)
@available(macOS, unavailable)
public typealias Body = some View
}
/// IconView的定义
@MainActor @preconcurrency public struct FamilyActivityIconView : View {
@MainActor @preconcurrency public var body: some View { get }
@available(iOS 15.0, *)
@available(tvOS, unavailable)
@available(watchOS, unavailable)
@available(macOS, unavailable)
public typealias Body = some View
}
DeviceActivity
过几天忙完了再进一步补充细节
发布构建
如果打包的时候,提示Provisioning profile failed qualification,如下图
说明我们还没申请下来权限,只能用于开发调试
根据文档
FamilyControls | Apple Developer Documentation
Important
You must add the Family Controls capability to your app before you call the requestAuthorization(for:) or revokeAuthorization(completionHandler:) methods. This capability adds the Family Controls entitlement to your app. Before submitting your app to the App Store, you must request permission to use the entitlement. For more information, see Adding capabilities to your app.
明确说明我们上线的话需要向苹果申请权限,点击上面的 request permission 根据提示填写即可。申请通过后(2~3天),会收到苹果的邮件,此时还没完,需要我们到开发者后台进行配置,截图如下
家长控制权限申请下来之前,additional capabilities这里是没有家长控制的选项的,只有capabilities里有个Family Controls (Development),勾上Family Controls (Distribution)之后,删掉Xcode里的证书,打包发布
还没完,这时候可能还会报上面截图中的错,那是因为我们使用家长控制的时候往往都会用到扩展
DeviceActivityMonitorReportExtension
com.gytc.dspyzq.SReportExtension
ShieldConfiguration
我们添加扩展的时候,系统会默认给这个依赖添加Family Controls (Development)的能力,主要是这个影响了打包发布。打包的时候删除即可,调试用的时候再加进来。
如何学习
网上的资料比较少,有几个懂得还要开会员才能看,所以靠自学多一些。看swift的几个类,一个一个的看,看完了就大致清晰了,当然,我相信本文可以帮助你构建一个基本的印象。