iOS越獄開發(一)


做越獄開發也有一些時間了,有很多東西想總結一下,希望給他人一些借鑒,也是自己對過去開發經歷的一些總結。個人不推薦使用盜版,這里主要以技術介紹為主。

這個系列里面主要介紹怎樣進行越獄開發,涉及到以下幾個方面:

(1)主要涉及到越獄市場的建立,在App內部實現ipa的安裝和卸載以及更新。參照的對象就是91助手,25pp,同步推那樣的應用。建立一個盜版的App Store.當然了,如果通過299刀的企業證書的話,是不需要通過Cydia的,直接通過網頁鏈接就可以實現app的推廣,有一定的風險。這里面涉及到一些協議,后面會進行介紹。

(2)在App內部實現壁紙和鈴聲的替換。這個過程涉及到的東西很多,特別是鈴聲的替換,iPhone里面非常麻煩;

(3)一些越獄插件的開發,通過里面有些插件非常好用,合理,而且非常美觀漂亮。

這里先從App內部安裝ipa包開始講,后面逐步把上面提到的3點全部講完。

一般情況下安裝91助手,同步推這樣的應用需要手機越獄,同時安裝AppSync,這樣才能使用,所以進行開發的必備條件也是如此。

上傳的demo工程的地址,我的github鏈接:https://github.com/easonoutlook/IPAInstaller

之前一直在fork別人的東西,也沒做什么貢獻,從現在開始,為開發為開源,做一點自己的貢獻。

 

進入正題:

需要的工具和環境:

A. iPhone or iPad越獄,安裝AppSync

B. Xcode安裝 Command Line Tools

C. 下載最新版本的ldid https://github.com/downloads/rpetrich/ldid/ldid.zip

1、修改SDKSettings.plist文件

我用的是Xcode4.6.3版本,iPhone的版本是6.1.2, 路徑為:/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/

將這個目錄下的 SDKSettings.plist里面的CODE_SIGNING_REQUIRED置為NO

執行命令為:

轉到目錄下

cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk

將原有文件備份

sudo cp SDKSettings.plist SDKSettings.plist.orig

對SDKSettings.plist文件進行編輯

sudo vim SDKSettings.plist

將下面對應的字段改為NO
<key>CODE_SIGNING_REQUIRED</key>
<string> YES </string>  // 默認為YES, 需要改為NO

此操作參考的路徑如下:http://kqwd.blog.163.com/blog/static/4122344820117191351263/

2、給工程添加相應的權限,iOS6里面需要賦予權限才可以,iOS5之前不需要此操作

新建一個plist文件,命名為entitlements.

創建一個plist

將plist文件改為:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>com.apple.private.mobileinstall.allowedSPI</key>
        <array>
            <string>Install</string>
            <string>Browse</string>
            <string>Uninstall</string>
            <string>Archive</string>
            <string>RemoveArchive</string>
        </array>
    </dict>
</plist>

將Code Signing 的Code Signing Entilements設置為剛剛創建的entitlements.plist文件

后面還需要一個手續,將生產的app文件用ldid簽名。后面再介紹。

3、實現越獄安裝的代碼:

typedef NSDictionary *(*PMobileInstallationLookup)(NSDictionary *params, id callback_unknown_usage);
NSDictionary *IPAInstalledApps()
{
    void *lib = dlopen("/System/Library/PrivateFrameworks/MobileInstallation.framework/MobileInstallation", RTLD_LAZY);
    if (lib)
    {
        PMobileInstallationLookup pMobileInstallationLookup = (PMobileInstallationLookup)dlsym(lib, "MobileInstallationLookup");
        if (pMobileInstallationLookup)
        {
            NSArray *wanted = nil;//[NSArray arrayWithObjects:@"com.celeware.IPADeploy",@"com.celeware.celedial",nil]; Lookup specified only
            NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:@"User", @"ApplicationType", wanted, @"BundleIDs",nil];
            NSDictionary *dict = pMobileInstallationLookup(params, NULL);
#ifdef DEBUG
            NSLog(@"%@", dict);
#endif
            return dict;
        }
    }
    return nil;
}

所有代碼均在之前的github目錄中,可以自行查看。

4、編譯生成App文件

需要APP簽名加權限,所以不要生成IPA文件,而是生成APP文件。等把簽名與權限加好后,再手動用APP制作IPA文件。

 Xcode中選擇設備(IOS Device)(圖3),編譯(Build)(圖4)。編譯完成后,在工程的Products文件夾中可以看到剛剛編譯好的APP文件,右鍵Show in Finder(圖5),就可以在文件夾中顯示。將APP復制到一個別的文件夾中,什么地方都可以,后面需要用到。

 

5、制作ipa文件

將之前提到的ldid下載好后,將ldid文件放到/usr/bin中。

比如在 Download 目錄下, sudo -i 

然后 cp ldid /usr/bin/即可將文件拷貝到/usr/bin中。

然后對之前生成的文件,進行ldid簽名

這個命令中“ldid -S ,“ldid”與“-S”之間有一個空格。“-S”與“entitlements.xml”之間沒有空格。“entitlements.xml”就是上面說到的XML文件,如果你的XML不是這個名,請將命令修改為你的XML文件名即可。

-Sentitlements.xm”與“ipainstall.app”之間有一個空格。“ipainstall”是剛剛生成的APP文件,如果你的名字不一樣,請修改為你的名字。“/“后面和APP的名字是一樣的。  如果沒有輸出錯誤信息或是卡住(就是敲回車后沒反應)就是添加權限成功了。

6、生成ipa文件,安裝

新建一個文件,命名Payload”。將剛剛添加好權限的APP文件放到這個文件夾中。右鍵“壓縮Payload”,得到一個“.zip”文件,將這個ZIP文件的后綴名改為“.ipa”。好了,IPA文件就制作完成了。

然后通過itools安裝,測試剛剛生成的文件

 

整合了很多資源,有些地方弄的比較凌亂,后面加以完善

參考資源鏈接:

http://since2006.com/blog/240/ios6-mobileinstallationinstall

http://blog.sina.com.cn/s/blog_9cd1705d0101l4bo.html

http://kqwd.blog.163.com/blog/static/4122344820117191351263/

http://blog.csdn.net/linkai5696/article/details/5924356

http://www.yonsm.net/post/553

http://stackoverflow.com/questions/14871748/how-do-i-change-my-applications-entitlements-to-com-apple-backboard-client

http://stackoverflow.com/questions/13817569/how-to-programatically-install-a-ipa-file-in-ios-6/15062538#15062538

http://since2006.com/blog/240/ios6-mobileinstallationinstall

http://hi.baidu.com/prognostic/item/831b622202b2dd0f72863e9c

http://www.vsyo.com/a/t/89895554d4043c5a

http://mobile.dotblogs.com.tw/cmd4shell/archive/2013/03/26/98967.aspx

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM