前言
需要自動(dòng)發(fā)布腳本的同學(xué)請(qǐng)移步:自動(dòng)打包發(fā)布到App Store
打包,是每個(gè)app開(kāi)發(fā)人員必須做得的一件枯燥無(wú)味且相當(dāng)浪費(fèi)時(shí)間的事情,于是,萬(wàn)能的開(kāi)發(fā)者們學(xué)會(huì)了利用腳本來(lái)解放雙手,這就是我接下來(lái)要講的--自動(dòng)打包.
正文
閑話(huà)少說(shuō),直入主題,不過(guò)在入主題之前先做準(zhǔn)備工作:
先安裝fir,fir是比較好用的第三方內(nèi)測(cè)托管網(wǎng)站之一,下面實(shí)現(xiàn)命令安裝
$? gem install fir-cli
詳情請(qǐng):
https://github.com/FIRHQ/fir-cli/blob/master/doc/install.md
此時(shí)我遇到了下面的錯(cuò)誤:
ERROR: SSL verification error at depth 1: unable to get local issuer certificate (20)
ERROR: You must add /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate
Signing/CN=StartCom Certification Authority to your local trusted store
ERROR:? While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
這時(shí)真是無(wú)語(yǔ)啊,就不能順利點(diǎn)嗎?
解決問(wèn)題吧,還能怎樣....
一個(gè)一個(gè)來(lái):
首先第一個(gè)肯定是ssl證書(shū)問(wèn)題,方法:
1.$ cd$rvm_path/usr/ssl
2.$ sudo curl-O http://curl.haxx.se/ca/cacert.pem
3.$ sudo mv cacert.pem cert.pem
第二個(gè)error是ruby的問(wèn)題,我以為是ruby的環(huán)境問(wèn)題,畢竟淘寶不能用了嘛,不管,換成最新的:
$gem sources --remove? https://ruby.taobao.org/
$gem sources --add https://gem.ruby-china.com
再試..還是報(bào)錯(cuò),好吧,那就是ruby版本的問(wèn)題咯,好吧,繼續(xù)解決問(wèn)題:
1.先安裝Homebre ,終端輸入這條命令即可:
$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2. 安裝rvm$ curl -L get.rvm.io | bash -s stable
3.裝載rvm$ source ~/.rvm/scripts/rvm
4.安裝2.3.0版本ruby$ rvm install 2.3.0
5.將2.3.0設(shè)為默認(rèn)$ rvm use 2.3.0 --default
第三個(gè)貌似是權(quán)限問(wèn)題,不管 sudo 他:
$ sudo gem install fir-cli
OK啦!!!!!
然后,去fir 注冊(cè)一個(gè)賬號(hào)再創(chuàng)建一個(gè)應(yīng)用先放著
=====準(zhǔn)備工作告一段落=====
正題終于來(lái)了,先聲明我的思路,寫(xiě)程序思路很重要,這是真理:
一??? 創(chuàng)建和管理build文件夾
二??? 用xcodebuild編譯出.app文件
三??? 把.app文件打包成IPA文件
四??? 上傳到fir
五???? 發(fā)郵件通知給測(cè)試人員
o了!!!!!
然后一步步實(shí)現(xiàn)---
不想多說(shuō)怎么辦?----
直接上代碼,這些代碼是經(jīng)過(guò)本人親自測(cè)試過(guò)的,沒(méi)毛病,可直接使用,沒(méi)辦法,哥就是這么霸氣!!!
/*********************代碼開(kāi)始********************/
# -*- coding: utf-8 -*-
import os
import sys
import time
import hashlib
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
# 項(xiàng)目根目錄
project_path = "/Users/xxxxx"
# 編譯成功后.app所在目錄
app_path = "/Users/xxx/Desktop/xxxx/build/xxxx-iphoneos/xxx.app"
# 指定項(xiàng)目下編譯目錄
build_path = "build"
# 打包后ipa存儲(chǔ)目錄
targerIPA_parth = "/Users/xxxx/Desktop"
fir_URL = "http://fir.im/xxxx"
# fir的api token
fir_api_token = "xxxxx"
from_addr = "xxxx@163.com"
#注意是授權(quán)密碼不是登錄密碼
password = "xxxx"
smtp_server = "smtp.163.com"
to_addr = 'xxx@163.com,xxxx@qq.com'
# 清理項(xiàng)目 創(chuàng)建build目錄
def clean_project_mkdir_build():
os.system('cd %s;xcodebuild clean' % project_path) # clean 項(xiàng)目
os.system('cd %s;mkdir build' % project_path)
def build_project():
print("build release start")
os.system ('xcodebuild -list')
os.system("cd %s;xcodebuild -configuration xxx -target xxx"%(project_path))
# 打包ipa 并且保存在桌面
def build_ipa():
global ipa_filename
ipa_filename = time.strftime('xxx_%Y-%m-%d-%H-%M-%S.ipa',time.localtime(time.time()))
os.system ('xcrun -sdk iphoneos PackageApplication -v %s -o %s/%s'%(app_path,targerIPA_parth,ipa_filename))
#上傳
def upload_fir():
if os.path.exists("%s/%s" % (targerIPA_parth,ipa_filename)):
print('watting...')
# 直接使用fir也可
ret = os.system("/usr/local/bin/fir p '%s/%s' -T '%s'" % (targerIPA_parth,ipa_filename,fir_api_token))
else:
print("沒(méi)有找到ipa文件")
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
# 發(fā)郵件
def sendEmail():
msg = MIMEText('iOS測(cè)試項(xiàng)目已經(jīng)打包完畢巩梢,請(qǐng)前往:%s 掃一掃即可下載測(cè)試'%fir_URL,'plain','utf-8')
msg['to'] = _format_addr('xx <%s>' % to_addr)
msg['from'] = _format_addr('自動(dòng)打包 <%s>' % from_addr)
msg['subject'] = '新的iOS測(cè)試包已上傳'
try:
server = smtplib.SMTP()
server.set_debuglevel(1)
server.connect(smtp_server)
server.login(from_addr,password)
server.sendmail(msg['from'], msg['to'],msg.as_string())
server.quit()
print '發(fā)送成功'
except Exception, e:
print str(e)
return
def main():
# 清理并創(chuàng)建build目錄
clean_project_mkdir_build()
# 編譯coocaPods項(xiàng)目文件并 執(zhí)行編譯目錄
build_project()
# 打包ipa 并制定到桌面
build_ipa()
# 上傳fir
upload_fir()
# 發(fā)郵件
sendEmail()
# 執(zhí)行
main()
/***************************代碼結(jié)束*******************/
執(zhí)行python腳本:
cd? xx路徑
python? xx.py
PS:? fir 的路徑是絕對(duì)路徑终蒂,需要用which fir 獲取下熟尉,特別是當(dāng)你換了電腦時(shí)膘怕。
再PS:如果發(fā)生xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH的問(wèn)題,是Xcode8.2沒(méi)有PackageApplication的原因,可以在網(wǎng)上下載,然后
右鍵 Xcode.app -> 顯示包內(nèi)容 -> Contents -> Developer -> platforms -> iPhoneOS.platform -> Developer -> usr -> bin惕虑,進(jìn)入這個(gè)目錄之后坟冲,將下載的PackageApplication復(fù)制到這個(gè)目錄,然后執(zhí)行:chmod +x PackageApplication溃蔫。
或者sudo xcode-select -switch/Applications/Xcode.app/Contents/Developer/chmod +x/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication健提,就OK了。
=============================================
********本文結(jié)束!**********