日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS自动化打包介绍

發布時間:2023/11/29 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS自动化打包介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要

隨著蘋果手持設備用戶的不斷增加,ios應用也增長迅速,同時隨著iphone被越獄越來越多的app 的渠道也不斷增多,為各個渠道打包成了一件費時費力的工作,本文提供一種比較智能的打包方式來減少其帶來的各種不便。

TAG

Ios打包,app打包,iphone打包,iphone自動化打包,ios打渠道包,iphone自動化打渠道包

?

自動化打包背景介紹

1、背景

隨著ios程序發布的渠道逐漸的增多,為每個渠道打包也成為特別耗費時間和體力的一項技術活了,而這一般大多數都是由rd來完成的。這樣就占用了rd很多的開發時間,何不把這些東西寫成一個自動化的腳本,然后交給qa 或是 pm來完成這個打包過程了。經過一番調研發現網上這種腳本還是很少的,不過xcode 提供了shell編譯工具 xcodebuild 和 ipa打包工具xcrun ,這就有理由讓我們利用這兩個工具寫一個自動化的打包腳本來提高我們的工作效率和自動化程度。

2、ios程序包格式、渠道包格式

1) 產生多渠道的原因及多渠道帶來的打包問題:隨著iphone、ipad、itouch等手持設備火熱銷售,而它們上面的應用也隨之火爆了起來,而隨之而來的就是以上設備被越獄后就可以在越獄的設備上直接運行ipa程序包 而不用通過appstore去下載,這樣一來國內就產生了眾多的專門為越獄手機而開設的渠道提供ipa程序包的下載。隨著越來越多的渠道,推廣時為各個渠道打包就成了一項比較耗費時間和精力的技術活了,因此我們必須尋找一種自動化的方式 讓打包變得高效簡單。
2) Ios程序包分為appstore二進制文件跟渠道包兩種格式
appstore二進制文件:通過xcode工具可以生成一個.app格式的二進制文件。
渠道包:格式為.ipa格式,在沒有自動化打包工具之前都是利用xcode來生成相應的渠道包,而且每次只能生成一個渠道,每次打包之前都得手動該渠道ID,帶來的問題就是耗費時間、效率低下、容易出錯、增加風險。

3、傳統的ios打包方式

利用xcode 打包

1) appstore 二進制程序包
打開你的項目,進入“Edit Project Settings”,進入Configuration頁面,選中Release點擊下面的Duplicate,復制一個新的配置項出來,命名為Distribution。然后進入Build頁面,頂上的Configuration下拉框選中Distribution,下面的Code Signing Identity里面的Any iPhone OS Device后面對應的值選中你的那個Distribution的證書。然后點擊“Build”–> “Build” 就可以編譯程序了
編譯成功后,你就可以在相應的build目錄下看到一個.app的二進制文件。
2) 渠道ipa包
根據以上步驟同樣配置好Distribution 證書 ,然后點擊 “Build”–> “Build and Archive” 就可以編譯程序了。接著打開“Window”?”Organizer” 左邊欄中選擇”ARCHIVED APPLICATIONS” 然后再右側列表中選中剛才編譯的程序包 再點擊右側右邊頂部的”Share”按鈕 保存到磁盤即可。就會生成一個.ipa的文件 即為渠道包。
注意:以上運行設備必須選擇“Deveice“

4、傳統的打包帶來的問題

耗費時間、耗費體力、效率低下、只能依賴RD來完成、容易出錯、發布風險比較高、QA回歸確認比較困難、 不智能化。

自動化打包具體實現

