2012-05-31 130 views
5

我有一個運行iOS 5.1.1的越獄iPhone 4S。我有Xcode 4.3.2,我已經能夠運行我的應用程序到我的iPhone,但以一種奇怪的方式。如果我點擊Xcode上的調試按鈕,它會嘗試打開我的越獄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

獲得一個真正的開發者資料,它只有100美元/年。如果你正在進行任何嚴肅的發展,那麼你應該只是投資。現在好點,已經太晚了! –

+2

檢查可執行文件是否使用「獲取任務允許」權限正確簽名。 ldid -e可以列出權利 – YllierDev

回答

8

我試着再次單步通過該教程,只是爲了確保您正確地運行設置。您似乎可以毫無問題地安裝應用程序,但安裝後調試器無法連接到應用程序。如果你真的需要調試器,你可以試着在安裝後在你的設備上打開應用程序,然後在它運行的時候(你的設備插入運行Xcode的Mac),打開Xcode並轉到Product -> Attach to Process,然後選擇你的應用程序從列表(如果它不在那裏,那是另一個問題)。

此外,請嘗試YllierDev在你的應用的權利文件中啓用get-task-allow的建議(如果它沒有,你可以在Xcode的項目信息頁面中輕鬆創建一個)。假設你正確地閱讀了教程,這應該有所幫助。

-

,使「獲得任務允許」在應用程序的應享權利和Xcode 4.3文件,請執行下列操作:

  1. 點擊你的項目的項目導航下,選擇「目標」欄下的項目名稱。
  2. 接下來,轉到摘要選項卡,然後在「權利」下選中「啓用權利」。
  3. 接下來,右鍵單擊/命令單擊項目導航器下的'YOURAPP.entitlements'文件,然後選擇'在Finder中顯示'。
  4. 在文本編輯中打開,並添加:

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

    </dict>之前。

  5. 它現在應該調試並運行良好!
+0

我想知道爲什麼沒有詳細說明這個過程的教程提到這個! –

+0

我們應該把所有這些越獄開發技巧,並鞏固他們在一個答案! – duci9y

+0

真棒謝謝! – Edoz

0

嘗試重新啓動iPhone和Mac。也許某個進程在後臺運行,並且仍在運行。

如果沒有幫助,再用乾淨的一個項目,做一個完整的清洗(how do a Full delete

從iPhone中移除應用程序和重建。

如果您的應用程序使用自我庫,然後重建他。

+0

已經嘗試過,沒有變化。 :( – hetelek

+0

文本更新 – CReaTuS

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。這種方式按照您的意圖工作,您永遠不必混淆新項目的權利。

+0

這種方法仍然適用於iOS 7和Xcode 5.謝謝! – 0xcaff