iOS 本地打包工具

2021-07-16 22:35:58 字數 4510 閱讀 4128

1、為什麼要自動打包工具?

每修改乙個問題,測試都讓你打包乙個上傳fir , 你要clean -> 編譯打包 -> 上傳fir -> 通知測試。而且打包速度好慢,太浪費時間了。如果有乙個工具能自動的幫你做完上面所有的事情,豈不是快哉?

3、需要哪些準備工作?

首先你得有裝xcode , python3.5 (我裝的版本,其他版本也行), 待打包的專案。安裝相關軟體,隨便搜尋下就可以了。

xcode 控制台命令基本都是以 xcodebuild 開頭的介紹幾個簡單的命令,大家可以在命令列試試。

如果你的專案是普通的專案沒有使用cocoapods 那麼 cd 到工程目錄下直接執行 xcodebuild build ,就會自動編譯了 引數都是預設 預設build release。

就是一會打包成ipa需要的檔案。 第一次build速度會比較慢,要把編譯環境拉下來,不要刪除build資料夾,以後build 速度就會變快。

如果不幸你也和我一樣使用了cocoapods , 其實也沒啥不幸的 ,只是編譯的時候就比較麻煩了 ,首先還是 cd 到專案目錄 。但是你要指定編譯檔案和 scheme。而且還要指定build後build資料夾的位置,如果位置找不到,後面怎麼自動打包ipa?。

我這裡的命令大概是這樣的:

xcodebuild -workspace ***.xcworkspace -scheme 你的scheme -configuration debug -deriveddatapath 指定路徑 only_active_arch=no

這樣就能正常編譯並把build指定到我們想要去的目錄

命令:

上面只是說了下編譯的原理,下面看下怎麼通過python自動處理這些任務 。

首先建立乙個***.py檔案,需要你懂點python 語法,不懂就直接copy**。不要改tab 。python的語法是嚴格按照tab區分的。後面我會放上我的**,你們改改

變數就可以使用。

首先你需要引入一些外部依賴。設定編碼為utf-8

# -*- 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

第一步 , 宣告一些變數

# 專案根目錄

project_path = "/users/xx/project"

# 指定專案下編譯目錄

build_path = "build"

# 打包後ipa儲存目錄

targeripa_parth = "/users/xx/desktop"

第二步,clean,和建立乙個資料夾,這裡的示例是針對有使用cocoapods的專案 , 如果沒有使用 不用建立資料夾 ,命令自行簡化

# 清理專案 建立build目錄

defclean_project_mkdir_build

(): os.system('cd %s;xcodebuild clean' % project_path) # clean 專案

os.system('cd %s;mkdir build' % project_path) # 建立目錄

%s 是py的佔位符,字串型別。後面是真正的填充。

第三步編譯專案

def

build_project

(): print("build release start")

os.system ('cd %s;xcodebuild -list')

os.system ('cd %s;xcodebuild -workspace ***.xcworkspace -scheme *** -configuration release -deriveddatapath %s only_active_arch=no || exit' % (project_path,build_path))

不知道scheme是啥的xcodebuild -list 自己查

第四步 打包

# 打包ipa 並且儲存在桌面

defbuild_ipa

():global ipa_filename

ipa_filename = time.strftime('yourproject_%y-%m-%d-%h-%m-%s.ipa',time.localtime(time.time()))

然後你現在再編寫個方法,按順序呼叫就可以編譯打包了 ,執行完會看到桌面的ipa

def

main

():# 清理並建立build目錄

clean_project_mkdir_build()

# 編譯coocapods專案檔案並 執行編譯目錄

build_project()

# 打包ipa 並制定到桌面

build_ipa()

執行就在最下面直接呼叫就行了 main()

我們是把**上傳到fir測試的,如果你們用的蒲公英或者其他,請自行搜尋。

通過gem install fir-cli如果你沒有ruby環境,自行搜尋

安裝完成後,在命令列輸入fir 回車 。會有fir的命令提示。我們上傳fir需要fir的api_token , 去fir官網登入找好就能找到。

拿到那一串串字元,在變數區加上

# firm的api token

fir_api_token = "************************xx"

然後命令傳入ipa目錄和token就可以上傳了

#上傳

defupload_fir

():if os.path.exists("%s/%s" % (targeripa_parth,ipa_filename)):

print('watting...')

# 直接使用fir 有問題 這裡使用了絕對位址 在終端通過 which fir 獲得

ret = os.system("/usr/local/bin/fir p '%s/%s' -t '%s'" % (targeripa_parth,ipa_filename,fir_api_token))

else:

print("沒有找到ipa檔案")

這裡也有遇到乙個=坑,就是在終端直接fir 帶後面的就可以執行 ,但是在這裡識別不了命令,必須制定全路徑,怎麼找命令的全路徑呢?終端輸入which fir

from_addr = "***[email protected]"

password = "*****"

smtp_server = "smtp.sina.com"

to_addr = '[email protected],[email protected]'

然後發郵件的方法

我們的fir路徑是固定的

# 發郵件

defsend_mail

(): msg['from'] = _format_addr('自動打包系統 <%s>' % from_addr)

msg['to'] = _format_addr('***測試人員 <%s>' % to_addr)

msg['subject'] = header('*** ios客戶端打包程式', 'utf-8').encode()

server = smtplib.smtp(smtp_server, 25)

server.set_debuglevel(1)

server.login(from_addr, password)

server.sendmail(from_addr, [to_addr], msg.as_string())

server.quit()

然後執行順序是這樣的

def

main

():# 清理並建立build目錄

clean_project_mkdir_build()

# 編譯coocapods專案檔案並 執行編譯目錄

build_project()

# 打包ipa 並制定到桌面

build_ipa()

# 上傳fir

upload_fir()

# 發郵件

send_mail()

# 執行

main()

本文重點在自動打包命令上,python**感興趣的可以去python教程 學習。

ios 本地打包工具

時間描述

2016-08-19

博文完成

csdn:

github:

iOS 打包工具生成

預備知識 要懂shell指令碼和xcode命令列命令,libexec命令使用 1 首先根據序號選擇對應的證書,這個要在自己的配置檔案中寫好 whilereadvar do case var in 1 selectindex var echo is number break echo is no nu...

vcpkg VC 打包工具

原文 引用 vcpkg 是微軟 c 團隊開發的在 windows 上執行的 c c 專案包管理工具,可以幫助您在 windows 平台上獲取 c 和 c 庫.vcpkg 自身也是使用 c 開發的 而其他的 c 包管理大多並不是 c 開發的 並且 vcpkg 能夠幫助使用者在 visual studi...

前端打包工具

前端打包工具是一種將前端 進行轉換,壓縮以及合併等操作的程式工具。目前常見的有grunt,webpack等。它能將我們前端人員寫得less,sass等編譯成css.將多個js檔案合併壓縮成乙個js檔案。它的作用就是通過將 編譯 壓縮,合併等操作,來減少 體積,減少網路請求。以及方便在伺服器上執行。目...