使用私有API在iOS7.1上啓動、卸載程序

對於由於各種需求而不得不接觸iOS開發的碼農來說,如果需求就是開發在AppStore中上線的項目,那只要在書店買來與iOS開發相關的書籍,然後一陣惡補,跌跌撞撞就上路了,但就怕有些需求,“不要上線AppStore,越獄也行,只要實現我想要的功能”,然後就發現越獄的某些東西還是很難搞的,特別是對於我這種都沒有接觸過OC的超級小白來說,就更難了。想着就想寫篇blog,一來當做筆記,二來也是希望對跟我一樣的小白們有所幫助。當然請大神們繞行。

破解Xcode+免證書真機調試的教程網上有很多,我是參考的以下兩篇文章:http://www.it165.net/pro/html/201407/18577.html 與 http://kuangqi.me/ios/ios-development-without-idp/ ,其中第一篇中“生成本機證書”的部分對於我這種超級小白來說太實用了,當然我沒有做這一步,因爲已經有了開發者證書。破解Xcode部分,我主要是參照第二篇blog中的內容做的。但在某些地方可能會遇到一些問題,比如編輯配置文件時,需要先修改文件的權限,修改的方式有兩種,第一種比較笨,就是直接open . 在Finder中打開,然後右鍵顯示簡介,直接修改權限爲讀與寫,此時可能會因爲父目錄的權限問題禁止修改,所以先 cd 到父目錄,把這個文件夾的權限改爲讀與寫,然後再修改配置文件的權限。第二種就是直接使用chown命令修改文件權限。

注意一:在設置Build Settings選項下的Code Signing時,如果之前有蘋果的開發者證書,則需要先在General選項下的Identity中把Team設爲None,再把Code Signing下的Provisioning Profile設爲None,否則有可能在後面使用ldid添加權限時添加不上。我就是因爲這個原因,在添加權限的時候總是添加不上,折騰了很久。

使用私有API完成安裝、運行、卸載都是可以的,卸載和安裝都是使用的MobileInstallation.framework中的方法,詳見:http://yonsm.net/reserve-engineering-for-mobile-installation-api/ 

iOS中一個程序操作另一個程序運行,一種是採用通行的url Scheme模式,越獄、非越獄都可以,詳見:http://blog.csdn.net/likendsl/article/details/7553605 和http://blog.csdn.net/a6472953/article/details/8424094 ,另一種則是使用私有API,在這篇blog中有詳細介紹:http://www.cnblogs.com/gugupluto/p/3206772.html 。

要實現一個程序啓動、卸載另一個程序,代碼在上面的blog中都已經給出了,綜合一下即可,具體實現流程其實跟實現程序內安裝ipa文件一樣,只是代碼不一樣,具體安裝ipa文件參看以下兩篇bloghttp://blog.sina.com.cn/s/blog_9cd1705d0101l4bo.html 

http://chenjohney.blog.51cto.com/4132124/1256610#userconsent# 。

在給APP添加權限時需要將啓動與卸載的權限都添加進去,新建一個entitlements.xml文件,內容如下:

<?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>
        <key>com.apple.springboard.launchapplications</key>
        <true/>
        <key>com.apple.springboard.openapplications</key>
        <true/>
        <key>keychain-access-groups</key>
        <array>
            <string>$(AppIdentifierPrefix)com.yourAppName</string>
        </array>
    </dict>
</plist>

其實就是以上blog中的內容整合了出來的XML文件,其中com.yourAppName是你自己的APP的bundleID,然後將這個XML文件與編譯生成的APP文件放到同一個文件夾中,命名爲Payload,我是直接在桌面新建的Payload的文件夾,這樣方便使用。

打開終端,cd到Payload中,比如我是:cd Desktop/Payload,然後執行添加權限操作,輸入 ldid -Sentitlements.xml LaunchApp.app/LaunchApp,LaunchApp更改爲你自己APP的名字。上面blog中有博主說沒有輸出錯誤信息或是卡住(敲回車後沒反應)就表示添加權限成功,但我在成功添加權限時並沒有卡住,倒是添加不成功時會卡住,這裏特別需要注意,請看上文中的注意一。然後輸入ldid -e LaunchApp.app/LaunchApp查看結果,如果你看到上面XML文件中的內容則表示添加權限成功。這裏其實還可以在添加權限之前輸入ldid -e LaunchApp.app/LaunchApp來先檢驗一次,如果正確按照Xcode的破解方式操作,將Code Signing設爲Don't Code Sign,並按照本文中的注意一操作,此時應該會報錯:_assert(signature != NULL); errno=0 ,如果沒有報錯,並出現上面XML格式樣的權限文件,則請重新設置Code Signing,並留意本文中的注意一提到的內容。在設置Code Signing時將PROJECT與TARGETS中的Code Signing都設置爲Don't Code Sign。

最後將Payload文件夾右鍵壓縮,修改後綴名爲ipa即可。



發佈了22 篇原創文章 · 獲贊 25 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章