3

我制作了一个App-Store 应用程序,现在想做一个调整,让它使用 VoIP UIBackgroundMode(保持套接字打开)在后台运行。UIBackgroundModes 存储在 Info.plist 文件中。

在 Cydia 中为我的应用程序提供 VoIP UIBackgroundMode 的最佳方式是什么?它只是一个更改应用程序的 Info.plist 文件的脚本(假设这不会破坏应用程序的签名并导致问题),还是有一个我可以通过调整覆盖的功能?

(我假设无论哪种方式,我都可以在我的应用程序代码中进行必要的最小更改以使用此 UIBackgroundMode(仅在实际设置模式时执行)并且 Apple 不会检测到这一点。我已经使用 VoIP 提交了我的应用程序UIBackgroundMode 处于活动状态并被 Apple 拒绝。删除它和相应的代码后,应用程序被接受。)

4

1 回答 1

4

是的,你可以这样做。只需修改应用程序的 Info.plist 文件(并可能重新启动)。

在越狱设备上,修改 App Store 应用的 Info.plist 文件不会导致应用签名出现问题。

我想您可以尝试找到一种以编程方式执行此操作的方法,但老实说,我不知道除了脚本之外还需要其他任何东西。你只是在做一次修改,对吧?所以,对我来说,这听起来像是简单地编写这个修改的脚本,然后把它放在你的“调整”包DEBIAN/preinstDEBIAN/postinst文件中就足够了。

我有几个想法:

1.默认情况下,您的 Info.plist 文件将是二进制文件,这使得编辑变得更加困难(通过脚本)。这可以通过在修改 plist 文件之前发出此命令来轻松解决:

plutil -convert xml1 Info.plist

从您的应用程序.app目录中。这会将 Info.plist 保留为文本文件。如果你没有plutil,请告诉我,我可以追踪哪个 Cydia 包包含它。

注意:您不必在编辑后将 plist 转换回二进制文件。文本 plist 也是有效的。

2.您可以选择将修改后的 Info.plist 与您的 Debian 软件包捆绑在一起,并简单地将 App Store 版本替换为调整后的版本。但是,您必须担心版本号以及该文件中您使用新版本更新的任何其他属性。在这种情况下,简单地将 Info.plist 的一个版本复制到.app目录中可能不适用于所有版本。因此,您可能需要检测您拥有的版本,或在 plist 文件中搜索

<key>UIBackgroundModes</key>

并在那里插入VOIP模式。我不擅长使用sedand之类的工具awk,如果您需要有关该部分的帮助,您可能可以在这里提出一个简单的脚本问题......我知道 iOS ......脚本......不太好 :)

3.如果您的脚本由于某种原因需要检测 Info.plist 中的应用程序版本,则此命令行将执行此操作:

plutil -key CFBundleVersion Info.plist 

注意:虽然可能有一个 Private API 可以做到这一点,但如果没有. 我很难想象 Apple 会看到这样做的原因,如果他们没有看到这样做的理由,可能没有 API(公共或私有)。通常,您UIBackgroundModes编译时决定。

于 2013-12-01T03:16:39.563 回答