Jenkins好處:
- 縮減開發(fā)周期,快速迭代版本
- 自動化流水線操作帶來的高效
- 隨時可部署
- 極大程度避免低級錯誤
Jenkins用處:
- 構(gòu)建項目
- 跑測試用例檢測bug
- 靜態(tài)代碼檢測
- 部署
寫在前面
建議公司配的Jenkins服務(wù)器電腦能讓你的電腦對其遠(yuǎn)程操作剃斧,這樣有利于你查閱資料以及保存圖片什么的轨香。
在文章的底部有這次安裝到實現(xiàn)位遇到的各種錯誤,雖然過程中也有解答幼东,但是下面的錯誤是比較耗時的臂容,如果你遇到了問題,可以去本文的問題列表觀看一下根蟹。
安裝方法:
安裝與準(zhǔn)備
1.安裝Home brew
在這里統(tǒng)一采用Home brew安裝脓杉,如果沒有brew請參考安裝方法;
2.安裝java環(huán)境
安裝java環(huán)境娜亿,在終端輸入brew install Caskroom/cask/java
安裝過程如圖1顯示:
安裝后在終端執(zhí)行brew cask reinstall java
操作丽已,在這期間會讓你輸入用戶密碼蚌堵,完成結(jié)果如圖2
執(zhí)行完畢之后买决,在終端輸入brew cask install caskroom/versions/java8
,期間還會讓你輸入用戶密碼。完成結(jié)果如圖3
3.安裝jenkins
方法一
從Jenkins官網(wǎng)上下載最新的pkg安裝包,如果是pkg安裝吼畏,那么選擇的時候不要安裝到shared目錄下督赤,默認(rèn)是shared目錄下。(也可以下載jenkins.war, 然后運行Java -jar jenkins.war泻蚊,進(jìn)行安裝躲舌。)
以前是使用pkg安裝的,Mac下面會有很多權(quán)限的問題性雄,使用brwe安裝是新的安裝方法没卸,以前沒有使用過羹奉,不過本次我會采用這個方法安裝。
方法二:
使用brew安裝约计,如果沒有brew請參考安裝方法诀拭,brew安裝方法以及使用說明;
1.brew安裝jenkins
brew install jenkins
2.鏈接 launchd 配置文件
ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
如果要其他機(jī)器也可以訪問煤蚌,把ip地址改為廣播地址:<string>--httpListenAddress=0.0.0.0</string>
3.然后執(zhí)行命令
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
在執(zhí)行這句命令的時候可能會報錯耕挨,錯誤信息
/Users/apple/Library/LaunchAgents/homebrew.mxcl.jenkins.plist: Not a directory
那么該錯誤如何解決呢?方法如下尉桩,在終端輸入cd Library
,找到LaunchAgents筒占,這個LaunchAgents現(xiàn)在可能是一個plist文件,復(fù)制這個文件名字蜘犁,刪除該plist文件翰苫,<mark>創(chuàng)建文件夾LaunchAgents</mark>,然后重新執(zhí)行2號命令
4.命令行啟動Jenkins
jenkins
5.打開瀏覽器,輸入 localhost:8080 就可看到Jenkins的web界面,如果你更換了端口就是你后來設(shè)置的端口
安裝Jenkins遇到的問題
1.在終端不啟動Jenkins的情況下(沒有在終端輸入Jenkins回車的情況)这橙,在Safari輸入localhost:8080革骨,卻說找不到頁面的情況,是因為沒有啟動Jenkins服務(wù)析恋,解決方法是開機(jī)默認(rèn)啟動Jenkins
設(shè)置開機(jī)啟動
sudo launchctl load -w /Library/LaunchDaemons/org.jenkins-ci.plist
取消開機(jī)啟動
sudo launchctl unload -w /Library/LaunchDaemons/org.jenkins-ci.plist
2.Jenkenis報錯:該jenkins實例似乎已離線,解決方法如下
安裝插件那個頁面良哲,就是提示你offline的那個頁面,不要動助隧。然后打開一個新的tab筑凫,輸入網(wǎng)址http://localhost:8080/pluginManager/advanced。 這里面最底下有個【升級站點】并村,把其中的鏈接改成http的就好了巍实,http://updates.jenkins.io/update-center.json。 然后在服務(wù)列表中關(guān)閉jenkins哩牍,再啟動棚潦,這樣就能正常聯(lián)網(wǎng)了
另附上更換端口命令,該命令如果不能更改端口膝昆,請更改命令上的路徑丸边,對應(yīng)上你的這個文件
sudo defaults write /Library/Preferences/org.jenkins-ci httpPort 7070
配置Jenkins
1.登陸頁面
打開Jenkins后會讓去一個填寫token的頁面如圖4,存儲token的地方就是圖片上那行紅色字體目錄下荚孵,使用終端 open + 紅色字體就看到了2.安裝插件
打開系統(tǒng)管理,管理插件詳見圖6選擇插件收叶,如果你的代碼是在gitlab上面骄呼,在“可選插件”中選中“GitLab Plugin”和“Gitlab Hook Plugin”這兩項,然后安裝,安裝完畢后蜓萄,再次選擇Xcode插件隅茎,在“可選插件”中選中“Xcode integration”安裝,其他插件根據(jù)你的需求選擇即可嫉沽。
3.配置Keychains and Provisioning Profiles Management
接下來配置Keychains and Provisioning Profiles Management患膛,根據(jù)順序選擇系統(tǒng)管理>Keychains and Provisioning Profiles Management如圖7
需要上傳login.keychain文件,該文件獲取方法耻蛇,在終端中輸入
cd ~/Library/Keychains
在終端鍵入ls詳見圖8
根據(jù)需要將證書添加進(jìn)去即可,但是由于macOS10.12以及以后的系統(tǒng)里面沒有l(wèi)ogin.keychain文件臣咖,只有l(wèi)ogin.keychain-db,可以復(fù)制出來刪除-db跃捣,也可以創(chuàng)建一個快捷方式名字叫做login.keychain,upload就好了夺蛇。
然后添加Provisioning Profiles疚漆,上傳方法和上傳login.keychain一樣,去選擇Provisioning Profiles文件刁赦,然后upload娶聘,然后結(jié)果如下圖,藍(lán)色框內(nèi)的是固定格式的/Users/用戶名/Library/MobileDevice/Provisioning Profiles
創(chuàng)建一個任務(wù)
然后創(chuàng)建一個任務(wù)甚脉,自由風(fēng)格的任務(wù)丸升,因為構(gòu)建方法會有兩種,除了共同的地方,構(gòu)建會分為兩部分解答牺氨,第一部分是macOS10.12以前的構(gòu)建方法狡耻,但是由于Jenkins的Xcode和Mac的系統(tǒng)版本問題,所以建議使用第二種方法猴凹。
General
創(chuàng)建一個自由風(fēng)格的任務(wù)夷狰,然后在選擇丟棄舊的構(gòu)建,至于天數(shù)和保持的最大個數(shù)郊霎,按照自己的需求來就好沼头,如圖11
源碼管理
接下來是源碼管理,在Repository URL里面添加你的git地址书劝,我這里添加的是http的进倍,如果你的項目是使用的ssh的,那么就將git開頭的地址填寫上庄撮,然后店家Add添加你的git帳號背捌,如果你的事ssh的,將ssh的密匙填寫上洞斯,具體的自己百度一下就好咯,我就不多寫了,結(jié)果如圖12
構(gòu)建觸發(fā)器
接下來是構(gòu)建觸發(fā)器烙如,也就是什么時候觸發(fā)自動打包我這里填寫的是H 20 * * *
這個意思就是H小時然后么抗,后面跟著數(shù)字,在后面就是日月年亚铁,*
代表的我認(rèn)為是每次都觸發(fā)蝇刀,也就是每天每月每年,但是Jenkins的時間不是絕對的徘溢,一般都是在隨機(jī)在半點吞琐,也就是設(shè)置20點,大概會在20:30分左右會觸發(fā)然爆,如果需要兩個時間站粟,那么格式可以這樣H 20,22 * * *
結(jié)果如圖13
構(gòu)建環(huán)境
在構(gòu)建環(huán)境里面勾選Keychains and Code Signing Identities和Mobile Provisioning Profiles,Keychains and Code Signing Identities是打包需要的證書曾雕,Mobile Provisioning Profiles是打包需要的配置文件奴烙,都是可以自己選擇的,我的如圖14
<mark>接下來就是構(gòu)建了剖张,因為Jenkins對新版的Xcode插件兼容不好切诀,只能用腳本來打包,但是老版本的Xcode可以使用Jenkins的Xcode插件搔弄,下面將構(gòu)建一位使用Xcode插件的幅虑,構(gòu)建二是腳本的</mark>
構(gòu)建一,使用Xcode插件
在構(gòu)建里面點擊增加構(gòu)建步驟顾犹,然后點擊Xcode.
General build settings
在Target里面填寫你的項目名稱翘单,Clean before build勾選YES,勾選Pack application, build and sign .ipa?蹦渣,然后會有新的選項Export method是你要打的包的類型哄芜,就是你在手動打包的時候選額的ad-hoc或者Appstore那四個選項,這個按照你要打的類型填寫柬唯,.ipa filename pattern是你打出包ipa的名字认臊,我的這里填寫了項目名字和-$(BUILD_DATE)
,意思就是在后面追加時間锄奢,Output directory是導(dǎo)出ipa的目錄失晴,如果不填寫,會在Jenkins默認(rèn)的目錄.
詳見圖15
Code signing & OS X keychain options
勾選Unlock Keychain?,在Keychain path那里填寫${HOME}/Library/Keychains/login.keychain
,意思是找到你的login.keychain(登陸鑰匙串)拘央,如果你的事復(fù)制出來改的名字涂屁,那么就填寫你相對應(yīng)的目錄,Keychain password就是你電腦的登陸密碼灰伟。詳見圖16
Advanced Xcode build options
勾選Clean test reports?拆又,如果你使用了cocoapods那么填寫Xcode Workspace File儒旬,如果沒有使用cocoapods填寫Xcode Project Directory,然后填寫Build output directory就是你到處ipa的路徑,詳見圖17
構(gòu)建二帖族,使用腳本
因為Jenkins對現(xiàn)在的Xcode9插件兼容性不好栈源,打不了包,所以我們使用了xcodebuild打包竖般,下面是我的腳本甚垦,并且里面附上了自己非常詳細(xì)的注釋,可能有點啰嗦涣雕。
#!/bin/sh
#因為Jenkins打包可能是自動的艰亮,那么build號是不會自己再去修改然后push到git上面的,所以這個buildPlist就是修改build號的路徑挣郭。
buildPlist="/Users/apple/.jenkins/workspace/longxin_a/eCloud/Build/LongHu/Config/eCloud-Info.plist"
#這個獲取現(xiàn)在的 月日時分 用它來做build號
buildNumber=$(date +"%m%d%H%M")
#修改plist文件需要/usr/libexec/PlistBuddy -c命令迄埃,CFBundleVersion是修改的這個build號,$buildNumber是你要修改的數(shù)值丈屹,$buildPlist是你修改哪個地方的plist文件调俘。
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$buildPlist"
#這個是獲取當(dāng)前的build號,本來是用來看看有沒有修改成功的
#newBuildName=$(/usr/libexec/PlistBuddy -c "print :CFBundleVersion" "$buildPlist")
#這個是打印旺垒,帶自動換行的打印
echo $newBuildName
#因為我怕他修改plist的時候需要時間彩库,所以索性在這里我讓他等了3秒,當(dāng)然你也可以去掉
sleep 3
#這個buildPath是到時候我生成xcarchive文件的路徑和打ipa時候需要找到xcarchive的路徑
buildPath="/Users/apple/.jenkins/workspace/longxin_a/build/Release-iphoneos/eCloud.xcarchive"
#這個路徑是我生成ipa的路徑
ipaPath="/Users/apple/Documents/longhuBuild/"
#這個是ExportOptions.plist的路徑先蒋,有這個就不用在用腳本寫證書了骇钦,這個plist你只要手動打過包,那么在生成ipa的文件夾里面就會有竞漾,找一個自己不經(jīng)常修改的地方放在那里眯搭,寫上這個路徑就好,當(dāng)然如果你不想這么做业岁,想用shell語言設(shè)置證書鳞仙,我會在 問題 列表里面有介紹
exportOptionsplistPath='/Users/apple/.jenkins/workspace/ExportOptions.plist'
#因為我使用了cocoapods所以這里用的-workspace,如果你沒有使用cocoapods使用-project笔时,下面的命令都一樣
#這個命令主要是用來clean棍好,clean的是Release的路徑,clean的是/Users/app***eCloud.xcworkspace路徑的eCloud允耿,
xcodebuild -workspace /Users/apple/.jenkins/workspace/longxin_a/eCloud.xcworkspace -scheme eCloud -configuration "Release" clean
#這個是生成xcarchive借笙,Release的
xcodebuild -workspace /Users/apple/.jenkins/workspace/longxin_a/eCloud.xcworkspace -scheme eCloud -archivePath ${buildPath} -configuration "Release" archive
#這個是將xcarchive文件打包成ipa
xcodebuild -exportArchive -archivePath ${buildPath} -exportPath ${ipaPath} -exportOptionsPlist ${exportOptionsplistPath} -allowProvisioningUpdates
郵箱通知
到這里,其實你就已經(jīng)打包成功了较锡,但是打包成功后是不是我們需要通知一些人呢业稼?Jenkins是有郵件通知的。
現(xiàn)在開始設(shè)置蚂蕴,首先你已經(jīng)安裝了插件Email Extension Plugin低散,這個在插件那里直接安裝就好這是第一步俯邓;
然后進(jìn)入系統(tǒng)管理->系統(tǒng)設(shè)置找到Jenkins Location模塊,在系統(tǒng)管理員郵件地址填寫你的系統(tǒng)管理郵箱谦纱,這個郵箱是你發(fā)送通知郵件的郵箱看成,
然后找到Extended E-mail Notification模塊
填寫方法如圖18圖19
然后找到構(gòu)建后操作君编,點擊增加構(gòu)建后的操作步驟點擊Editable Email Notification跨嘉,在Project From里面寫上管理者郵箱,也就是發(fā)送郵件的郵箱吃嘿,然后點擊Advanced Setting;
里面有三個選項祠乃,分別是你在系統(tǒng)設(shè)置里面勾選的那幾個,根據(jù)需求填寫就好兑燥,我這里填寫的是Always亮瓷,也就是無論構(gòu)建成功還是失敗,Recipient List是接收者的郵箱,這里多個郵箱用英文逗號隔開——','詳見圖20
上傳到fir
先去下載fir插件
然后在Jenkins里面點擊系統(tǒng)管理->管理插件->高級降瞳,然后滑動到上傳插件那里嘱支,選擇剛才下載的插件,點擊上傳挣饥,等待上傳成功后除师,進(jìn)入到你的項目配置里面滑動到最下面,也就是找到構(gòu)建后操作扔枫,點擊增加構(gòu)建后操作步驟汛聚,選擇Upload to fir.im,打開你的瀏覽器短荐,打開fir官方網(wǎng)站,獲取方法見圖21
然后輸入你的IPA/APK Files (optional)這個是你ipa的路徑倚舀,如果不選擇,會是Jenkins默認(rèn)的路徑
這里有fir的官方文檔忍宋,根據(jù)fir的官方文檔即可就可以Jenkins上傳到fir文檔
問題
-
進(jìn)入目錄
~/Library/Keychains
找不到login.keychain文件(在macOS High Sierra 10.12以后找不到login.keychain)痕貌,但是Keychains and Provisioning Profiles Management里面之能上傳 keychain 和 mobileprovision 格式的文件,我的做法是兩種辦法:1.login.keychain-db復(fù)制到桌面糠排,然后改名字為login.keychain舵稠;
2.在終端輸入
ln -s ~/Library/Keychains/login.keychain-db ~/Library/Keychains/login.keychain
制作一個login.keychain-db的替身,也就是俗稱的快捷方式乳讥。
- 控制臺報錯輸出
FATAL: String index out of range: 15
java.lang.StringIndexOutOfBoundsException: String index out of range: 15
at java.lang.String.substring(String.java:1963)
at com.sic.plugins.kpp.provider.KPPBaseProvisioningProfilesProvider.removeUUIDFromFileName(KPPBaseProvisioningProfilesProvider.java:171)
at com.sic.plugins.kpp.model.KPPProvisioningProfile.getProvisioningProfileFilePath(KPPProvisioningProfile.java:76)
at com.sic.plugins.kpp.KPPProvisioningProfilesBuildWrapper.copyProvisioningProfiles(KPPProvisioningProfilesBuildWrapper.java:157)
at com.sic.plugins.kpp.KPPProvisioningProfilesBuildWrapper.setUp(KPPProvisioningProfilesBuildWrapper.java:99)
at hudson.model.BuildAbstractBuildExecution.run(AbstractBuild.java:504)
at hudson.model.Run.execute(Run.java:1794)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE
這是因為當(dāng)時沒有在Keychains and Provisioning Profiles Management里面上傳配置文件導(dǎo)致的柱查,上傳配置文件的方法和上傳login.keychain一樣,選擇那個配置文件云石,點擊upload唉工,配置文件存在你電腦的`/Users/‘電腦用戶名稱’/Library/MobileDevice/Provisioning Profiles`目錄下。
-
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
FATAL: Check your Xcode installation. Jenkins cannot retrieve its version.
Build step 'Xcode' marked build as failure
Finished: FAILURE這個問題是說我的Xcode路徑不對汹忠,在終端輸入
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
解決淋硝。
如果要查看Xcode現(xiàn)在的安裝路徑雹熬,使用命令行xcode-select -print-path
-
錯誤
== Available schemes
[Jenkins的項目名字] (WORKSPACE)/eCloud.xcworkspace
xcodebuild: error: '$(WORKSPACE)/eCloud.xcworkspace' does not exist.Build step 'Xcode' marked build as failure
Finished: FAILURE這個錯誤是說我們選擇的項目路徑,也就是需要打包的工作路徑谣膳、文件不對竿报,修改方法為,
在Jenkins項目配置里面继谚,找到構(gòu)建烈菌,點擊增加構(gòu)建步驟,選擇Advanced Xcode build options花履,找到Xcode Workspace File填寫你的工作路徑芽世,如過你是使用這篇文章的安裝方法安裝的Jenkins,也就是Home brew安裝的诡壁,那么你的工作路徑應(yīng)該在/Users/用戶/.jenkins/workspace/Jenkins創(chuàng)建的項目/項目名稱
济瓢,比如我們的項目叫做'Almost',用戶是'liuxiansheng',在Jenkins上創(chuàng)建的項目叫做'Almost_a'妹卿,那么這個路徑應(yīng)該是/Users/liuxiansheng/.jenkins/workspace/Almost_a/Almost
另附圖--路徑不對
- 錯誤
The following build commands failed:
PhaseScriptExecution [CP]\ Check\ Pods\ Manifest.lock /Users/apple/Library/Developer/Xcode/DerivedData/eCloud-bdxpnthrsouuyofxsgtiblngntsr/Build/Intermediates.noindex/ArchiveIntermediates/eCloud/IntermediateBuildFilesPath/eCloud.build/Release-iphoneos/eCloud.build/Script-EE80A86E85F13053B6498D87.sh
(1 failure)
Build step 'Xcode' marked build as failure
Finished: FAILURE
- Jenkins報出錯誤
diff: /Podfile.lock: No such file or directory
diff: /Manifest.lock: No such file or directory
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
** ARCHIVE FAILED **
The following build commands failed:
PhaseScriptExecution [CP]\ Check\ Pods\ Manifest.lock /Users/apple/Library/Developer/Xcode/DerivedData/eCloud-bdxpnthrsouuyofxsgtiblngntsr/Build/Intermediates.noindex/ArchiveIntermediates/eCloud/IntermediateBuildFilesPath/eCloud.build/Release-iphoneos/eCloud.build/Script-EE80A86E85F13053B6498D87.sh
(1 failure)
Build step 'Xcode' marked build as failure
Finished: FAILURE
但是我們從Jenkins上面基本看不出什么錯誤信息來旺矾,打開終端進(jìn)入Jenkins工作目錄,我們根據(jù)Jenkins的錯誤提示得知是因為Jenkins不能順利執(zhí)行pod install
所以夺克,我們在目錄下執(zhí)行這個命令箕宙,得到錯誤,因為我自己的錯誤丟失了懊直,具體的也就不說了扒吁,說一下解決方案和過程,當(dāng)使用pod install
之后室囊,會列出你的系統(tǒng)ruby雕崩、cocoapods、系統(tǒng)融撞、xcode盼铁、java等版本,我是使用sudo命令將cocoapods卸載尝偎,從新安裝饶火,使用rvm list known和rvm list查詢自己的安裝記錄和現(xiàn)有的版本,如果不是最新的致扯,使用rvm install ruby最新版本
肤寝,完成后使用 rvm use ruby最新版本
切換,然后就可以pod成功抖僵,Jenkins也就不會報那個錯誤了鲤看。
在這里再說一句,切換ruby的時候可能你要使用rvm use ruby最新版本 --default
命令耍群,這個是切換ruby版本并設(shè)成默認(rèn)
- Jenkins報錯
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
明明我已經(jīng)升級了ruby义桂,也親自使用命令行pod install
成功了找筝,那么為什么還報這個錯誤呢,好慷吊,到這里先找一下錯誤的原因袖裕,在你的項目目錄下打開Podfile.lock和Manifest.lock文件對比一下,是不是不一樣溉瓶,尤其是最后一行COCOAPODS: 1.5.2
可能不一樣急鳄,版本要對象,出現(xiàn)這個問題就是你們協(xié)同開發(fā)的時候沒有忽略文件嚷闭,這個文件是不需要上傳到git上面的攒岛,自己本地有就行了赖临,因為每個人cocoapods版本可能都不是一樣的胞锰,解決方案,創(chuàng)建.gitignore文件兢榨,將Podfile.lock忽略嗅榕。
那么問題又來了,可能你將Podfile.lock加入了.gitignore文件里面吵聪,但是不生效啊凌那,解決方案跳轉(zhuǎn)到git基本操作、stash暫存吟逝、stash找回帽蝶、創(chuàng)建分支、git忽略文件按照git忽略文件就好了
- Jenkins報出錯誤
** ARCHIVE SUCCEEDED **
Cleaning up previously generated .ipa files
Cleaning up previously generated .dSYM.zip files
Packaging IPA
[longxin_a] $ /usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleVersion" /Users/apple/Documents/longhuBuild/eCloud.xcarchive/Info.plist
[longxin_a] $ /usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleShortVersionString" /Users/apple/Documents/longhuBuild/eCloud.xcarchive/Info.plist
Packaging eCloud.xcarchive => /Users/apple/Documents/longhuBuild/eCloud-$(BUILD_DATE).ipa
[longxin_a] $ /usr/bin/xcodebuild -exportArchive -archivePath /Users/apple/Documents/longhuBuild/eCloud.xcarchive -exportPath /Users/apple/Documents/longhuBuild -exportOptionsPlist /Users/apple/Documents/longhuBuild/ad-hocExportOptions.plist -allowProvisioningUpdates
2018-05-28 15:43:33.337 xcodebuild[91233:333051] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/xg/wlxwht_j4yg08771094c51g40000gn/T/eCloud_2018-05-28_15-43-33.336.xcdistributionlogs'.
2018-05-28 15:43:33.697 xcodebuild[91233:333051] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7f80153019d0>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(
"Error Domain=IDEProvisioningErrorDomain Code=9 \"\"eCloud.app\" requires a provisioning profile with the Push Notifications and App Groups features.\" UserInfo={NSLocalizedDescription=\"eCloud.app\" requires a provisioning profile with the Push Notifications and App Groups features., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}",
"Error Domain=IDEProvisioningErrorDomain Code=9 \"\"eCloudShareExtension.appex\" requires a provisioning profile with the App Groups feature.\" UserInfo={NSLocalizedDescription=\"eCloudShareExtension.appex\" requires a provisioning profile with the App Groups feature., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"
)}
error: exportArchive: "eCloud.app" requires a provisioning profile with the Push Notifications and App Groups features.
Error Domain=IDEProvisioningErrorDomain Code=9 ""eCloud.app" requires a provisioning profile with the Push Notifications and App Groups features." UserInfo={NSLocalizedDescription="eCloud.app" requires a provisioning profile with the Push Notifications and App Groups features., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
error: exportArchive: "eCloudShareExtension.appex" requires a provisioning profile with the App Groups feature.
Error Domain=IDEProvisioningErrorDomain Code=9 ""eCloudShareExtension.appex" requires a provisioning profile with the App Groups feature." UserInfo={NSLocalizedDescription="eCloudShareExtension.appex" requires a provisioning profile with the App Groups feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
** EXPORT FAILED **
Failed to build /Users/apple/Documents/longhuBuild/eCloud-$(BUILD_DATE).ipa
Build step 'Xcode' marked build as failure
Finished: FAILURE
這個錯誤是你的證書沒有匹配上块攒,有幾種可能励稳,可能你的證書添加的不對,可能你的shell語言不對囱井,可能添加對了驹尼,但是在構(gòu)建環(huán)境的時候選擇錯了,我遇到的是配置文件沒有添加庞呕。
- Jenkins報出錯誤
note: Execution policy exception registration failed and was skipped: Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" (in target 'xxxx-xxxx' from project 'Pods')
這個問題出現(xiàn)的可能較小新翎,出現(xiàn)這個問題的原因是,當(dāng)你的打包機(jī)更新了新的證書或者需要執(zhí)行信任的文件時住练,需要在本地編譯一下地啰,執(zhí)行信任,并總是允許讲逛。
----------------------------------