【QingQing】iOS14 适配汇总

编程入门 行业动态 更新时间:2024-10-27 07:30:32

【QingQing】iOS14 适配汇总

【QingQing】iOS14 适配汇总

目录

1 UIDatePicker 时间选择器

2 UITableViewCell

3 粘贴板问题

4 权限问题

4.1 相册 - PHPhotoLibraryPreventAutomaticLimitedAccessAlert

4.2 定位  - NSLocationTemporaryUsageDescriptionDictionary

4.3 IDFA - NSUserTrackingUsageDescription

4.4 Local Network (局域网)

5  Wi-Fi Address

6 上传 AppStore


1 UIDatePicker 时间选择器

  • iOS14 UIDatePicker新增加了一个UI样式
 UIDatePickerStyleInline API_AVAILABLE(ios(14.0)) API_UNAVAILABLE(tvos, watchos)

前后效果如下

                

  • 想使用播轮样式,需要设置datePickerMode为UIDatePickerStyleWheels,如下所示:
 UIDatePicker *datePicker=[[UIDatePicker alloc] init];datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];datePicker.datePickerMode = UIDatePickerModeDateAndTime;datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;datePicker.backgroundColor=[UIColor redColor];datePicker.frame=CGRectMake(0, 40,self.view.frame.size.width, datePicker.frame.size.height);[self.view addSubview:datePicker];

2 UITableViewCell

  • addSubview需要加载在 contentView ,因为iOS14系统把contentview改成了懒加载,系统在cell即将显示的时候才加载,所以在最上层了,遮盖自定的视图。

3 粘贴板问题

  • 在 iOS14 中,读取用户剪切板的数据会弹出提示。
  • 弹出提示的原因是使用 UIPasteboard 访问用户数据,访问以下数据都会弹出 toast 提示。

  • 兼容方案:如果应用访问剪切板仅仅用于判断是否为URL格式,则 iOS14 新增了两个 API 可以用于规避该提示。如果应用想直接访问剪切板的数据,暂时可能无法做到规避该提示。iOS14 新增两种

    UIPasteboardDetectionPattern。

  • 上面的两个 API 可用于规避提示,但只能用于判断剪切板中是否有 URL,并不是真正的访问剪贴板数据,也拿不到剪切板的真实数据。下面两个 API 可以获得具体的 URL 信息,但是会触发剪切板提示。并且实测当用户剪切板中包含多个 URL 时只会返回第一个。

  • 使用示例

NSSet *patterns = [[NSSet alloc] initWithObjects:UIPasteboardDetectionPatternProbableWebURL, nil];
[[UIPasteboard generalPasteboard] detectPatternsForPatterns:patterns completionHandler:^(NSSet<UIPasteboardDetectionPattern> * _Nullable result, NSError * _Nullable error) {if (result && result.count) {// 当前剪切板中存在 URL}
}];
  • 查找本地UIPasteboard使用地方可以参考这篇文章iOS14适配——查找那些SDK使用剪切板

 

4 权限问题

4.1 相册 - PHPhotoLibraryPreventAutomaticLimitedAccessAlert

  • iOS14 新增了“Limited Photo Library Access” 模式,在授权弹窗中增加了 Select Photo 选项。用户可以在 App 请求调用相册时选择部分照片让 App 读取。从 App 的视⻆来看,你的相册里就只有这几张照片,App 无法得知其它照片的存在。

  • iOS14 中当用户选择“PHAuthorizationStatusLimited” 时,如果未进行适配,有可能会在每次触发相册功能时都进行弹窗询问用户是否需要修改照片权限。

 对于这种情况可通过在 Info.plist 中设置“PHPhotoLibraryPreventAutomaticLimitedAccessAlert”的值为 YES 来阻止该弹窗反复弹出,并且可通过下面这个 API 来主动控制何时弹出PHPickerViewController 进行照片选择

[[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];
  • 在 iOS14 中官方推荐使用 PHPicker 来替代原 API 进行图片选择。PHPicker 为独立进程,会在视图最顶层进行展示,应用内无法对其进行截图也无法直接访问到其内的数据。 

PHPicker 支持多选,支持搜索,支持按 image,video,livePhotos 等进行选择。

UIImagePickerController -> PHPickerViewController, UIImagePickerViewController 功能受限,每次只能选择一张图片,将逐渐被废弃。

4.2 定位  - NSLocationTemporaryUsageDescriptionDictionary

在 iOS13 及以前,App 请求用户定位授权时为如下形态:一旦用户同意应用获取定位信息,当前应用就可以获取到用户的精确定位。

iOS14 授权弹窗新增的 Precise的开关默认会选中精确位置。用户通过这个开关可以进行更改,当把这个值设为 On 时,地图上会显示精确位置;切换为Off时,将显示用户的大致位置。

  •  用户选择模糊定位后切换精准定位

1)可以通过用户在 “隐私设置” 中设置来开启精确定位;

2) iOS14 在 CLLocationManager 新增两个方法可用于向用户申请临时开启一次精确位置权限。

