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 一直在學習從未中止過,可一直未學透從未知足過。

相關文章
相關標籤/搜索