即使“plist”中的“UIBackgroundModes”中存在“voip”,iOS 应用程序在 iOS10 中设备重新启动后也不会自动启动

2023-11-25

我需要我的 VoIP 应用程序在重新启动设备后自动启动。

苹果文档明确提到:-

(=========编辑:这是来自苹果官方文档,请在评论或回答没有用户交互或静默推送通知的情况下无法启动应用程序之前先看一下此内容。另请参阅下面的 Github 项目,人们已经验证了这种行为)

UIBackgroundModes 数组的值

价值:网络电话描述:该应用程序提供 IP 语音服务。具有此键的应用程序会在系统启动后自动启动所以 该应用程序可以重新建立 VoIP 服务。具有此键的应用程序是 还允许播放背景音频。

https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW1

Here is a screenshot from Apple Docs.

我已确保:-

  1. 当设备关闭时,应用程序正在运行。
  2. VoIP 存在于plist and Capabilities部分。
  3. 通过将日志添加到以下文件中,确保应用程序在设备重新启动后不会启动main方法和application:didFinishLaunchingWithOptions:方法。
  4. 设备重新启动后,设备屏幕至少解锁一次。

enter image description here

enter image description here

我什至尝试执行这个具有 36 颗星的 GitHub 示例应用程序来测试 引导启动。https://github.com/lithium3141/BootLaunch
但当我在设备上尝试时,即使这个应用程序也不会在重新启动时重新启动。

因此,这让我思考 iOS10 最近是否发生了一些变化,或者我是否仍然遗漏了一些东西?


好吧,我对此进行了进一步调查,但首先我应该指出,我没有通过实际尝试为此构建一个项目来验证这一点,因为现在对我来说太耗时了。

I found this(评论中已经提到),this,最重要的是本技术问答.

我从这些帖子中特别是 Apple 技术人员的各种评论中收集到的信息显示,iOS 10 的行为确实发生了变化。这意味着,如果您将构建链接到最新的 SDK(即 iOS 10 库),则在过去版本的 iOS 中连接到 VoiP 服务器的相同代码将不再执行此操作。

现在,就您的情况而言,您实际上并不需要真正的 VoIP 连接,对吧?您只是对“重新启动后启动”功能感兴趣,对吗?至少您链接的演示项目实际上并没有进行任何 VoiP 连接,setKeepAliveTimeout:handler:例如,方法甚至没有实现。 我知道这个特定问题没有在链接线程中讨论或在问答中解决,但是:

重启功能连同整个传统 VoiP 行为一起消失,这是有道理的。如果您切换到 Push-Kit VoiP,您的应用程序不需要在重新启动后启动,它会在下一个远程通知到达时重新启动(并且 VoiP 通知具有高优先级,因此应该没有延迟)。

显然,我在这里推断整个事情背后的基本原理,并不能保证苹果真的按照这些思路思考,但它是有道理的:(传统)VoiP 应用程序在重新启动后(重新)启动的全部原因是它需要建立连接,即它需要运行一些代码。由于不再需要推送通知(操作系统基本上在幕后为您执行此操作以获取这些通知),因此他们完全删除了此功能以及整个旧版 VoiP 方法是有道理的。

您可以通过针对较旧的 SDK 进行编译来测试这一点(即按照问答建议使用 Xcode 7),然后查看它是否重新启动。一位苹果员工实际上解释说,操作系统确实在应用程序的构建 SDK 上进行了区分,这对我来说完全违反直觉。显然在这种情况下,对于在 Xcode 7 上构建的应用程序,它会决定“嘿,这是一个较旧的应用程序,因此它希望重新启动,因为它的 SDK 是这样记录的”,而“哦,这个应用程序是一个新应用程序,所以我不这样做”否则不需要坚持旧的方式”。哇西。


TL;DR:对我来说,看起来是的,iOS SDK 改变了这种行为,并放弃了整个旧的、无通知的 VoiP 方法。针对新 SDK 进行编译将导致应用程序在重新启动后无法重新启动。

