美文网首页iOS精品文章ios测试iOS开发
XCode命令行打包 -- XCode8.3.x

XCode命令行打包 -- XCode8.3.x

作者: QA小蛋 | 来源:发表于2017-08-16 18:40 被阅读210次
    一、首先介绍下查看打包环境的一些命令。

    1.查看xcodebuild的各sdk版本
    xcodebuild -showsdks

    2.查看xcodebuild版本
    xcodebuild -version

    3.查看项目工程的buildsettings,可以查看各环境变量的名称和值

    cd 项目工程位置
    xcodebuild -showBuildSettings
    
    二、下面介绍打包过程
    打包方式一:

    打包时一定要先清理工程,避免之前的缓存数据对打包的影响。清理和编译可以放在一起,即先clean,再build。
    打包一般有两种方式,一种是通过build方式,还有一种是通过archive方式。

    #通过build方式,指定target
    xcodebuild clean build -target targetName  -configuration Release -sdk iphoneos10.0 \
    OBJROOT=$BUILD_FOLDER SYMROOT=$BUILD_FOLDER
    
    #通过build方式,指定workspace,指定workspace的时候一定要指定scheme
    xcodebuild clean build  -scheme $SCHEME -workspace $WSPACE -configuration Release -sdk iphoneos10.0 \
    OBJROOT=$BUILD_FOLDER SYMROOT=$BUILD_FOLDER CODE_SIGN_IDENTITY="certificateName" \
    PROVISIONING_PROFILE="profileId" PROVISIONING_PROFILE_SPECIFIER="profileName" DEVELOPMENT_TEAM="teamId"
    

    这里要注意的是在XCode7及之前,修改证书和provisioning profile只要设定PROVISIONING_PROFILE和CODE_SIGNING_IDENTITY两个环境变量即可。XCode8中要指定上面代码中最后四个环境变量。OBJROOT是中间文件的生成路径,SYMROOT是最终文件的生成路径(包文件等)。
    build后会在SYMROOT路径生成.app文件,在Xcode7及之前,通过xcrun可以通过.app文件导出.ipa文件,但XCode8上这个方法已经被弃用了,我们需要换种方式导出.ipa文件。

    我用的是下面这种方式:
    a.创建一个名为Payload的文件夹
    b.把.app文件拷贝到Payload文件夹中
    c.吧Payload文件夹压缩成zip格式
    d.把Payload的压缩文件后缀修改为.ipa

    注意事项:

    1.OBJROOT SYMROOT需要使用绝对路径,中途工作路径会变,相对路径会出问题
    2.XCode8中证书环境变量名为CODE_SIGN_IDENTITY,不是CODE_SIGNING_IDENTITY。

    打包方式二
    #通过archive方式
                
    xcodebuild clean archive  -workspace packageName.xcworkspace -scheme packageName\
     -archivePath xxPath/packageName.xcarchive -configuration Release -sdk iphoneos10.0 \
    CODE_SIGN_IDENTITY="certificateName" PROVISIONING_PROFILE="profileId" \
    PROVISIONING_PROFILE_SPECIFIER="profileName" DEVELOPMENT_TEAM="teamId"
    

    archive之后会在指定路径archivePath下生成.xcarchive文件,下面还需通过.xcarchive文件导出.ipa文件

    #导出.ipa文件,放在xxPath下
    xcodebuild -exportArchive -exportOptionsPlist xxName.plist \
    -archivePath path/packageName.xcarchive -exportPath xxPath
    

    下面给出一个xxName.plist的例子,需要的设置都可以放在里面

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
            <key>teamID</key>
            <string>xxxx</string>
            <key>method</key>
            <string>development</string>
            <key>uploadSymbols</key>
            <false/>
            <key>uploadBitcode</key>
            <false/>
            <key>compileBitcode</key>
            <false/>
    </dict>
    </plist>
    
    注意事项:

    1.XCode8.3之前可用-exportFormat IPA代替exportOptionsPlist,XCode8.3及之后必须指定 -exportOptionsPlist xx.plist
    2.在pakageName.archive下有dSYMs文件夹,该文件夹下就是dSYM文件

    打包过程中遇到的问题:

    1.报错:Error Domain=IDEDistributionErrorDomain Code=14 "No applicable devices found."
    解决方法:
    a.rvm use system
    b.如果执行之后,还没好,可查看日志看具体错误,日志路径格式如下(具体路径根据当前项目和时间辨别)
    /var/folders/5p/y_9jq1fx7b52p7g52mkz3lvh0000gn/T/xxName_2017-06-02_14-07-29.268.xcdistributionlogs/IDEDistribution.standard.log

    2.报错:codesign xxx failed, user interaction is not allowed
    解决办法:
    通过unlock-keychain命令来解锁,或者直接打开keychains.app解锁

    相关文章

      网友评论

      本文标题:XCode命令行打包 -- XCode8.3.x

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