[工具-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

时间: 2024-12-30 04:02:47

[工具-003]如何从ipa中提取info.plist并提取相应信息的相关文章

H264中的SPS、PPS提取与作用

牛逼的视频会议网站:http://wmnmtm.blog.163.com/blog/#m=0 ++++++++++++++++++++++++++++++++++++++++++++++++++++ http://wmnmtm.blog.163.com/blog/static/38245714201192491746701/ 使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter Set 

将SCONS工具集成到Python代码中

SCONS是Python的自动智能结构化编译工具,将来或许能代替Make. 在Windows或者Linux下,SConstruct文件相当于MakeFile,使用SCONS编译,需输入scons.bat(scons),后面带上编译选项options(如SConstruct所在的路径).观察scons.bat这个脚本,可以在其他Python代码中,将SCONS工具当作一个函数来调用.这个函数就是Scons.Script.main(),这个main函数将解析命令行中的编译选项,通过sys.argv[

[003]从文件夹中读取所有图片或者文件

从javascript的角度上看,因为语言的关系,是不能从文件夹读取文件的. 但是,我们可以同activeX的方法来获取后,传递给javascript使用. 详细代码如下: 1 var fileNameArray = []; 2 function searchFiles1(dir){ 3 if (dir.substr(dir.length-1, 1) != "\\" && dir.substr(dir.length-1, 1) != "/") 4 d

H264中的SPS、PPS提取与作用<转>

牛逼的视频会议网站:http://wmnmtm.blog.163.com/blog/#m=0 ++++++++++++++++++++++++++++++++++++++++++++++++++++ http://wmnmtm.blog.163.com/blog/static/38245714201192491746701/ 使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter Set 

java实现——003二维数组中的查找

1 import java.util.Scanner; 2 3 public class T003 { 4 5 public static void main(String[] args) { 6 Scanner in = new Scanner(System.in); 7 int rows = 0, cols = 0; 8 rows = in.nextInt(); 9 cols = in.nextInt(); 10 int a[][] = new int[rows][cols]; 11 for

Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用 Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grunt和Gulp都在Visual studio 2015中得到支持.ASP.NET 项目模板默认使用Gulp. Grunt和Gulp Grunt和Gulp有什么区别?Gulp虽然是稍微晚一点登场的,但是它因crisp pe

转:SQL SERVER数据库中实现快速的数据提取和数据分页

探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo].[TGongwen] (    --TGongwen是红头文件表名 [Gid] [int] IDENTITY (1, 1) NOT NULL , --本表的id号,也是主键 [title] [varchar] (80) COLLATE Chinese_PRC_CI_AS NULL ,  --红头文件

使用burpsuite等代理工具抓取docker容器中的数据包

使用burpsuite等代理工具抓取docker容器中的数据包,下面是详细的教程. 以docker中的某个漏洞平台(bwapp)为例,展示如何抓包. 1.首先使用docker下载bwapp: # docker pull raesene/bwapp 2.然后运行bwapp (使用命令   --env HTTP_PROXY="http://192.168.43.14:8080"   来进行代理设置,这里设置的是burpsuite中的ip地址以及端口) # docker run -d --n

Python中BeautifulSoup中对HTML标签的提取

一开始使用了beautifulSoup的get_text()进行字符串的提取,后来一直提取失败,并提示错误为TypeError: 'NoneType' object is not callable 返回了none类型,可能是对Span标签内容的提取产生错误,于是采用name.string进行字符的提取,成功. # -*- coding: utf-8 -*- """ Created on Wed Jan 11 17:21:54 2017 @author: PE-Monitor