作为记录:我能理解这些帖子中人们的愤怒。虽然这一变化可能存在技术原因,但这种具体后果远非显而易见。如果某个方法已被弃用,但项目仍然可以编译并运行,我不希望这样的过程会以这种方式失败。这些应用程序不会崩溃,它们只是“操作系统以不同的方式对待”,这并不完全相同。至少我希望新 SDK 中的文档对此更加清晰。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使“plist”中的“UIBackgroundModes”中存在“voip”,iOS 应用程序在 iOS10 中设备重新启动后也不会自动启动 的相关文章

  • 如何使用 xcode 3.1.3 处理 iAd

    目前我正在集成 iAds 并制作该应用程序的精简版 我的问题是以前我使用的 iAds 是 xcode 4 1 3 但目前我使用的是 xcode 3 1 3 iAds 不支持我们所做的 请帮助我 NSString contentSize UI
  • 应用因广告标识符 (IDFA) 被拒绝

    我的申请因以下原因被拒绝 您和您的应用程序 以及与您有联系的任何第三方 签订广告服务合同 可以使用广告标识符 以及通过使用广告获得的任何信息 标识符 仅用于服务广告的目的 如果一个用户 重置广告标识符 则您同意不合并 直接或间接关联 链接或
  • Braintree DropIn + Apple Pay,未出现 Apple Pay 项目

    我成功调用DropIn来自 Braintree SDK 的视图 这BTDropInRequest设置应显示三项 PayPal 信用卡 苹果支付 但由于某种原因在DropIn视图仅呈现两个项目而不是三个 PayPal 信用卡 我做错了什么 准
  • iOS:保持应用程序在后台运行

    如何让我的应用程序在后台运行 我需要越狱我的 iPhone 才能执行此操作吗 我只需要这个应用程序每隔设定的时间间隔从互联网上检查一些内容 并在需要时发出通知 以供我自己使用 是的 不需要越狱 查看本文档的 实现长时间运行的后台任务 部分A
  • 错误:“Int”无法转换为“@lvalue Float”

    给定以下函数 func greatestCommonDenominator first Int second Int gt Int return second 0 first greatestCommonDenominator second
  • “无法调用非函数类型‘HTTPURLResponse’的值?”(Alamofire 4.0) [Swift 3.0]

    我收到此错误 无法调用非函数类型 HTTPURLResponse 的值 关于该部分 response request response data error 我想知道是否有人可以帮助我解决这个问题 Alamofire download ur
  • NSPredicate 查询不包含特定字符串

    对这个问题进行了高低查找 但找不到我的答案 我正在查询核心数据以查找不等于指定字符串的所有记录 例如 所有不等于当前会话ID的记录 我已经尝试过这些但无济于事 NSPredicate predicate NSPredicate predic
  • 如何查找哪个注释发送了showDetails?

    如何查找哪个注释发送了showDetails MKPinAnnotationView customPinView MKPinAnnotationView alloc initWithAnnotation annotation reuseId
  • iOS7及以上版本中如何在接收器和扬声器之间切换音频输出?

    我有一个音频播放器 可以选择在接近传感器通知 1 时将音频输出从扬声器切换到接收器 耳机 无论是否连接耳机 以下是我执行此操作的代码 void switchAudioOutput NSString output AVAudioSession
  • 如何改进 iOS 中的 TWTweetComposeViewController 代码?

    我已经实现了以下代码来进行 Twitter 共享 在我的代码中 我尝试测试 iOS 5 如果这不起作用 我会回到使用 ShareKit 的 Twitter 代码进行共享的旧方式 我向同事展示了代码 他建议我的代码可能有缺陷 我需要做两件事
  • CoreAnimation 性能分析 - CAReplicatorLayer 与 CAShapeLayer

    我正在制作一个依赖 CoreAnimation 的应用程序 它有一个 CAReplicatorLayer 和一个 CAShapeLayer 作为子层 当进行 12 次复制 然后对路径进行动画处理 在 touchMoved 上更改它 时 一旦
  • 移动 Safari 中的文件上传和 EXIF

    正如这些问题中所指出的 在某些情况下 iOS 上上传的照片的地理位置和其他 EXIF 元数据会被删除 在 safari 中 https apple stackexchange com questions 326789 gps exif fr
  • 检测您何时进入/退出 Xamarin.iOS 中的主线程

    Xamarin MonoTouch 有没有办法检测主线程中是否正在调用代码 我正在寻找类似于Java的东西EventQueue isEventDispatchThread 我发现 Swing 编程很方便assert时不时 或有时assert
  • 如何更改 UISwitch 关闭状态的默认颜色?

    我想更改 UISwitch 中 onTintColor 的颜色以表示关闭状态 切换位于表格视图中 并且以编程方式进行切换 settingsSwitch setBackgroundColor UIColor whiteColor settin
  • iOS UITableViewCell 配件在左侧?

    对于我的应用程序 我想要一些可以同时具有复选标记和详细信息披露按钮的单元格 也就是说 我希望它们看起来与 iOS 设置中的 Wi Fi 网络选择一模一样 左侧的复选标记 中间的内容 右侧的详细信息披露按钮 有没有正确的方法来做到这一点 或者
  • Xcode 不会在故事板中显示我的文本字段占位符文本

    当我在属性检查器中分配文本字段的占位符值时 它不会显示在故事板中 但是 当我运行应用程序的模拟器时 它就在那里 我缺少什么设置吗 我只想能够在编辑器中看到占位符文本 下面是 xcode 和模拟器之一的屏幕截图 我遇到了同样的问题 幸运的是我
  • macOS 应用程序中还需要 Swift 的嵌入式 dylib吗?

    Swift 5 发行说明说 对于运行 iOS 12 2 watchOS 5 2 和 tvOS 12 2 的设备 Swift 应用程序不再在构建变体中包含 Swift 标准库和 Swift SDK 覆盖的动态链接库 但在同一上下文中没有提及
  • 编写支持 iOS 3.1.3 和 iOS 4.x 的 iOS 应用程序时的陷阱

    我想编写一个可以在 iOS 3 1 3 到 iOS 4 1 上运行的应用程序 我知道如何设置部署目标和基础 SDK 阅读 Apple 文档后 它很大程度上依赖于检查类是否可用和 或实例是否响应特定选择器 现在我的问题是 如果 Apple 从
  • 我可以在 NS_SWIFT_NAME 中使用保留关键字吗?

    我正在尝试使 Objective C 委托协议更漂亮以便在 Swift 中使用 但我在弄清楚如何使用时遇到了一些麻烦NS SWIFT NAME 是否可以使用NS SWIFT NAME指定 Swift 名称中与 Objective C 关键字
  • 如何在 Swift 中使用 substringToIndex? [复制]

    这个问题在这里已经有答案了 我在这一行收到编译器错误 UIDevice currentDevice identifierForVendor UUIDString substringToIndex 8 类型 String Index 不符合协