a) 首先在 Info.plist 中配置“NSLocationTemporaryUsageDescriptionDictionary”字典中需要配置 key 和 value 表明使用位置的原因,以及具体的描述。(该字段为字典类型,可添加多个场景的key-value)

b) 然后调用临时开启精准定位方法:[self.mgr requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"WantsToNavigate"];

  • 对于地理位置不敏感的App 来说,iOS14 也可以通过直接在 info.plist 中添加 NSLocationDefaultAccuracyReduced 为 true 默认请求大概位置。(这样设置之后,即使用户想要为该 App 开启精确定位权限,也无法开启。)
  • 需要注意的是,当 App 在 Background 模式下,如果并未获得精确位置授权,那么 Beacon 及其他位置敏感功能都将受到限制。

4.3 IDFA - NSUserTrackingUsageDescription

IDFA 全称为 Identity for Advertisers ,即广告标识符。用来标记用户,目前最广泛的用途是用于投放广告、个性化推荐等。

iOS13 及以前,系统会默认为用户开启允许追踪设置,我们可以简单的通过代码来获取到用户的 IDFA 标识符。

if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {NSString *idfaString = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;NSLog(@"%@", idfaString);
}

 iOS14 中,系统会默认为用户关闭广告追踪权限。 开启需要去请求用户权限:首先需要在 Info.plist 中配置" NSUserTrackingUsageDescription " 及描述文案,接着使用 AppTrackingTransparency 框架中的 ATTrackingManager 中的 requestTrackingAuthorizationWithCompletionHandler 请求用户权限,在用户授权后再去访问 IDFA 才能够获取到正确信息。

#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>- (void)testIDFA {if (@available(iOS 14, *)) {[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {if (status == ATTrackingManagerAuthorizationStatusAuthorized) {NSString *idfaString = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;}}];} else {// 使用原方式访问 IDFA}
}

4.4 Local Network (局域网)

  • iOS14 当 App 要使用 Bonjour 服务时或者访问本地局域网,使用 mDNS 服务等,都需要授权,开发者需要在 Info.plist 中详细描述使用的为哪种服务以及用途。下图为需要无需申请权限与需要授权的服务:

如果应用中需要使用 LocalNetwork 需要在 Info.plist 中配置两个选项,详细描述为什么需要使用该权限,以及需要列出具体使用 LocalNetwork 的服务列表。

 

  • 对于使用了下列包含 Bonjour 的 framework,都需要更新描述.

5  Wi-Fi Address

  • iOS8 - iOS13 ,用户在不同的网络间切换和接入时,mac地址(网卡的识别号)都不会改变。
  • iOS14 提供 Wifi 加密服务,每次接入不同的 WiFi 使用的 mac 地址都不同。每过 24 小时,mac 地址还会更新一次。需要关注是否有使用用户网络 mac 地址的服务。
  • 用户可以自行选择是否开启 private Wi-Fi address

6 上传 AppStore

  • 苹果商店要求所有应用在上架时都必须提供一份隐私政策。如果引入了第三方收集用户信息等SDK,都需要向苹果说明这些信息的用途。 目的是可以让用户在下载 App 之前就知道此 App 将会需要哪些权限。

7 iOS14 launchScreen.storyboard 不起作用

解决:

1. 将General--App Icons and Launch Images--Launch Screen File选项置空

2. 在Info.plist新增Launch image(iPhone)字段(注:我的项目是针对手机的,如果你的是iPad,可以选择对应的字段),然后在value中填写对应的启动图名称即可,如下图所示:

 

我这里的LaunchImage名字来自下图中(这里可以针对不同的机型设置不同的图片):

 



 

 

参考链接:

更多推荐

【QingQing】iOS14 适配汇总

本文发布于:2024-03-06 06:03:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714553.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:QingQing

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!