【问题标题】:How do I pass options (to didFinishLaunchingWithOptions) to the app I activate from my tweak?如何将选项(到 didFinishLaunchingWithOptions)传递给我从我的调整中激活的应用程序?
【发布时间】:2012-06-01 12:56:42
【问题描述】:

我有一个加载到 SpringBoard 并激活从外部源指定的应用程序的调整。

如何将任何参数传递给我激活的应用程序? SBUIController::activateApplicationFromSwitcher() 似乎没有任何规定,以及 SBApplication。

背景:我需要将 file:// url 传递给移动 safari。我已经安装了用于移动 safari 调整的 file://,但是它没有在移动 safari 中注册 file:// 方案,因此 openURL 不起作用。

另一种选择是通过教它如何响应 file:// url 来扩展移动 safari。似乎找不到我需要挂钩的东西。

【问题讨论】:

  • 您可以使用 execve 或 system 函数将命令行参数传递给 Safari,但我不确定是否需要将 URL 作为命令行参数打开。
  • AFAIK 应用程序在 SB 不知道的情况下午餐是不可见的。我会测试这个。还有其他想法吗?
  • 对于钩子,你能不能向com.bigboss.safaripatchfile:// 插件的开发者索取源代码?我在任何地方都找不到它。
  • @Cole Johnson:刚刚给 Jay 写了一封电子邮件,我们拭目以待

标签: iphone ios jailbreak


【解决方案1】:

可以做到这一点。首先,您必须编辑 MobileSafari 的 Info.plist,以便将 file:// 添加到 url 方案中。其次,您必须使用 mobilesubstrate 覆盖 application:openURL: 方法来处理此地址。这将需要一些逆向工程来弄清楚如何正确地做,但它是可以做到的。

【讨论】:

  • 另外,弄清楚 url 方案注册是如何工作的。那么你可以覆盖那些
【解决方案2】:

您可能对 Cydia 的工作方式感兴趣。

Cydia 本身的可执行文件是 MobileCydiaAFAIK,SpringBoard 启动 Cydia,这实际上是一个 bash 文件:

#!/bin/bash
C=/${0}
C=${C%/*}
declare -a flags
[[ :${DYLD_INSERT_LIBRARIES}: == */MobileSubstrate.dylib: ]] && flags[${#flags[@]}]=--  substrate#!/bin/bash
exec "${C:-.}"/MobileCydia "${flags[@]}" -- "$@" 2>>/tmp/cydia.log

实际启动 Cydia 的代码是exec 命令。 Cydia 所做的是从那里解析参数。这使得 Cydia 可以连接 MobileSubstrate,这是所有调整都需要的。

希望这会有所帮助!

【讨论】:

  • 但是如果不是这样实现的话,你不能让 Safari 像这样读取 URL。
  • 我想知道 mobilesafari 是否在传递给 didFinishLaunchingWithOptions() 的字典中查找 url?
  • 那个 bash 脚本与 didFinishLaunchingWithOptions: 无关。这会将参数传递给 main()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多