我有一个运行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
感谢您的帮助。
答案 0 :(得分:8)
我会再次尝试逐步完成该教程,以确保正确完成设置。您似乎可以毫无问题地安装应用程序,但调试器无法在安装后附加到应用程序。如果您确实需要调试器,可以尝试在安装后在设备上打开应用程序,然后在运行时(并将设备插入运行Xcode的Mac),打开Xcode并转到Product -> Attach to Process
,并从列表中选择您的应用程序(如果它不在那里,这是另一个问题)。
另外,请尝试YllierDev建议在应用程序的Entitlements文件中启用get-task-allow
(如果没有,您可以在Xcode的项目信息页面轻松创建一个)。假设您正确完成了本教程,那应该有所帮助。
-
要使用Xcode 4.3在应用程序的Entitlements文件中启用“get-task-allow”,请执行以下操作:
在TextEdit中打开,并添加:
<key>get-task-allow</key>
<true/>
在</dict>
之前。
答案 1 :(得分:1)
有一个简单的答案。 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进行调试。这可以按照您的预期方式运行,您将永远不必搞乱新项目的权利。
答案 2 :(得分:0)
尝试重新启动iPhone和Mac。也许某些流程在后台并且仍在运行。
如果没有帮助,请清理项目并执行完全清理(how do a Full delete)
从iPhone中移除应用并重建。
如果你的应用使用自己的库,那么也要重建他。