Xcode9 自动上传Fir

作者: 蝴蝶之梦天使 | 来源:发表于2017-09-20 15:27 被阅读853次
    Xcode

    是不是很开心终于升级Xcode9了。
    是不是上传Fir发现错误内心崩溃了。
    是不是在满大街查找解决方法。

    Fir自动上传脚本

    自动上传脚本,保存到项目的目录下,使用sh *.sh -u 进行上传,其中的fir的token和项目的名称需要修改,其他的等报错再修改吧。详见如下:

    #/bin/sh
    #coding utf-8
    #上传模块需要FIR.im CLI 
    #安装gem install fir-cli
    #token 获取 http://fir.im/user/info
    
    #安静模式,不输出多余log
    quiet=1
    
    while getopts "huv" arg #选项后面的冒号表示该选项需要参数
    do
        case $arg in
             t)
                echo "t's arg:$OPTARG" #参数存在$OPTARG中
                ;;
             u)
                upload=1
                ;;
             v)
                quiet=0
                ;;
    
             h)
                echo Commands:
                echo "    make -u        #build ipa and upload fir.im"
                ;;
             ?)  #当有不认识的选项的时候arg为?
            echo "unkonw argument"
        ;;
        esac
    done
    
    token="需要替换"  #token 获取 http://fir.im/user/info
    
    echo '--------------start----------------'
    echo '>> clean...'
    proj=$(cd $(dirname ${0}) ; pwd -P)
    xcodebuild clean 1>/dev/null
    project=需要替换
    product="$proj/build/$project.ipa"
    rm $product
    
    echo '>> build...'
    if [[ $quiet == 1 ]]
    then
        xcodebuild -workspace "$project.xcworkspace" -scheme "$project" archive -archivePath $proj/build/$project.xcarchive -configuration Ad-hoc -sdk iphoneos >/dev/null
    else
        xcodebuild -workspace "$project.xcworkspace" -scheme "$project" archive -archivePath $proj/build/$project.xcarchive -configuration Ad-hoc -sdk iphoneos
    fi
    
    echo '>> create ipa...'
    
    xcodebuild -exportArchive -archivePath $proj/build/$project.xcarchive -exportOptionsPlist exportOptions.plist -exportPath "$proj/build"
    
    #copy dsym to xcarchives
    echo '>> archive dsym...'
    if [[ -d $proj/build/$project.xcarchive ]]
    then
        filename=$(date "+%Y%m%d%H%M.%S")
        mkdir -p "$proj/build/archives"
        cp -r $proj/build/$project.xcarchive/ "$proj/build/archives/$filename.xcarchive"
        cp "$product" "$proj/build/archives/$filename.xcarchive"
    fi
    
    if [[ $upload == 1 ]] && [[ -f "$product" ]]
    then
        fir l $token
        fir p "$product"
        clear
        fir i "$product"
    else
        open "$proj/build"
    fi
    
    

    报错

    使用之前的Fir自动上传脚本,突然发现报错了,可在升级Xcode 9之前明明还是好的呢,So 只能想办法解决。先看下报错日志:

    2017-09-20 14:22:07.140 xcodebuild[31386:364151] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7f8cdcc95b90>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(
        "Error Domain=IDEProvisioningErrorDomain Code=9 \"\"name.app\" requires a provisioning profile with the Push Notifications feature.\" UserInfo={NSLocalizedDescription=\"name.app\" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"
    )}
    error: exportArchive: "name.app" requires a provisioning profile with the Push Notifications feature.
    
    Error Domain=IDEProvisioningErrorDomain Code=9 ""name.app" requires a provisioning profile with the Push Notifications feature." UserInfo={NSLocalizedDescription="name.app" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
    
    ** EXPORT FAILED **
    

    第一反应是不是重新制作一遍Push证书,是的吧。我也是这样想的,然后发现然并卵。

    生成.APP转.ipa

    自动脚本发现不可行时,我想到的方法是那只能手动了。选择相应的Build Configuration进行Building生成*.app.

    切换编译配置
    然后获取到.app,将这个文件拖到iTunes上进行.app转*.ipa,是吧。

    这个一个坑啊。,你会发现怎么找不到“应用程序”的选项啊。
    iTunes的最新版本已经将app Store的功能取消了,已经没有应用程序的选项了。折磨了大半天,发现None is None。

    Archive

    最后只能使用最后的方法了,使用Xcode的Archive再导出ipa包。与上传App Store的方法类似。(不会给我留言哈)
    最后生成的文件有:

    ipa文件

    将生成的*.ipa文件上传到Fir上,工作完成。

    自动上传

    首先是不是觉得怎么多了3个文件啊,呵呵哒。这就是Xcode的改变啊。主要变化是多了ExportOptions文件,这个应该与之前的报错有关。
    其次找到了自动上传的方法了,将这个ExportOptions的文件放到项目中,我的目录是


    9BCA754A-C6AF-4529-9360-8453E0ADD652.png

    然后在执行自动化上传Fir脚本成功。

    分析

    发现在Xcode 9中,exportOptions.plist的变化,

    之前

    之后

    之后

    主要多了provisioningProfiles, signingCertificate和signingStyle。针对自动化脚本的报错,应该是少了provisioningProfiles的属性。
    按图片手动添加所有属性就可以执行成功了,当然你也可以先使用Xcode导出一次获取到exportOptions.plist文件。

    结尾

    每次升级系统或Xcode都会有一天的时间是在等待和解决问题。今天iOS11 还碰到了因为使用了WebViewJavascriptBridge第三方库导致奔溃的问题,又是忙了一阵,解决方法:

    WebViewJavascriptBridgeBase *base = [[WebViewJavascriptBridgeBase alloc] init];
            if ([base isWebViewJavascriptBridgeURL:navigationAction.request.URL]) {
                DLog(@"isWebViewJavascriptBridgeURL is YES.");
                return;
            }
    decisionHandler(WKNavigationActionPolicyAllow);
    

    // END 一直在学习从未停止过,可一直未学透从未满足过。

    相关文章

      网友评论

      • 一粒榛子:是把exportOptions.plist的几个属性添加到项目的info.plist里面吗
        蝴蝶之梦天使:@一粒榛子 建议用Xcode打包一次ad-hoc,然后把exportOptions.plist从那个文件夹中copy出来,试下。
        一粒榛子:@蝴蝶之梦天使 我也试过了还是同样的错误
        蝴蝶之梦天使:不是。是将exportOptions.plist文件放到工程目录下。
      • 新地球说着一口陌生腔调:自动包 生成的包在什么文件夹下面?
        蝴蝶之梦天使:product="$proj/build/$project.ipa"
        在脚本的同级目录下的build文件夹中,可以看到工程名.ipa的文件。
      • 格调main:赞 ,, 我这里还是报错, 但是报错位置不同,
        line 26: 46067 Segmentation fault: 11 xcodebuild -exportArchive -archivePath "${BUILD_OUTPUT_DIR}/${BUILD_OUTPUT_DIR2}/${APPLICATION_NAME}.xcarchive" -exportPath "${BUILD_OUTPUT_DIR}/${BUILD_OUTPUT_DIR2}" -exportOptionsPlist "boosjdanceExportPlist.plist"
        蝴蝶之梦天使:@格调main line 26: 46067 Segmentation fault: 看到提示是26行的代码编写有问题?
        格调main:@蝴蝶之梦天使 都完整的 从手动打包里面拷贝的
        蝴蝶之梦天使:provisioningProfiles, signingCertificate,signingStyle,compileBitcode, stripSwiftSymbols, thinning都填写完整。再试试

      本文标题:Xcode9 自动上传Fir

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