我制作了一个应用商店应用程序,现在想做一个调整,让它在后台使用VoIP UIBackgroundMode运行(保持套接字打开)。UIBackgroundMode存储在Info.plist文件中。
在Cydia中为我的应用程序提供VoIP UIBackgroundMode的最佳方式是什么?它只是一个更改应用程序Info.plist文件的脚本(假设这不会破坏应用程序的签名并导致问题),还是有一个我可以通过调整来覆盖的函数?
(我认为无论哪种方式,我都可以对我的应用程序代码进行使用UIBackgroundMode所需的最小更改(只有在实际设置模式时才会执行),而苹果不会检测到这一点。我已经在VoIP UIBackgroundMode处于活动状态的情况下提交了我的应用程序,但被苹果拒绝了。删除它和相应的代码后,应用程序被接受。)
是的,你可以这样做。这只是修改应用程序的Info.plist文件(也许还需要重新启动)的问题。
在越狱设备上,修改应用商店应用程序的Info.plist文件不会导致应用程序签名出现问题。
我想您可以尝试找到一种以编程方式实现它的方法,但老实说,我不知道除了脚本之外还需要什么。你只是做了一次一次性的修改,对吧?所以,对我来说,这听起来像是简单地编写这个修改的脚本,并将其放在"调整"包的DEBIAN/preinst
或DEBIAN/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模式。我对sed
和awk
这样的工具不太熟悉,如果你需要这方面的帮助,你可能会在这里提出一个简单的脚本问题。。。我知道iOS。。。正在编写脚本。。。较少:)
3.如果您的脚本出于某种原因需要检测Info.plist中的应用程序版本,此命令行将执行以下操作:
plutil -key CFBundleVersion Info.plist
注意:虽然可能有一个私有的API来做这件事,但如果有而不是,我也不会感到惊讶。我很难想象苹果会这样做的原因,如果他们看不到这样做的理由,可能就没有API(公共或私人)。通常,您在编译时决定UIBackgroundModes