iOS開發--底層開發之越獄開發第一篇

作越獄開發也有一些時間了,有不少東西想總結一下,但願給他人一些借鑑,也是本身對過去開發經歷的一些總結。我的不推薦使用盜版,這裏主要以技術介紹爲主。git

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

  • (1)主要涉及到越獄市場的創建,在App內部實現ipa的安裝和卸載以及更新。參照的對象就是91助手,25pp,同步推那樣的應用。創建一個盜版的App Store.固然了,若是經過299刀的企業證書的話,是不須要經過Cydia的,直接經過網頁連接就能夠實現app的推廣,有必定的風險。這裏面涉及到一些協議,後面會進行介紹。
  • (2)在App內部實現壁紙和鈴聲的替換。這個過程涉及到的東西不少,特別是鈴聲的替換,iPhone裏面很是麻煩;
  • (3)一些越獄插件的開發,經過裏面有些插件很是好用,合理,並且很是美觀漂亮。

這裏先從App內部安裝ipa包開始講,後面逐步把上面提到的3點所有講完。vim

通常狀況下安裝91助手,同步推這樣的應用須要手機越獄,同時安裝AppSync,這樣才能使用,因此進行開發的必備條件也是如此。app

上傳的demo工程的地址,個人github連接:https://github.com/easonoutlook/IPAInstaller工具

以前一直在fork別人的東西,也沒作什麼貢獻,從如今開始,爲開發爲開源,作一點本身的貢獻。測試

 

進入正題:ui

須要的工具和環境:spa

 

一、修改SDKSettings.plist文件插件

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

將這個目錄下的 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/

 

二、給工程添加相應的權限,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簽名。後面再介紹。

 

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

複製代碼
複製代碼
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目錄中,能夠自行查看。

 

四、編譯生成App文件

由於須要給APP簽名加權限,因此不要生成IPA文件,而是生成APP文件。等把簽名與權限加好後,再手動用APP製做IPA文件。

 在Xcode中選擇設備(IOS Device)(圖3),編譯(Build)(圖4)。編譯完成後,在工程的Products文件夾中能夠看到剛剛編譯好的APP文件,右鍵Show in Finder(圖5),就能夠在文件夾中顯示。將APP複製到一個別的文件夾中,什麼地方均可以,後面須要用到。

 

五、製做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的名字是同樣的。  若是沒有輸出錯誤信息或是卡住(就是敲回車後沒反應)就是添加權限成功了。

 

六、生成ipa文件,安裝

新建一個文件夾,命名爲「Payload」。將剛剛添加好權限的APP文件放到這個文件夾中。右鍵「壓縮Payload」,獲得一個「.zip」文件,將這個ZIP文件的後綴名改成「.ipa」。好了,IPA文件就製做完成了。

而後經過itools安裝,測試剛剛生成的文件

 

整合了不少資源,有些地方弄的比較凌亂,後面加以完善

相關文章
相關標籤/搜索