zoukankan      html  css  js  c++  java
  • 命令行工具打包

    前言:

      iOS程序包分为“.app格式的二进制文件包”和“.ipa格式的渠道包”两种。xcodebuild 是一款用来打包 Xcode projects 或者 workspaces 的命令行工具。用xcodebuild把工程打成 app格式后,再用xcrun来签名和打成ipa格式的包。本篇文章简单讲解一下自己使用的app打包命令。

    正文:

    一、通过xcodebuild命令和xcrun命令打包

      xcodebuild命令和xcrun两个命令必需在xxx.xcodeproj或者xxx.xcworkspace所在的目录执行。

    (1) xcodebuild

      shell编译工具,用xcodebuild把工程打成 app 格式,比如我们有个叫做hello的项目,xcodebuild命令如下:

    xcodebuild -workspace hello.xcworkspace
               -scheme hello 
               -derivedDataPath "./" 
               -sdk iphoneos (or iphonesimulator)
               -configuration Release
               clean build

    说明:打framework的包也是同样命令。补充一个pod package打包framework的命令如下:

    pod package demo.podspec.json --spec-sources='https://github.com/CocoaPods/Specs.git' --no-mangle --force

    xcodebuild参数解释

      -workspace workspacename :指定 workspace 的名称。

      -scheme schemename:指定 scheme 的名称,编译 workspace 时是必须的。

      -derivedDataPath path:覆盖编译 workspace 的 scheme 时的结果数据存放的路径。

      -sdk [<sdkfullpath> | <sdkname>]:指定编译时所用的 SDK。参数可以是 SDK 的绝对路径,也可以是 SDK 的名称。

                         可以使用如下命令查看所支持的SDK : xcodebuild -showsdks .

      -configuration configurationname:当编译每个 target 时使用 configurationname 指定的配置。默认是Release的。

      CODE_SIGN_IDENTITY:选择签名的证书。

                  可以用系统自带的工具“钥匙访问串”来查看名字,如果不带侧参数,那么在工程配置中一定要配置好证书以及授权文件!

      clean built:每次生成app之前都会清除掉旧的记录。

    编译过程

      比如有个ios工程叫hello,它由两个project组成,一个是业务代码hello,一个是引入的第三方库Pods。project hello里

        project hello, 对应target hello

        project Pods, 对应 target XX1、XX2、XX3...

      那么,上面的xcodebuild命令会做如下的事情:

        (1)先clean掉project Pods对应的各个target XX1、XX2、XX3...

        (2)然后build project Pods对应的各个target XX1、XX2、XX3..., 生成xxx.a文件。

        (3)接下来build project Pods对应的target Pods-hello,生成libPods-hello.a文件。

        (4)最后build project hello对应的target hello(此时会检查钥匙串中对应的证书)

      === CLEAN TARGET XXX OF PROJECT Pods WITH CONFIGURATION Distribution ===

      === BUILD TARGET XXX OF PROJECT Pods WITH CONFIGURATION Distribution ===

      === BUILD TARGET Pods-hello OF PROJECT Pods WITH CONFIGURATION Distribution ===

      === BUILD TARGET hello OF PROJECT hello WITH CONFIGURATION Distribution ===

      xcodebuild会根据你的Xcode中的证书配置去钥匙串里,找你的工程里配置的签名证书。所以,一定要把证书安装在mac的钥匙串里(打包服务器一样),并且,Xcode的build setting中指定的Code Sign Identity与安装的证书一致。否则会报错:“No certificate matching 'iPhone Distribution: XXXX': Select a different signing certificate for CODE_SIGN_IDENTITY, a team that matches your selected certificate, or switch to automatic provisioning.”。

      xcodebuild 执行成功之后,会在工程的根目录下产生一个build文件夹,在build/Distribution-iphoneos目录下就能找到生成的app文件。

     

    (2) xcrun

      xcrun是ipa打包工具,用xcrun来对.app格式的包签名和打成ipa格式的包。下面用xcrun把第一步xcodebuild产生的.app文件生成.ipa文件:

    xcrun -sdk iphoneos PackageApplication
          -v Build/Products/Distribution-iphoneos/hello.app 
          -o `pwd`/Build/Products/hello.ipa 

    参数解释

      -v 对应的是app文件的绝对相对路径

      –o 对应ipa文件的路径跟文件名,`pwd` 是当前路径的意思

    二、对ipa包重签名

           要先准备好配置文件EIMMyApp.mobileprovison,以及签名的plist格式的Entitilements文件。另外,要把对应的证书安装到钥匙串中。然后按照下面的5步运行就可以对.ipa包进行重签名了:

    (1).ipa包解压成.app包:

       unzip myAppName.ipa ,生成Payload/myAppName.app

    (2)移除老的 code signatures:  

           rm -r Payload/myAppName.app/_CodeSignature 

    (3)拷贝EIMMyApp.mobileprovison来覆盖原来的embedded.mobileprovision :

       cp EIMMyApp.mobileprovision Payload/myAppName.app/embedded.mobileprovision 

    (4)重签名: 

           codesign -f -v -s "iPhone Distribution: XXXX" --entitlements entitlements.plist Payload/myAppName.app

       (我们知道现在的签名都是根据plist格式的Entitlements文件来指定的)

    (5)将.app包打包成.ipa包:

       zip -yr eimQQ.resigned.ipa Payload 

     

  • 相关阅读:
    sql 生成开始日期到结束日期相差天数或日期
    自定义表做存储过程变量
    [转]html 移动互联网终端的javascript touch事件,touchstart, touchend, touchmove
    [转]JQuery.Ajax之错误调试帮助信息
    解决IOS safari在input focus弹出输入法时不支持position fixed的问题
    查看 存储过程的执行时间
    ListView
    android矩阵详解
    跳出圈子 “莫忘初心,方得始终”
    Eclipse使用
  • 原文地址:https://www.cnblogs.com/Xylophone/p/5726989.html
Copyright © 2011-2022 走看看