2013-11-28 88 views
3

我做了App-Store app,并且现在想做一个调整,让它在使用VoIP UIBackgroundMode(保持套接字打开)的背景下运行。 UIBackgroundModes存储在Info.plist文件中。使用Jailbreak调整/脚本将新的UIBackgroundMode添加到App-Store应用程序

什么是最好的方式给我的应用在Cydia的VoIP UIBackgroundMode?它会只是一个脚本,改变应用程序的Info.plist文件(假设这不会破坏应用程序的签名并导致问题),还是有一个功能,我可以通过调整来覆盖? (我假设无论哪种方式,我都可以对我的应用程序的代码进行微小的更改,以便使用此UIBackgroundMode(仅在实际设置模式时才执行),Apple不会检测到这一点。应用程序的VoIP UIBackgroundMode处于活动状态,并被Apple拒绝。删除后,相应的代码被接受。)

回答

4

是的,您可以这样做。这只是修改应用的Info.plist文件(也许重新启动)的问题。

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

我想你可能试图找到一种方法来做到这一点编程,但老实说,我不知道任何超过脚本是必需的。你只是做一次性修改,对吧?所以,对我而言,这听起来像是简单地编写了这个修改脚本,并将它放在你的“调整”包DEBIAN/preinstDEBIAN/postinst文件中就足够了。

我有几个想法:

默认情况下,你的Info.plist文件将是二进制的,这使得它更难编辑(通过脚本)。从您的应用程序的.app目录内

plutil -convert xml1 Info.plist 

:这可以很容易地通过修改plist文件之前发出此命令工作围绕。这会将Info.plist作为文本文件。如果您没有plutil,请告诉我,我可以追查哪些Cydia软件包包含它。

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

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

<key>UIBackgroundModes</key> 

,并插入VOIP模式存在。我并不擅长使用sedawk这样的工具,如果您需要有关该部分的帮助,您可能会在此处提出一个简单的脚本问题...我知道iOS ...脚本...更少:)

3.如果您的脚本需要检测Info中的应用程序版本。plist中由于某种原因,该命令行会做到这一点:

plutil -key CFBundleVersion Info.plist 

注:虽然可以有一个私人的API来做到这一点,我也不会感到惊讶,如果有。我很难想象苹果会这样做的原因,如果他们没有理由这样做,那么可能没有API(公共或私有)。通常情况下,你决定UIBackgroundModes编译时间。

+0

再次感谢您提供另一个惊人的完整和翔实的答案,超越了大多数答案提供的答案。 – newenglander

+1

@newenglander,不客气。请注意我在第1节中添加的“注释”。 – Nate

+0

这是一个私人API。 Apple使用它来运行可随时启动的系统进程,但不要使用APNS服务。 –

相关问题