Xcode9 自动上传Fir

Xcode

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

Fir自动上传脚本

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

#/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 只能想办法解决。先看下报错日志:app

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证书,是的吧。我也是这样想的,而后发现然并卵。iphone

生成*.APP转 *.ipa

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

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

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

Archive

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

ipa文件

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

自动上传

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

9BCA754A-C6AF-4529-9360-8453E0ADD652.png
而后在执行自动化上传Fir脚本成功。

分析

发如今Xcode 9中,exportOptions.plist的变化,code

以前

以后

以后

主要多了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 一直在学习从未中止过,可一直未学透从未知足过。

相关文章
相关标签/搜索