1、xcodebuild 介紹:

  • 1?xcodebuild[-project?? ?
  • ?
  • 2?][-activetarget][-alltargets][-target]...[-parallelizeTargets][-activeconfiguration][-configuration][-sdk?|][=]...[]...?? ?
  • ?
  • 3?xcodebuild[-version[-sdk?|]]?? ?
  • ?
  • 4?xcodebuild[-showsdks]?? ?
  • ?
  • 5?xcodebuild[-find?][-sdk?|]?? ?
  • ?
  • 6?xcodebuild[-list]? ?
  • ?
  • 也可以在終端輸入:xcodebuild –help 或 –h查看具體的選項
    顯示xcodebuildversion:xcodebuild –version
    顯示當前系統安裝的sdk:xcodebuild –showsdks
    顯示當前目錄下project Information:xcodebuild –list
    需要注意的是:執行以上命令時必須把位置定位在ios項目文件的根目錄下 否則會提示找不相關命令的。

    2、xcrun 介紹:

    此工具主要用于將app文件打包成ipa格式的程序包。(主要用于已越獄手機)。
    具體用法如下:

  • 1?/usr/bin/xcrun?-sdk?iphoneos?PackageApplication?–v?[{TARGET}.app]?-o?[{TARGET}.ipa]?--sign?[{Iphone?Distribution:xxx}]?–embed?[{xxx.mobileprovision}]? ?
  • ?
  • 其中:-v 對應的是app文件的絕對相對路徑 –o 對應ipa文件的路徑跟文件名 –sign
    對應的是 發布證書中對應的公司名或是個人名? –embed 對應的是發布證書文件
    注意如果對應的Distribution 配置中已經配置好了相關證書信息的話 –sign 和 –embed可以忽略

    3、具體方案

    a) 從源程序一次性打出所有渠道的ipa包 跟appstore的二進制包
    為了讓自動化腳本執行一次把所有的渠道包都打好,所以必須有一個配置文件用來存儲所有的渠道名跟渠道號,而項目文件中也應該有個對應存儲當前渠道號的文件,每次程序都從這個存放渠道號的文件中讀取渠道號即可,大概的思路就是利用腳本循環執行打包過程,而每次打包前都通過腳本修改項目中存放渠道號的文件為當前循環的最新渠道號,讓后逐個打包。
    注:具體事例見附錄

    b) 提供一個ipa格式的母包 從母包生成其它所有的渠道包跟 appstore 包
    qa的一些疑問,如何確保所有的渠道包就是他們驗證過的那份代碼呢?
    的確,以上代碼每次都是重新對程序進行打包,可qa往往測試驗證的只有一個包,如果個個去驗證無意中之中又增加了qa的工作量哈!!而且風險也不可控。因此基于上面的問題我們想出了一下辦法:qa只驗證一個程序包(即母包)如果這個包通過驗證 我們就通過母包去生成其它渠道的包,這樣一來qa也不用確認那么多的渠道包了,風險也得到了有效的控制。
    可能你會問:用一個包生成其他的包可行么??
    原因是這樣的:因為每個渠道只是渠道號發生變化,而其他的內容又不會發生變化,而我們的渠道號又是存儲在sourceid.dat這個文件中的,所以只要改變母包中的sourceid.dat文件的內容即可,而ipa包又是同zip格式進行壓縮,所以基本思路就是通過zip先對母包進行解壓,然后改變sourceid.dat的內容 最后再用zip進行壓縮成相應的渠道包即可。
    Ipa包的目錄:


    注:具體事例見附錄

    一些問題

    當有些shell命令在mac的終端中運行不通過時,請確保你的shell腳本是在mac環境下編寫的而不是同xp等其他環境中copy過來的。因為mac跟xp的編碼是不一樣所以會有問題。

    總結:

    通過從母包打出其他渠道的包這種方法:得到以下好處

    i.????????????? 降低了rd的工作量,一起qa的工作量。

    ii.????????????? 讓測試發布程序時的風險得到了控制。

    iii.????????????? 提高了打包發布工作效率。(幾十個包 只需短短的幾分鐘)。

    iv.????????????? 提高了自動化。

    v.????????????? 不依賴mac 以及xcode環境 直接在linux 下即可完成 從母包生成其它包

    附錄

    利用xcode環境一次生成所有包的shell 腳本代碼:

  • 01?#!/bin/sh?? ?
  • ?
  • 02???? ?
  • ?
  • 03?xcodebuild?clean?-configuration?Distribution??????//clean項目?? ?
  • ?
  • 04???? ?
  • ?
  • 05?distDir="/Users/xxxx/dist"? ?
  • ?
  • 06?releaseDir="build/Distribution-iphoneos"? ?
  • ?
  • 07?version="1_0_0"? ?
  • ?
  • 08?rm?-rdf?"$distDir"? ?
  • ?
  • 09?mkdir?"$distDir"? ?
  • ?
  • 10?for?line?in?$(cat?data.dat)????????//讀取所有渠道號data.dat文件?? ?
  • ?
  • 11?do? ?
  • ?
  • 12?ipafilename=`echo?$line|cut?-f1?-d':'`?//渠道名?? ?
  • ?
  • 13?sourceid=`echo?$line|cut?-f2?-d':'`????//渠道號?? ?
  • ?
  • 14?echo?"ipafilename=$ipaname"? ?
  • ?
  • 15?echo?"sourceid=$sourceid"? ?
  • ?
  • 16?targetName="youtargename"???//項目名稱(xcode左邊列表中顯示的項目名稱)?? ?
  • ?
  • 17?echo?"sourceid=$sourceid"? ?
  • ?
  • 18?echo?"ipafilename=$ipafilename"? ?
  • ?
  • 19?echo?"$sourceid"?>?sourceid.dat?? ?
  • ?
  • 20?echo?"sourceid.dat:?"? ?
  • ?
  • 21?cat?sourceid.dat?? ?
  • ?
  • 22?rm?-rdf?"$releaseDir"? ?
  • ?
  • 23???? ?
  • ?
  • 24?ipapath="${distDir}/${targetName}_${version}_from_${sourceid}.ipa"? ?
  • ?
  • 25???? ?
  • ?
  • 26?echo?"***開始build?app文件***"? ?
  • ?
  • 27?xcodebuild?-target?"$targetName"?-configuration?Distribution??-sdk?iphoneos?build?? ?
  • ?
  • 28?appfile="${releaseDir}/${targetName}.app"? ?
  • ?
  • 29?if?[?$sourceid?==?"appstore"?]?? ?
  • ?
  • 30?then? ?
  • ?
  • 31?cd?$releaseDir?? ?
  • ?
  • 32?zip?-r?"${targetName}_${ipafilename}_${version}.zip"?"${targetName}.app"? ?
  • ?
  • 33?mv?"${targetName}_${ipafilename}.zip"?$distDir?2>?/dev/null?? ?
  • ?
  • 34?cd?../..?? ?
  • ?
  • 35?else? ?
  • ?
  • 36?echo?"***開始打ipa渠道包****"? ?
  • ?
  • 37?/usr/bin/xcrun?-sdk?iphoneos?PackageApplication?-v?"$appfile"?-o?"$ipapath"?--sign?"iPhone?Distribution:xxxxxx"? ?
  • ?
  • 38?fi? ?
  • ?
  • 39?done? ?
  • ?
  • 注:以上的data.dat文件為存放渠道號列表的文件 其格式為:3g:1001b 即 (渠道名:渠道號) sourceid.dat 為項目文件中存放渠道號的文件(內容只有一個渠道號)。當然了上面腳本只是說明了下如何利用xcodebuild 和 xcrun 進行打包 以及自動打包的一個邏輯,shell腳本好的同學可以自由發揮哈。。。

    從ipa格式的母包生成其它渠道包的shell腳本實例:

  • #!/bin/sh
  • xcodebuild clean -configuration Distribution //clean項目
  • distDir="/Users/xxxx/dist"
  • releaseDir="build/Distribution-iphoneos"
  • version="1_0_0"
  • rm -rdf "$distDir"
  • mkdir "$distDir"
  • for line in $(cat data.dat) //讀取所有渠道號data.dat文件
  • do
  • ipafilename=`echo $line|cut -f1 -d':'` //渠道名
  • sourceid=`echo $line|cut -f2 -d':'` //渠道號
  • echo "ipafilename=$ipaname"
  • echo "sourceid=$sourceid"
  • targetName="youtargename" //項目名稱(xcode左邊列表中顯示的項目名稱)
  • echo "sourceid=$sourceid"
  • echo "ipafilename=$ipafilename"
  • echo "$sourceid" > sourceid.dat
  • echo "sourceid.dat: "
  • cat sourceid.dat
  • rm -rdf "$releaseDir"
  • ipapath="${distDir}/${targetName}_${version}_from_${sourceid}.ipa"
  • echo "***開始build app文件***"
  • xcodebuild -target "$targetName" -configuration Distribution -sdk iphoneos build
  • appfile="${releaseDir}/${targetName}.app"
  • if [ $sourceid == "appstore" ]
  • then
  • cd $releaseDir
  • zip -r "${targetName}_${ipafilename}_${version}.zip" "${targetName}.app"
  • mv "${targetName}_${ipafilename}.zip" $distDir 2> /dev/null
  • cd ../..
  • else
  • echo "***開始打ipa渠道包****"
  • /usr/bin/xcrun -sdk iphoneos PackageApplication -v "$appfile" -o "$ipapath" --sign "iPhone Distribution:xxxxxx"
  • fi
  • done
  • 注:以上data.dat也是用來存儲所有渠道號的,sourceipaname就是通過qa驗證的母包,appname為ipa包加壓后Payload 目錄下的app文件名并且以上所有文件必須與腳本文件保持在同一目錄下以及在mac環境中執行。

    by liuzhibin

    ?

    【本文首發于:搜索研發部官方博客http://stblog.baidu-tech.com/?p=1295關注百度技術沙龍

    轉載于:https://blog.51cto.com/baidutech/742977

    總結

    以上是生活随笔為你收集整理的IOS自动化打包介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 丰满肉嫩西川结衣av | 草草影院在线 | 日韩一区二区三区在线观看视频 | 性色av一区二区三区在线观看 | 亚洲专区一区 | 懂色av一区二区三区四区 | 色先锋影院 | 色8久久| 靠逼视频免费网站 | 永久毛片 | 美女av一区| 欧美黑人多人双交 | 两性囗交做爰视频 | 97av视频在线 | 国内精品国产成人国产三级 | 国产一区麻豆 | 中文字幕在线播放日韩 | 日本久久视频 | 手机看片福利在线 | 国产乱码精品一区二三赶尸艳谈 | 香蕉视频黄色在线观看 | 欧美体内谢she精2性欧美 | 99视屏 | 综合在线观看 | 日本妇女毛茸茸 | 欧美成年人在线观看 | av动漫免费看 | 一级黄色免费网站 | 双性人bbww欧美双性 | 成人手机在线观看 | 久久精品国产亚洲av麻豆图片 | av高清在线观看 | 扩阴视频 | 国产成人 综合 亚洲 | 久久av一区二区三区 | 成人福利视频在线观看 | 在线观看不卡一区 | 丝袜一区二区三区四区 | 亚洲欧美大片 | 95在线视频 | 特种兵之深入敌后高清全集免费观看 | 亚洲天码中字 | 日本男人的天堂 | 免费欧美一级片 | 狠狠躁日日躁夜夜躁av | 黄色一区二区三区四区 | 特黄aaaaaaaaa毛片免费视频 | 久久久久久久久久一区二区 | 天天添天天射 | 日本亚洲一区二区三区 | 国产97色在线 | 国产 | 欧美日韩国产免费一区二区三区 | 91私密视频 | 日韩成人午夜 | 你懂的在线免费观看 | 麻豆短视频在线观看 | 999这里有精品 | 50部乳奶水在线播放 | 日本东京热一区二区三区 | 免费黄色三级网站 | 亚洲欧美日韩中文字幕在线观看 | 在线免费观看av不卡 | 午夜毛片在线观看 | 九九爱国产 | 91极品身材尤物theporn | 国产亚洲精品久久久久久久 | 国产一区二区激情 | 黄色一级片. | 久久久com| 亚洲不卡免费视频 | 日少妇视频 | 国产三级久久 | 久久久久久国产精品视频 | 邻居少妇张开腿让我爽了在线观看 | 六月丁香久久 | 日本亚洲色大成网站www久久 | 亚洲精品小视频 | 亚洲GV成人无码久久精品 | 一区二区三区不卡在线观看 | 久久亚洲综合色 | 国产wwww| 亚洲视频欧美视频 | 亚洲第一页夜 | 88av在线视频| 高清二区| 国产国拍精品亚洲 | 国产黄色在线网站 | 天堂网a | 中文字幕一区二区三区在线观看 | 亚洲免费不卡视频 | 免费观看h片 | 天天做夜夜操 | jjzz国产| 国产一极片 | 日本少妇videos高潮 | 丁香花电影高清在线阅读免费 | 欧美黄色免费在线观看 | 欧美999| 欧美韩一区二区 |