http://www.cnblogs.com/easonoutlook/p/3220429.html
做越獄開發也有一些時間了,有很多東西想總結一下,希望給他人一些借鑑,也是自己對過去開發經歷的一些總結。個人不推薦使用盜版,這裏主要以技術介紹爲主。
這個系列裏面主要介紹怎樣進行越獄開發,涉及到以下幾個方面:
(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
此操作參考的路徑如下: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://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