我做了一个App-Store app,现在想调整一下,让它在后台使用VoIP UIBackgroundMode运行(保持套接字打开)。 UIBackgroundModes存储在Info.plist文件中。
在Cydia中为我的应用提供VoIP UIBackgroundMode的最佳方法是什么?它是否只是一个更改应用程序的Info.plist文件的脚本(假设这不会破坏应用程序的签名并导致问题),或者是否有一个我可以通过调整覆盖的函数?
(我假设我可以使用这个UIBackgroundMode(仅在模式实际设置时才执VoIP UIBackgroundMode处于活动状态并被Apple拒绝。删除它后,应用程序被相应的代码接受。)
答案 0 :(得分:4)
是的,你可以这样做。这只是修改应用程序的Info.plist文件(并可能重新启动)的问题。
在越狱设备上,修改App Store应用的Info.plist文件不会导致应用签名出现问题。
我想你可以尝试找到一种以编程方式进行的方法,但老实说,我不知道除了脚本之外还需要什么。你只是进行一次性修改,对吧?所以,对我来说,这听起来只是简单地编写了这个修改脚本,并将它放在“tweak”包的DEBIAN/preinst
或DEBIAN/postinst
文件中就足够了。
我有几点想法:
1。默认情况下,您的Info.plist文件将是二进制文件,这使得编辑(通过脚本)变得更加困难。通过在修改plist文件之前发出此命令,可以很容易地解决这个问题:
plutil -convert xml1 Info.plist
在您应用的.app
目录中。这将把Info.plist留作文本文件。如果您没有plutil
,请告诉我,我可以追踪哪个Cydia包中包含它。
注意:编辑后,您不必将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
。