博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xcode9 自动上传Fir
阅读量:7168 次
发布时间:2019-06-29

本文共 4271 字,大约阅读时间需要 14 分钟。

是不是很开心终于升级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#安静模式,不输出多余logquiet=1while 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"    ;;    esacdonetoken="需要替换"  #token 获取 http://fir.im/user/infoecho '--------------start----------------'echo '>> clean...'proj=$(cd $(dirname ${0}) ; pwd -P)xcodebuild clean 1>/dev/nullproject=需要替换product="$proj/build/$project.ipa"rm $productecho '>> build...'if [[ $quiet == 1 ]]then    xcodebuild -workspace "$project.xcworkspace" -scheme "$project" archive -archivePath $proj/build/$project.xcarchive -configuration Ad-hoc -sdk iphoneos >/dev/nullelse    xcodebuild -workspace "$project.xcworkspace" -scheme "$project" archive -archivePath $proj/build/$project.xcarchive -configuration Ad-hoc -sdk iphoneosfiecho '>> create ipa...'xcodebuild -exportArchive -archivePath $proj/build/$project.xcarchive -exportOptionsPlist exportOptions.plist -exportPath "$proj/build"#copy dsym to xcarchivesecho '>> 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"fiif [[ $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: 
: 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文件上传到Fir上,工作完成。

自动上传

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

然后在执行自动化上传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 一直在学习从未停止过,可一直未学透从未满足过。

转载地址:http://ajqwm.baihongyu.com/

你可能感兴趣的文章
【Spring】HttpMessageConverter的作用及替换
查看>>
kvm sr-iov 热插拔 简介
查看>>
hibernate inverse作用
查看>>
cv::Mat 结构
查看>>
Centos6.9 安装docker与docker-compose
查看>>
Aug 09 使用AVAudioPlayer轻松搞定音频播放
查看>>
VC++中使用ADO连接数据库
查看>>
创建多个电脑账户需要赋予不用的权限方法
查看>>
改变单选按钮radio圆点的颜色
查看>>
我的友情链接
查看>>
《12月份的算法更改总结》
查看>>
一段代码的时间复杂度计算
查看>>
类似系统alerview 的弹出框动画
查看>>
Xocde插件实效的解决办法
查看>>
Oracle Study--Oracle SQL执行计划查看(MindMap)
查看>>
谷歌翻译及谷歌加一工具
查看>>
LAMP架构介绍Mysql安装
查看>>
redmine支持的第三方SCM以及说明
查看>>
IDEA常用快捷键
查看>>
单元测试实施解惑(一)— 无缝整合
查看>>