[工具-003]如何從ipa中提取info.plist並提取相應信息


  最近公司的產品要進行一次批量的升級,產品中的一些配置存放在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM