2011年2月8日 星期二

Xcode 4 Developing for a Jailbroken iOS Device


更新日期: 2011/03/11
適用範圍: Xcode 4 (只需更改相對應的 iOS 版本目錄位置)
參考資料:
1. Developing for a Jailbroken iPhone A to Z (iOS 4.0.1) « alexwhittemore.com
   http://www.alexwhittemore.com/?p=398

2. Xcode 3.2.1 假認證,將自己的Apps放上iphone運行

   http://xspace.uwantx.com/space.php?uid=1&do=blog&id=264


一. 環境:
1. Device: iPod touch 3rd generation (Jailbroken)
2. iOS: 4.2.1
3. Mac OS X: 10.6.6 Snow Leopard
4. Xcode: Xcode 4 and iOS SDK 4.3 Final 


二. 步驟:
1. 在 Mac OS X 上, 開起終端機(Terminal), 執行以下的輸入﹕

   (1). 進入對應的 iOS 版本位置:
        cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/

   (2). 備份屬性設定檔; 會要求輸入密碼:
        sudo cp SDKSettings.plist SDKSettings.plist.backup

   (3). 使用 vi 來編輯:
        sudo vi SDKSettings.plist                        

2. 承上, 找到:

CODE_SIGNING_REQUIRED
YES

…. 與 ....

ENTITLEMENTS_REQUIRED
YES
=> 將 YES 改成 NO 後, 儲存後離開 (按 esc 後輸入 :wq ). // :wq => write & quit

3. 承上, 然後輸入﹕
   (1). cd /Developer/Platforms/iPhoneOS.platform/
   (2). sudo cp Info.plist Info.plist.backup
   (3). sudo vi Info.plist
       => 找到所有的 XCiPhoneOSCodeSignContext(有 3個),
            並將其改成 XCCodeSignContext

4. 承上, 然後輸入﹕
   (1). cd ~/Desktop
   (2). vi script (輸入 i 鍵,進入文本修改狀態)
   (3). 將下面的內容複製到終端中 (Terminal)

#!/bin/bash
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
printf “\xc3\x26\x00\x00〃 >> working
dd if=iPhoneOS\ Build\ System\ Support of=working bs=1 skip=127504 seek=127504
/bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
/bin/mv working iPhoneOS\ Build\ System\ Support
chmod a+x iPhoneOS\ Build\ System\ Support

   (4). 儲存後離開 (按 esc 後輸入 :wq ).
   (5). 調整權限: chmod 777 script

   (6). 執行 ./script, 可看到類似以下的輸出: (如果沒有的話可以嘗試 sudo ./script)
231+1 records in
231+1 records out
115904 bytes transferred in 0.021222 secs (5461534 bytes/sec)
0+0 records in
0+0 records out
0 bytes transferred in 0.000014 secs (0 bytes/sec)

5. Xcode Organizer:
   (1). 在 iPod touch 連接 Mac 情況下開啓 Xcode 4, 將 iPod touch 設成開發使用:

        a. 點擊右上角的 "Organizer".
        b. 接著, 在跳出式窗的 DEVICES 項目下, 選擇自己的 iPod touch 名稱.
        c. 按下中間的 "Using for Development" 按鈕.
        d. 接著,當要你輸入付費開發者的帳號密碼時, 按取消即可.

   (2). 此外, Xcode 的 Organizer 也可能會出現訊息: Unknown iOS detected,
        按下 Collect 即可.

       



訊息: Xcode does not have debugging information for the version of iOS on the device named “Lanli's iPod”. Xcode can collect debugging data from the device to enable development with this version of iOS. This process only needs to be done once per iOS version, and will take several minutes.

說明: 後來我移除 Xcode 後, 並在終端機下移除了 iOS 4.2.1 (8C148) 的相關資料:
         cd /Developer/Platforms/iPhoneOS.platform/DeviceSupport
         sudo rm -rf 4.2.1\ \(8C148\)/

         再重裝 Xcode 時, 接上 iPod touch 後, 就會再出現
Unknown iOS detected
         的訊息, 這時若是按下
"Cancel", Build 時就會出現訊息:
         Xcode cannot run using the selected device.
         NO provisioned iOS device are available. Connect an iOS device or
         choose a an iOS simulator as the destination.

         所以還是要按下 Collect 按鈕.

6. Xcode Build Settings:
   (1). 開啓/建立 一個專案 => 點二下 PROJECT 下的專案名稱
        => 切換到 Build Settings Tab(頁籤).

   (2). 檢查 / 設定 Base SDK: iOS 4.3


   (3). 檢查 / 設定 Code Signing Identity:
         Debug:
         Any iOS SDK: Don't Code Sign

         Release:
         Any iOS SDK: Don't Code Sign

   (4). 檢查 / 設定 Deployment:
         Targeted Device Family: iPhone
         iOS Deployment Targete: iOS 4.2


三. 開始測試:
    1. 設定 active scheme 為 iPod touch 的名稱:
  
    2. 執行 Run:  Build 成功.

    3. app 在實機上跑是正常的, 但是會出現錯誤訊息:
       Error Starting Executable "your app name":


四. 調整 active scheme: (讓錯誤訊息不再出現)
     1. 點下 active scheme 的下拉式選單, 選擇 Edit Scheme...

2. 在跳出來的選單中, 左邊選擇 Run xxx.app, 將右邊的 Info Tab 下的 Debugger 項目,
    值由預設的 GDB 改選成 None.




2 則留言:

  1. 编译过之后可以安装, 但是马上会crash. 你的有这情况吗?

    回覆刪除
  2. 1. 一開始也會, 後來我作了 "四.調整 active scheme" 的步驟與使用 Xcode 4.0 正式版(之前是用 GM 版) 有改善一些.
    2. 我沒有測試較複雜的 code.
    3. 有些 app 的確是安裝後執行就 crash 掉, 但再執行一次就正常了.

    以上供參考 ~

    回覆刪除

注意:只有此網誌的成員可以留言。