随机推荐

  • Web应用中长时间运行查询问题的解决方案(异步请求)

    这是问题所在 企业 Web 应用程序的用户正在执行导致长 非常长 数据库查询 或其他长处理密集型任务 的任务 问题 请求超时 一段时间后用户可能会遇到请求超时 会话超时 如果未使用会话保持方法 则可能会发生会话超时 Request thre
  • Jest + Material-UI:正确模拟 useMediaQuery

    我正在使用 Material UIuseMediaQuery 我的组件之一中的函数来确定size用于 a 的道具
  • Angular 2 路由参数重新初始化组件 onInit

    我遇到一个问题 当我使用新参数路由到我的组件时 它正在重新初始化 这是我的路线 const appRoutes Routes path component MyNewComponentComponent path tiles compone
  • 关于多个“catch”的问题

    谁能告诉我为什么这个类的输出是 xa 为什么其他异常 RuntimeException和Exception 不会被捕获 public class Tree public static void main String args try th
  • WPF TabItem 内容对齐始终居中

    我试图将一些内容放入 TabItem 中 但无法添加填充 TabItem 空间的容器 我添加的任何内容都会居中显示 我正在使用 WPF Toolkit 中的主题 WhistlerBlue xaml 所以我认为这可能就是导致我出现这个问题的原
  • 为什么从 PHP 5.4 开始永久启用“echo”短标签?

    甚至官方文档曾经告诉我们PHP 短标签 是 坏 然而 从 PHP 5 4 开始 echo种类永久启用 无论short open tag setting 发生了什么变化 即使他们之前仅仅因为是否存在不可预测的性质而被劝阻short open
  • 如何在python(windows平台)中安装xgboost包?

    http xgboost readthedocs org en latest python python intro html 在xgboost的主页 上面的链接 上 写着 要安装 XGBoost 请执行以下步骤 你需要跑make在项目的根
  • 使用 FindMatchingFiles 工作流活动的 MatchPattern 属性

    我正在使用 TFS 2010 Team Build 自定义构建过程模板的默认工作流程 有一个活动叫FindMatchingFiles允许使用中定义的模式搜索特定文件MatchPattern财产 如果我只指定一个文件扩展名 它就会起作用 例子
  • OpenGraph 还是 Schema.org? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 只是想知道你们是否喜欢遵循以下标记的 OpenGraph 协议 或者 Schema org 协议 div span Kenmore White 17 Mi span div
  • 无法在 Ubuntu 13.04 上使用 RVM 安装 Ruby on Rails

    我正在尝试在我的 Ubuntu 机器上安装 RVM 我已经使用curl来获取RVM 但是一些RVM命令 安装 要求 抛出此apt get错误 There has been error while updating apt get pleas
  • Git-2-SVN 迁移?

    是的 我知道 为什么要从 Git 迁移到 SVN 好吧 我碰巧遇到这样的情况 我需要将一个巨大的 Git 存储库迁移到 Subversion 这是我根据埃德温的评论尝试的一个工作流程 首先创建一个本地SVN仓库 svnadmin creat
  • 通过推送通知启动应用程序时进行调试

    我目前正在开发一个接收推送通知的应用程序 我通过 PHP 页面使这一切 100 正常工作 我的应用程序可以接收多种不同类型的推送通知 PHP 处理这个问题并向我的应用程序发送不同的信息包 这些信息包都被很好地接收 但是 当用户 查看 通知并
  • 在类的构造函数中返回一个值

    到目前为止我有一个PHP带有构造函数的类 public function construct identifier NULL Return me if identifier NULL this gt emailAddress identif
  • 在 C++ 中寻找基于 Windows RAM 的共享内存解决方案

    我面临着一种情况 我需要将多达数百兆字节的内存从一个进程传递到另一个进程 现在我正在通过文件来完成它 但速度太慢了 我想为了更快 这些文件应该直接写入 RAM 并且可以从另一个进程访问 不需要花哨的同步 一个进程将创建共享内存对象并用数据填
  • 内容出现在固定标题后面

    我修复了网站的标题部分 但页面的第一个 div 出现在标题后面 而不是从标题的末尾开始 当您申请时position fixed or position absolute该元素将从文档流中删除 因此后面的元素将其视为不存在 这就是为什么你的d
  • 实体框架 nvarchar 外键区分大小写

    我有相当简单的表结构 如下所示 问题对我来说听起来很奇怪 虽然我选择解决这个问题 但想听取专家的意见 我有两张桌子 Users UserName nvarchar 250 Primary Key FirstName nvarchar 50
  • 为什么 Angular 5 中出现错误:没有导出成员“OpaqueToken”。?

    我有一个 Angular 4 应用程序 我正在将其升级到 Angular 5 我收到以下错误 src app application services generated variables ts 1 10 中出现错误 错误 TS2305
  • 处理控制器中的唯一记录异常

    我有一个名为 Subscription 的模型 它在字段 email location 上有唯一的索引 这意味着每个位置都可以通过一个电子邮件地址进行订阅 在我的模型中 class Subscription lt ActiveRecord
  • Angular 1.2 不再允许在同一元素上使用多个独立作用域指令?

    我在 Angular 项目中有一些代码 它们使用两个具有隔离范围的单独指令 它们不需要共享范围 只需存在于同一元素上即可 它们都以稍微不同的方式改变 DOM 并且重要的是绑定到作为参数传递的值 这在 1 0 中有效 但是 Angular 1
  • 即使“plist”中的“UIBackgroundModes”中存在“voip”,iOS 应用程序在 iOS10 中设备重新启动后也不会自动启动

    我需要我的 VoIP 应用程序在重新启动设备后自动启动 苹果文档明确提到 编辑 这是来自苹果官方文档 请在评论或回答没有用户交互或静默推送通知的情况下无法启动应用程序之前先看一下此内容 另请参阅下面的 Github 项目 人们已经验证了这种