美文网首页iosiOS进阶高级Swifty Coding
iOS自动签名打包(xcodebuild)

iOS自动签名打包(xcodebuild)

作者: ParadiseKiss | 来源:发表于2016-12-30 23:14 被阅读5128次

    iOS自动打包主要用xcodebuild命令, 在终端输入xcodebuild --help可以查看xcodebuild的参数。

    xcodebuild具体语法:

    • workspace的工程

    xcodebuild [-project name.xcodeproj] [[-target targetname] … | -alltargets] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]

    xcodebuild [-project name.xcodeproj] -scheme schemename [[-destination destinationspecifier] …] [-destination-timeout value] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]

    命令中可以添加一些参数实现在命令执行时配置不同的环境。比如,如果想archiveDebug环境的包,那么就可以在命令中添加-configuration Debug 参数。还可以通过添加PROVISIONING_PROFILE参数来指定签名所用的 Profile 文件的UUID

    • 对于基于workspace的工程,比如cocoapods项目,脚本格式如下:

    xcodebuild -workspace name.xcworkspace -scheme schemename [[-destination destinationspecifier] …] [-destination-timeout value] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]

    当然还有很多可选参数,在这就不一一列举了,如果有兴趣可以通过xcodebuild --help查看。

    shell脚本(工程不是WorkSpace)

    脚本下载路径:github下载地址

    #author by 得力
    
    #注意:脚本目录和xxxx.xcodeproj要在同一个目录,如果放到其他目录,请自行修改脚本。
    #工程名字(Target名字)
    Project_Name="Target名字,系统默认和工程名字一样"
    #配置环境,Release或者Debug
    Configuration="Release"
    
    #AdHoc版本的Bundle ID
    AdHocBundleID="com.xxx"
    #AppStore版本的Bundle ID
    AppStoreBundleID="com.xxx"
    #enterprise的Bundle ID
    EnterpriseBundleID="com.xxx"
    
    # ADHOC
    #证书名#描述文件
    ADHOCCODE_SIGN_IDENTITY="iPhone Distribution: xxxx"
    ADHOCPROVISIONING_PROFILE_NAME="xxxx-xxxx-xxxx-xxxx"
    
    #AppStore证书名#描述文件
    APPSTORECODE_SIGN_IDENTITY="iPhone Distribution: xxxx"
    APPSTOREROVISIONING_PROFILE_NAME="xxxx-xxxx-xxxx-xxxx"
    
    #企业(enterprise)证书名#描述文件
    ENTERPRISECODE_SIGN_IDENTITY="iPhone Distribution: xxxxx"
    ENTERPRISEROVISIONING_PROFILE_NAME="xxxx-xxxx-xxxx-xxxx"
    
    #加载各个版本的plist文件
    ADHOCExportOptionsPlist=./ADHOCExportOptionsPlist.plist
    AppStoreExportOptionsPlist=./AppStoreExportOptionsPlist.plist
    EnterpriseExportOptionsPlist=./EnterpriseExportOptionsPlist.plist
    
    ADHOCExportOptionsPlist=${ADHOCExportOptionsPlist}
    AppStoreExportOptionsPlist=${AppStoreExportOptionsPlist}
    EnterpriseExportOptionsPlist=${EnterpriseExportOptionsPlist}
    
    echo "~~~~~~~~~~~~选择打包方式(输入序号)~~~~~~~~~~~~~~~"
    echo "  1 appstore"
    echo "  2 adhoc"
    echo "  3 enterprise"
    
    # 读取用户输入并存到变量里
    read parameter
    sleep 0.5
    method="$parameter"
    
    # 判读用户是否有输入
    if [ -n "$method" ]
    then
    
    #clean下
    xcodebuild clean -xcodeproj ./$Project_Name/$Project_Name.xcodeproj -configuration $Configuration -alltargets
    
        if [ "$method" = "1" ]
        then
    
    #appstore脚本
    xcodebuild -project $Project_Name.xcodeproj -scheme $Project_Name -configuration $Configuration -archivePath build/$Project_Name-appstore.xcarchive clean archive build  CODE_SIGN_IDENTITY="${APPSTORECODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${APPSTOREROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER="${AppStoreBundleID}"
    xcodebuild -exportArchive -archivePath build/$Project_Name-appstore.xcarchive -exportOptionsPlist $AppStoreExportOptionsPlist -exportPath ~/Desktop/$Project_Name-appstore.ipa
        elif [ "$method" = "2" ]
        then
    #adhoc脚本
    xcodebuild -project $Project_Name.xcodeproj -scheme $Project_Name -configuration $Configuration -archivePath build/$Project_Name-adhoc.xcarchive clean archive build CODE_SIGN_IDENTITY="${ADHOCCODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${ADHOCPROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER="${AdHocBundleID}"
    xcodebuild -exportArchive -archivePath build/$Project_Name-adhoc.xcarchive -exportOptionsPlist $ADHOCExportOptionsPlist -exportPath ~/Desktop/$Project_Name-adhoc.ipa
        elif [ "$method" = "3" ]
        then
    #企业打包脚本
    xcodebuild -project $Project_Name.xcodeproj -scheme $Project_Name -configuration $Configuration -archivePath build/$Project_Name-enterprise.xcarchive clean archive build CODE_SIGN_IDENTITY="${ENTERPRISECODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${ENTERPRISEROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER="${EnterpriseBundleID}"
    xcodebuild -exportArchive -archivePath build/$Project_Name-enterprise.xcarchive -exportOptionsPlist $EnterpriseExportOptionsPlist -exportPath ~/Desktop/$Project_Name-enterprise.ipa
    else
        echo "参数无效...."
        exit 1
        fi
    fi
    

    注意:1.由于脚本配置的路径问题,所以xcodebuild.shxxx.xcodeproj放到同一个目录下,否则会出现路径问题。如图所示:

    脚本目录和工程在同一个目录

    2.由于Xcode8可以在Project->General中自动配置证书,所以用脚本打包前先去掉该功能。如图所示:

    去掉自动配置证书

    3.配置脚本,需要配置的信息如下图,不需要的版本可以不用配置。比如只需要AppStoreipa,则只需要配置AppStore版本相关的配置。

    配置脚本

    4.如果是Xcode9或者以上版本, 则需要把描述文件的UUID添加到对应的plist文件中。配置如下:

    plist格式
    plist添加bundle ID和描述文件UUID

    5.执行脚本,打开终端,cd到当前脚本所在路径,然后执行: ./xcodebuild.sh即可。
    6.导出的ipa包默认保存到桌面,当前保存目录如果需要修改,可以自己修改脚本。如图所示,比如我项目名字是OneProject,则导出的包如下图:

    ipa包文件夹

    打开文件夹就是ipa包了,如图:

    ipa包
    7.如何查看证书名字和配置文件的UUID呢?
    打开钥匙串访问,找到证书,点击显示简介,里面有个常用名字,复制到脚本中即可,如图所示:
    证书 ![常用名称](http:https://img.haomeiwen.com/i1940819/be6aca96f26a49d2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    配置文件UUID可以在Xcode中查看,Xcode->Preferences...->Accounts,如下图:

    点击View Details 点击Show in Finder
    配置文件UUID

    上面的配置文件的名字是6994F55C-1960-4EF9-AA7E-9C1FABDBA7A8.mobileprovision。则配置的文件的UUID就是6994F55C-1960-4EF9-AA7E-9C1FABDBA7A8。所以复制6994F55C-1960-4EF9-AA7E-9C1FABDBA7A8到脚本中。

    当然,如果感觉上面的方法比较麻烦,或者新系统找不到View Details,则我们可以在终端查看描述文件的UUID。首先打开终端,cd到描述文件的根目录,输入指令security cms -D -i XXX.mobileprovision即可。如下图:

    终端查看描述文件的UUID

    执行脚本

    打开终端,cd到当前脚本所在路径,在终端输入:./xcodebuild.sh,点击回车即可。

    WorkSpace脚本

    如果你的项目用的workspace,或者cocoapods,则上面的脚本不适用了,具体脚本如下,脚本配置和上面一样。
    脚本下载路径:github下载地址

    #author by 得力
    
    #注意:脚本目录和WorkSpace目录在同一个目录
    #工程名字(Target名字)
    Project_Name="Target名字,系统默认等于工程名字"
    #workspace的名字
    Workspace_Name="WorkSpace名字"
    #配置环境,Release或者Debug,默认release
    Configuration="Release"
    
    #AdHoc版本的Bundle ID
    AdHocBundleID="com.xxxx"
    #AppStore版本的Bundle ID
    AppStoreBundleID="com.xxxx"
    #enterprise的Bundle ID
    EnterpriseBundleID="com.xxxx"
    
    # ADHOC证书名#描述文件
    ADHOCCODE_SIGN_IDENTITY="iPhone Distribution: xxxx"
    ADHOCPROVISIONING_PROFILE_NAME="xxxxx-xxxx-xxxx-xxxx-xxxxxx"
    
    #AppStore证书名#描述文件
    APPSTORECODE_SIGN_IDENTITY="iPhone Distribution: xxxxx"
    APPSTOREROVISIONING_PROFILE_NAME="xxxxx-xxxx-xxxx-xxxx-xxxxxx"
    
    #企业(enterprise)证书名#描述文件
    ENTERPRISECODE_SIGN_IDENTITY="iPhone Distribution: xxxx"
    ENTERPRISEROVISIONING_PROFILE_NAME="xxxxx-xxxx-xxx-xxxx"
    
    #加载各个版本的plist文件
    ADHOCExportOptionsPlist=./ADHOCExportOptionsPlist.plist
    AppStoreExportOptionsPlist=./AppStoreExportOptionsPlist.plist
    EnterpriseExportOptionsPlist=./EnterpriseExportOptionsPlist.plist
    
    ADHOCExportOptionsPlist=${ADHOCExportOptionsPlist}
    AppStoreExportOptionsPlist=${AppStoreExportOptionsPlist}
    EnterpriseExportOptionsPlist=${EnterpriseExportOptionsPlist}
    
    echo "~~~~~~~~~~~~选择打包方式(输入序号)~~~~~~~~~~~~~~~"
    echo "  1 adHoc"
    echo "  2 AppStore"
    echo "  3 Enterprise"
    
    # 读取用户输入并存到变量里
    read parameter
    sleep 0.5
    method="$parameter"
    
    # 判读用户是否有输入
    if [ -n "$method" ]
    then
        if [ "$method" = "1" ]
        then
    #adhoc脚本
    xcodebuild -workspace $Workspace_Name.xcworkspace -scheme $Project_Name -configuration $Configuration -archivePath build/$Project_Name-adhoc.xcarchive clean archive build CODE_SIGN_IDENTITY="${ADHOCCODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${ADHOCPROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER="${AdHocBundleID}"
    xcodebuild  -exportArchive -archivePath build/$Project_Name-adhoc.xcarchive -exportOptionsPlist ${ADHOCExportOptionsPlist} -exportPath ~/Desktop/$Project_Name-adhoc.ipa
    
        elif [ "$method" = "2" ]
        then
    #appstore脚本
    xcodebuild -workspace $Workspace_Name.xcworkspace -scheme $Project_Name -configuration $Configuration -archivePath build/$Project_Name-appstore.xcarchive archive build CODE_SIGN_IDENTITY="${APPSTORECODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${APPSTOREROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER="${AppStoreBundleID}"
    xcodebuild  -exportArchive -archivePath build/$Project_Name-appstore.xcarchive -exportOptionsPlist ${AppStoreExportOptionsPlist} -exportPath ~/Desktop/$Project_Name-appstore.ipa
    
        elif [ "$method" = "3" ]
        then
    #企业打包脚本
    xcodebuild -workspace $Workspace_Name.xcworkspace -scheme $Project_Name -configuration $Configuration -archivePath build/$Project_Name-enterprise.xcarchive archive build CODE_SIGN_IDENTITY="${ENTERPRISECODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${ENTERPRISEROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER="${EnterpriseBundleID}"
    xcodebuild  -exportArchive -archivePath build/$Project_Name-enterprise.xcarchive -exportOptionsPlist ${EnterpriseExportOptionsPlist} -exportPath ~/Desktop/$Project_Name-enterprise.ipa
        else
        echo "参数无效...."
        exit 1
        fi
    fi
    

    可能出现的问题

    1.如果配置的证书名字、BundleID配置文件UUID不一致,脚本就会报错,这个可以看脚本提示错误,由于错误非常明显,所以就不在截图了。
    2.如果执行脚本的过程出现如下错误,在终端输入:rvm system,回车即可。


    3.如果执行脚本的过程出现-bash: ./xx.sh: Permission denied,表示权限问题,所以在终端执行:chmod 777 xx.sh,然后回车即可,但是要注意: chmod 777后面是脚本路径。

    补充

    上面脚本默认启动Bitcode,如果你的项目中没有开启Bitcode,则可以在上面几个plist文件中加上两个键值对,分别是:uploadBitcode=NO,compileBitcode=NO

    相关文章

      网友评论

      • 不辣先生:code9在plist中添加UUID指的是哪个plist?然后下载的有3个版本的plist分别指代啥?求解大佬
        ParadiseKiss:@不辣先生 嗯,个人账号不能打enterprise包的,只有企业证书(299美元的)才可以的。如果你的是个人账号,那么只能打adhoc或者appstore包。
        不辣先生:@ParadiseKiss adhoc是测试环境?enterprise是指企业包吗?跟开发者账号有什么关系?企业账号跟个人账号是否有区别啊?请问
        ParadiseKiss:就是描述文件的UUID,把脚本中的UUID复制到plist文件中即可。里面有3个plist,分别是adhoc,appstore,enterprise版本的包对应的plist。如果你只需要appstore包,只需要配置其中的带有appstore的plist即可,不需要全部配置,除非你批量打包。
      • 高冷的大白羊:您好,有个问题想请教一下,是关于xcode8以上版本自动签名勾选的问题.现在xcodebuild打包ipa文件可以做到不手动勾掉自动签名选项,做到全自动打包吗?
        ParadiseKiss:@高冷的大白羊 要勾掉的,否则打包会报错
      • Gaizka:你好 这个文件EnterpriseExportOptionsPlist 是ipa查看包内容里的 吗
        Gaizka:你好 plist 文件放在工程目录下吗
        Gaizka:你好 这个plus 文件要放在裤上工程目录下吗
        ParadiseKiss:@小朋友的爸爸 EnterpriseExportOptionsPlist里面是一些配置信息。
      • Gaizka:你好 加个qq 想请教你 Mac10.13 Xcode9.0 配置文件的uuid怎么找 常识用脚本不行
      • Gaizka:Project_Name-enterprise 这是变量没有实现声明吧
        ParadiseKiss:@小朋友的爸爸 $Project_Name是上面定义的变量,-enterprise表示变量后面追加这个字符串而已。
      • MichalWilson:你好,我用你的脚本打包的话,会出现Code Signing Error: CarServiceCoach has conflicting provisioning settings. CarServiceCoach is automatically signed, but provisioning profile 2a5a87d2-dabe-4e61-9fc0-a2a4bc4d7fb8 has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor, or switch to manual signing in the project editor.
        Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.2'这个问题,请问一下应该如何解决啊 我正常用xcode打包是没有问题的 但是如果用Jenkins自动打包的话就会报出车个错误 请问一下是为什么啊
        MichalWilson:@ParadiseKiss 不行啊 后来我就放弃脚本打包了 然后用的xcode打包就会好了
        ParadiseKiss:@MichalWilson 去掉xcode的Automatically manage signing
      • 7dfa9c18c1d1:1.xcode9中,不能通过Xcode->Preferences...->Accounts->ViewDetails 获取配置文件的UUID了,楼主有其他的好方法吗?
        2.我在使用脚本的时候(第一个命令成功,第二个命名失败),碰见了这个错误,不知道怎么解决:Error Domain=IDEProvisioningErrorDomain Code=9 ""Test1.app" requires a provisioning profile." UserInfo={NSLocalizedDescription="Test1.app" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.},楼主知道怎么解决吗?
        ParadiseKiss:@liyang20160111 终端命令可以查看
      • 不知蜕变的挣扎:多target怎么办
        ParadiseKiss:多个target,打包也只需要一个target吧
      • e9dac1e62283:Error Domain=IDEFoundationErrorDomain Code=1 "No 'teamID' specified and no team ID found in the archive" UserInfo={NSLocalizedDescription=No 'teamID' specified and no team ID found in the archive}

        mv: rename /Users/Shared/Jenkins/Desktop/RongYunTest-IPA/RongYunTest.ipa to /Users/Shared/Jenkins/Desktop/RongYunTest-IPA/RongYunTest-v1.0.ipa: No such file or directory
        ParadiseKiss:@回不到过去丶 脚本的plist
        ParadiseKiss:@回不到过去丶 plist文件里面添加teamid
      • 葡萄大课堂:我在使用你的脚本打包企业版本ipa的时候可以正常生成但是总是安装失败,项目是新建的空项目,证书、uuid这些信息能保证是正确的,就是不知道什么原因有遇到过吗,我尝试用脚本修改项目配置里的PRODUCT_BUNDLE_IDENTIFIER、PROVISIONING_PROFILE_SPECIFIER 这两个值时就可以安装了,博主你有遇到类似情况吗
        ParadiseKiss:@零分之约 脚本里面自动配置证书,描述文件,和bundle id的
      • manajay:你好 , 我也是用xcodebuild 打包, 发现即便我指定了 method 为 app-store ,
        CODE_SIGN_IDENTITY 为发布证书
        Provisioning PROVISIONING_PROFILE 为 发布描述文件,
        结果打包出来的还是 adhoc的包,请问楼主有思路吗
        manajay:@ParadiseKiss 我查找了一下 发现虽然我xcodebuild命令写的是发布描述文件,但是项目中release仍然是adhoc的描述文件。 项目中增加了一个adhoc的build configuration就可以区分了
        ParadiseKiss:你加载plist文件的路径写错了
      • AgoniNemo:Provisioning profile "iOS Team Provisioning Profile: com.ccc.xxxx" is Xcode managed, but signing settings require a manually managed profile.
        这个提示是什么意思?
        AgoniNemo:@ParadiseKiss 不是这个问题,是描述文件问题,之前是自动生成的,重新再生成就好了。
        ParadiseKiss:@AgoniNemo Target->General->Automatically manage signing 是不是勾上了,自动打包需要把这个去掉。
        AgoniNemo:用的是development打包
      • healthbird:写的很好,我之前也写过一次批量自动化打包,用的是python。近期出了点问题,看你的文章解决了,点赞👍。
      • 轻拂丶肩上雪:请问你这个脚本可以在jenkins 里面用吗??
        ParadiseKiss:@猿定三生 可以的
        轻拂丶肩上雪:@ParadiseKiss 请教一个问题哈 如果在xcode8里 描述文件那边选择 none 证书全部选择 iOS Developer 在脚本里指定证书和描述文件 可以打得出包吗???
        ParadiseKiss:@猿定三生 上传的脚本没有添加
      • 00fce043cf44:打包测试证书的 xcarchive成功了 导出ipa失败 我这明明有证书还是报错呢 用的是develop证书我看下边的还有Distribution错误呢
        IDEDistribution: -[IDEDistributionProvisioning _itemToSigningInfoMap:]: Can't find any applicable signing identities for items: (
        "<IDEDistributionItem: 0x7ff65515cb70 'com.yijsu.joussssstar' '<DVTFilePath:0x7ff654d7a0a0:'/Users/panhongliu/live_wangsu\U6700\U65b0/build/jinshanStrmear-adhoc.xcarchive/Products/Applications/jinshanStrmear.app'>'>"
        )
        Errors={
        "<DVTSigningCertificate: 0x7ff654f7fc70; name='iPhone Distribution: bei jing y technology Co.,Ltd. (L2LYHXGC7E)', hash='FAA5F194CD23E303745F924F4CE86F62A962EA4A', serialNumber='4166E600FF5C8810', certificateKind='1.2.840.113635.100.6.1.4, issueDate='2017-01-03 13:09:56 +0000''>" = {
        ParadiseKiss:Build Settings -> Signing -> Provisioning Profile 改为None. 改完重新执行脚本。
      • 愤怒的杜拉拉丶:凡是有Extension的,一律不行。我们工程使用了todayExtension 和 NotifiationExtension.
        崔可一:我的工程添加了 Notification Service Extension ,使用脚本打包,可以安装上,但是推送就是不好使的。但是使用xcode去打包的话,就好使的。楼主知道怎么弄吗?持续关注。
        愤怒的杜拉拉丶:@ParadiseKiss :smile: 有空可以看看怎么搞,我对脚本一窍不通。但是觉得这个功能很好呢
        ParadiseKiss:@愤怒的杜拉拉丶 :smile: 这个我还真没测试过
      • GTMYang:Xcode8.2.1 找不到.xcarchive文件
        哇哈哈有点甜:利用钩子监听终端打包成功的事件,然后再写一个脚本把ipa上传到管理平台,生成二维码。一条龙
        哇哈哈有点甜:楼主,能够监听终端打包完成这个事件吗
        ParadiseKiss:@GTMYang 这个是脚本编译的时候生成的,如果没有生成,说明编译失败了,那就检查下脚本中证书是否有问题。
      • A天天涨不停:博主,刚提的问题我自己已经解决了。不过我遇到了和楼上一样的问题,那就是自动打包比手动打包确实要大了点。而且我也在plist里加了compileBitcode=NO。打包出来的确实要比手动的大点。
        MindTheGap:@ParadiseKiss 报错显示没有TeamID
        ParadiseKiss:@MindTheGap 下载打包workspace的那个脚本,上面提供有下载地址,然后放到和workspace同一个目录下,配置完成就可以打包了。
        ParadiseKiss:嗯,还需要在plist中加上uploadBitcode=NO.加上这两个包就会变的很小。
      • Afer:我写了一个工具,能帮我完善下么,😄 https://github.com/myafer/HHSSJJ
        Afer:@ParadiseKiss :joy:感觉你的写的比较详细 我的好粗糙
        ParadiseKiss:@Afer 哪个地方需要完善?
      • 没有梦想_何必远方:你这样打的包相对正常手动打包,大小还是大了一点,请问需要怎么解决啊
        ParadiseKiss:@没有梦想_何必远方 比如打开plist,plist默认我加了一个键值对,也就是method=app-store、adhoc、enterprise等,可以继续添加键值对,compileBitcode=NO、YES。下面是plist可选的键值对:
        compileBitcode : Bool
        For non-App Store exports, should Xcode re-compile the app from bitcode? Defaults to YES.
        embedOnDemandResourcesAssetPacksInBundle : Bool
        For non-App Store exports, if the app uses On Demand Resources and this is YES, asset packs are embedded in the app bundle so that the app can be tested without a server to host asset packs. Defaults to YES unless onDemandResourcesAssetPacksBaseURL is specified.
        iCloudContainerEnvironment
        For non-App Store exports, if the app is using CloudKit, this configures the "com.apple.developer.icloud-container-environment" entitlement. Available options: Development and Production. Defaults to Development.
        manifest : Dictionary
        For non-App Store exports, users can download your app over the web by opening your distribution manifest file in a web browser. To generate a distribution manifest, the value of this key should be a dictionary with three sub-keys: appURL, displayImageURL, fullSizeImageURL. The additional sub-key assetPackManifestURL is required when using on demand resources.
        method : String
        Describes how Xcode should export the archive. Available options: app-store, package, ad-hoc, enterprise, development, and developer-id. The list of options varies based on the type of archive. Defaults to development.
        onDemandResourcesAssetPacksBaseURL : String
        For non-App Store exports, if the app uses On Demand Resources and embedOnDemandResourcesAssetPacksInBundle isn't YES, this should be a base URL specifying where asset packs are going to be hosted. This configures the app to download asset packs from the specified URL.
        teamID : String
        The Developer Portal team to use for this export. Defaults to the team used to build the archive.
        thinning : String
        For non-App Store exports, should Xcode thin the package for one or more device variants? Available options:
        没有梦想_何必远方:@ParadiseKiss 我也注意到了,但是我还不太会shell脚本
        ParadiseKiss:@没有梦想_何必远方 脚本默认打包开启的Bitcode,不知道你用Xcode打包有没有开启Bitcode,开启Bitcode会导致包变大。其实苹果从Xcode7就默认开启Bitcode了。如果关闭Bitcode,可以在plist中添加一个键值对就可以了,compileBitcode=NO

      本文标题:iOS自动签名打包(xcodebuild)

      本文链接:https://www.haomeiwen.com/subject/zhmpvttx.html