【问题标题】:Add new UIBackgroundMode to an App-Store app with Jailbreak tweak/script使用越狱调整/脚本将新的 UIBackgroundMode 添加到 App-Store 应用程序
【发布时间】:2013-11-28 09:51:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios jailbreak cydia tweak backgrounding


    【解决方案1】:

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

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

    我想您可以尝试找到一种以编程方式执行此操作的方法,但老实说,我不知道除了脚本之外还需要其他任何东西。你只是在做一次修改,对吧?所以,对我来说,这听起来像是简单地编写这个修改的脚本,并将它放在你的“tweak”包的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 模式。我不擅长使用sedawk 之类的工具,如果您需要这部分的帮助,您可能可以在这里提出一个简单的脚本问题......我知道iOS......脚本......不太这样:)

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

    plutil -key CFBundleVersion Info.plist 
    

    注意:虽然可能有专用 API 来执行此操作,但如果有 没有,我也不会感到惊讶。我很难想象 Apple 会看到这样做的原因,如果他们没有看到这样做的理由,可能没有 API(公共或私有)。通常,您在编译时决定UIBackgroundModes

    【讨论】:

    • 再次感谢您提供的又一个令人惊讶的完整且内容丰富的答案,超出了大多数答案所提供的范围。
    • @newenglander,不客气。请注意我在第 1 节中添加的“注释”。
    • 为此有一个私有 API。 Apple 使用它来运行可以随时启动的系统进程,但不使用 APNS 服务。
    • @Sam,请告诉我们那个 API 是什么。我会觉得这很有用。顺便说一句,您不需要 私有 API 来执行此操作。 launchctl/launchd 允许您随时启动和停止系统进程。
    • @Sam,是的,我知道这些模式(见my answer here)......确实非常有用。我想我认为 Private API 是一个您可以实际以编程方式调用的接口,而不是您放入 Info.plist 的“未记录”设置。不过,也许这让人毛骨悚然:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2017-12-19
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多