【问题标题】:Developing with Jailbroken iPhone (Xcode)使用越狱 iPhone (Xcode) 进行开发
【发布时间】:2012-06-06 05:47:22
【问题描述】:

我有一台运行 iOS 5.1.1 的越狱 iPhone 4S。我有 Xcode 4.3.2,我已经能够在我的 iPhone 上运行我的应用程序,但是以一种奇怪的方式。如果我单击 Xcode 上的调试按钮,它会尝试在我越狱的 iPhone 上打开该应用程序,但会失败,因为它会快速打开然后关闭。即使发生这种情况,如果我手动打开应用程序,通过在主屏幕上单击它,它运行正常。这很烦人。最烦人的是,这会导致它不再允许调试,因为 Xcode 看不到它正在运行。

这是它产生的输出:

error: failed to launch '/Users/hetelek/Library/Developer/Xcode/DerivedData/spyapp-flynnmpiqhjoilezvqsbaqdnkesn/Build/Products/Debug-iphoneos/spyapp.app/spyapp' -- failed to get the task for process 3741

当然,每次进程 ID 都会改变。

这是我在越狱iDevice上开发的教程: http://iphonedevwiki.net/index.php/Xcode#Developing_without_Provisioning_Profile

感谢您的帮助。

【问题讨论】:

  • 获取真正的开发者资料,每年只需 100 美元。如果您正在做任何认真的开发,那么您应该投资。现在总比太晚好!
  • 检查可执行文件是否已使用“get-task-allow”权利正确签名。 ldid -e 可以列出权利

标签: iphone xcode device jailbreak


【解决方案1】:

我会尝试再次逐步完成该教程,以确保您正确完成了设置。似乎您可以毫无问题地安装应用程序,但调试器在安装后无法附加到应用程序。如果您确实需要调试器,您可以尝试在安装后在您的设备上打开该应用程序,然后在它运行时(并且您的设备已插入运行 Xcode 的 Mac),打开 Xcode 并转到 Product -> Attach to Process,然后选择列表中的您的应用(如果不存在,那就是另一个问题了)。

另外,请尝试 YllierDev 的建议,即在您的应用程序的权利文件中启用get-task-allow(如果没有,您可以轻松地从 Xcode 中项目的信息页面创建一个)。假设您正确完成了本教程,那应该会有所帮助。

--

要使用 Xcode 4.3 在应用的权利文件中启用“get-task-allow”,请执行以下操作:

  1. 在项目导航器下单击您的项目,然后在“目标”列下选择您的项目名称。
  2. 接下来,转到摘要选项卡,然后在“权利”下选中“启用权利”。
  3. 接下来,右键单击/命令单击项目导航器下的“YOURAPP.entitlements”文件,然后选择“在 Finder 中显示”。
  4. 在 TextEdit 中打开,并添加:

    <key>get-task-allow</key> <true/>

    就在&lt;/dict&gt;之前。

  5. 现在应该可以正常调试和运行了!

【讨论】:

  • 我想知道为什么详细介绍该过程的教程都没有提到这一点!
  • 我们应该接受所有这些越狱开发技巧并将它们整合到一个答案中!
【解决方案2】:

有一个简单的答案。 iPhoneDevWiki 上的说明几乎是正确的。 write() 到临时文件后,需要刷新,否则临时文件为空。您的 ldid3.py 应如下所示:

#!/usr/bin/python
from sys import argv
from subprocess import call, check_call
from os.path import basename, splitext, join
from tempfile import NamedTemporaryFile

app = argv[-1]
obj_path = join(app, splitext(basename(app))[0])
if '-gta' not in argv:
    check_call(['/usr/local/bin/ldid', '-S', obj_path])
else:
    with NamedTemporaryFile() as f:
        f.write("""
            <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
            <plist version="1.0">
            <dict>
            <key>get-task-allow</key>
            <true/>
            </dict>
            </plist>\n""")
        f.flush()
        check_call(['/usr/local/bin/ldid', '-S' + f.name, obj_path])

我在 Xcode 4.3.3 和 iOS 5.1.1 上调试过这种方式。这会按照您的预期工作,您永远不必为新项目弄乱权利。

【讨论】:

    【解决方案3】:

    尝试重启 iPhone 和 Mac。也许某个进程在后台并且仍在运行。

    如果没有帮助,则清理项目并进行全面清理 (how do a Full delete)

    从 iPhone 中删除应用并重新构建。

    如果您的应用使用自库,那么也重新构建他的库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2011-08-13
      相关资源
      最近更新 更多