作越獄開發也有一些時間了,有不少東西想總結一下,但願給他人一些借鑑,也是本身對過去開發經歷的一些總結。我的不推薦使用盜版,這裏主要以技術介紹爲主。git
這個系列裏面主要介紹怎樣進行越獄開發,涉及到如下幾個方面:github
這裏先從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
此操做參考的路徑以下: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安裝,測試剛剛生成的文件
整合了不少資源,有些地方弄的比較凌亂,後面加以完善