最近公司的產品要進行一次批量的升級,產品中的一些配置存放在info.plist,為了保證產品的信息無誤,我們必須要對產品的發布信息進行驗證。例如:廣告ID,umeng,talkingdata等等。那么手動的核對,對於批量升級是又不保險,又費力氣。然后我們聰明睿智的蔡主管安排我去做一個解壓ipa,然后提取info.plist,最后提取產品信息進行比對的產品。
我用的開發語言是C#,根據以上的描述,我們在開發中比較重要的就只有2步驟。
1.解壓ipa
我引用的包是ICSharpCode.SharpZipLib.dll,為了提高速度,我只解壓到info.plist就結束了,其他都不做文件寫入。
private void unzipFileIOS(String filePath) { // 判斷文件是否是ipa文件 if (Path.GetExtension(filePath).Equals(".ipa")) { // 獲取文件名 String appName = Path.GetFileNameWithoutExtension(filePath); // 設置加壓的文件夾目錄 String outPath = PATH_TEMP_IOS + "\\" + appName; // 獲取輸入流(ipa文件) ZipInputStream s = new ZipInputStream(File.OpenRead(filePath)); // zip實體 ZipEntry theEntry; String infoPlistName = "Info.plist"; bool found = false; while ((theEntry = s.GetNextEntry()) != null) { Console.WriteLine(theEntry.Name); // 文件名稱 string fileName = Path.GetFileName(theEntry.Name); // 尋找Info.plist文件 if (infoPlistName != null) { if (fileName.Equals(infoPlistName)) { found = true; // 創建輸出目錄 if (outPath.Length > 0) { Directory.CreateDirectory(outPath); } // 文件寫入操作 using (FileStream streamWriter = File.Create(outPath + "\\Info.plist")) { int size = 2048; byte[] data = new byte[2048]; while (true) { size = s.Read(data, 0, data.Length); if (size > 0) { streamWriter.Write(data, 0, size); } else { break; } } } break; } } } // 一定要關閉流,不然下次會被占用 s.Close(); if (found == false) { logAppend(appName + "------- 無效", false, false); logAppend(Environment.NewLine, false, false); } } }
2.讀取info.plist
通過以上的操作我們已經把ipa中的info.plist解壓出來,那么我們接下來的操作就是讀取plist中的內容
我們引用的是CE.iPhone.PList.dll。
String pathInfo = subDirectory + "\\Info.plist"; if (File.Exists(pathInfo)) { count++; // 獲取根 PListRoot root = PListRoot.Load(pathInfo); // 獲取主節點 PListDict dic = (PListDict)root.Root; // 獲取PList的樹形(根據名稱獲取數據) PListString appKey = (PListString)dic["CFBundleIdentifier"]; PListString umengKey = (PListString)dic["UmengKey"]; PListString adKey = (PListString)dic["ADKey"]; // 因為tostring -》 string:+content 所以過濾 string appKeystring = appKey.ToString().Substring(7).Trim(); string umengKeystring = umengKey.ToString().Substring(7).Trim(); string adKeystring = adKey.ToString().Substring(7).Trim(); }
通過以上的2個步驟我們就可以輕松的拿到我們的產品信息了,希望這篇文章對你們會有幫助。
結語
- 受益,學會了提取ipa中的info.plist中的信息
本站文章為 寶寶巴士 SD.Team 原創,轉載務必在明顯處注明:(作者官方網站: 寶寶巴士 )
轉載自【寶寶巴士SuperDo團隊】 原文鏈接: http://www.cnblogs.com/superdo/p/4527451.html