本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種重簽名方法及裝置。
背景技術(shù):
隨著公司規(guī)模的不斷壯大,APP(Application,應(yīng)用程序)業(yè)務(wù)需求的不斷增多,開發(fā)人員和測試人員也在不斷增多,隨之而來的是項(xiàng)目的分支會比較多,在持續(xù)集成過程當(dāng)中,效率較為重要,比如開發(fā)人員提測完一個(gè)需求后,測試人員需要盡快地獲取到測試包,開發(fā)人員修改完bug后,測試人員也需要拿到最新的包去驗(yàn)證回饋問題。
對于蘋果公司的證書來說,能夠安裝一個(gè)證書對應(yīng)的安裝包的設(shè)備的個(gè)數(shù)是有限制的,通常限制100臺設(shè)備。而對于大型公司較大團(tuán)隊(duì)來說,要加入的設(shè)備較多,很容易就達(dá)到限制數(shù)量的上限,因此,一定會有一批設(shè)備無法加入到證書中。為了解決這個(gè)問題,通常使用企業(yè)證書對現(xiàn)有安裝包進(jìn)行重簽名的方式將安裝包生成Inhouse包對外提供,加入證書的設(shè)備就可以不受安裝個(gè)數(shù)限制了。
其中,重簽名是對現(xiàn)有的程序安裝包(例如,iOS為.ipa包)通過更換證書的方式重新生成新的安裝包的操作。
還有一種情況是當(dāng)要測試版本覆蓋升級時(shí),要用當(dāng)前版本包生成一個(gè)版本號高于當(dāng)前版本的一個(gè)APP包,這種情況也可以通過重簽名的方式達(dá)到目的。
目前,對.ipa包的重簽名方案具體可以包括如下處理:
獲取并安裝好新證書(.p12)和新證書對應(yīng)的描述文件).mobileprovision);解壓已有的ipa包,得到Payload目錄,以下都在該目錄下操作;刪除舊的簽名文件,即刪除整個(gè)_CodeSignature目錄。通過新描述文件的Entitlements部分生成授權(quán)配置文件,即entitlements.plist;用新的描述文件替換mbedded.mobileprovision文件;用codesign命令進(jìn)行重簽名,用到新證書和上面生成的entitlements.plist文件,執(zhí)行后生成新的簽名文件;壓縮Payload生成新的.ipa包,即為最終重簽名后的目標(biāo)包。最后把不再需要用的Payload及entitlements.plist進(jìn)行刪除。然而,現(xiàn)有這種簽名方式只適用于層次簡單的APP。如果APP中有Apple Watch和Extension,則這種簽名方式簽名后的包不能正常安裝,因?yàn)樵?app目錄下,還有watch對應(yīng)的.app目錄,有單獨(dú)的簽名文件,而且在watch.app目錄下還有一個(gè)Extension.appex目錄,也有獨(dú)立的簽名文件。與watch.app并列的還有一個(gè)插件PlugIns目錄,里面有Extension.appex,也是獨(dú)立簽名。因此,如果有Apple Watch和Extension需要進(jìn)行對4個(gè)簽名文件的處理。
其中,Extension是對APP的擴(kuò)展,以獨(dú)立進(jìn)程運(yùn)行,與APP間可以進(jìn)行交互通信,如Watch Extension、Today Extension等,其中Today Extension在iOS8,iOS9下是在通知中心下面Today標(biāo)簽頁的內(nèi)容,iOS10以后在桌面右滑出現(xiàn)的頁面。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明旨在解決現(xiàn)有技術(shù)中存在的多層次的應(yīng)用程序包的重簽名方式問題,提出了一種重簽名方法及裝置。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種重簽名方法,包括:對第一設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第一層重簽名;對第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第二層重簽名;對第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第三層重簽名,第一設(shè)備受第二設(shè)備控制。
其中,上述第一設(shè)備為智能手表,第二設(shè)備為移動終端。
進(jìn)一步的,上述方法還包括:在對第一設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第一層重簽名之前,對應(yīng)用程序的安裝包進(jìn)行解壓,得到可執(zhí)行文件對應(yīng)的目錄,應(yīng)用程序的安裝包包括:第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件;從目錄中查找第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件。
進(jìn)一步的,上述方法還包括:在對第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第三層重簽名之后,對目錄進(jìn)行壓縮,生成目標(biāo)應(yīng)用程序安裝包。
其中,目標(biāo)文件包括第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件,則對目標(biāo)文件進(jìn)行重簽名的方法,包括:根據(jù)待進(jìn)行重簽名的目標(biāo)文件對應(yīng)的描述文件生成授權(quán)文件;刪除目標(biāo)文件對應(yīng)的原簽名文件;用描述文件替換目標(biāo)文件的原描述文件;使用目標(biāo)文件證書和授權(quán)文件進(jìn)行簽名,生成新的簽名文件。
根據(jù)一種重簽名裝置,包括:第一重簽名模塊,用于對第一設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第一層重簽名;第二重簽名模塊,用于對第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第二層重簽名;第三重簽名模塊,用于對第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第三層重簽名,第一設(shè)備受第二設(shè)備控制。
其中,第一設(shè)備為智能手表,第二設(shè)備為移動終端。
進(jìn)一步的,上述裝置還包括:解壓模塊,用于在對第一設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第一層重簽名之前,對應(yīng)用程序的安裝包進(jìn)行解壓,得到可執(zhí)行文件對應(yīng)的目錄,應(yīng)用程序的安裝包包括:第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件;查找模塊,用于從目錄中查找第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件。
進(jìn)一步的,上述裝置還包括:生成模塊,用于在對第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第三層重簽名之后,對目錄進(jìn)行壓縮,生成目標(biāo)應(yīng)用程序安裝包。
其中,目標(biāo)文件包括第一設(shè)備的應(yīng)用擴(kuò)展、第一設(shè)備的應(yīng)用以及第二設(shè)備的應(yīng)用擴(kuò)展,第三重簽名模塊,包括:生成單元,用于根據(jù)待進(jìn)行重簽名的目標(biāo)文件對應(yīng)的描述文件生成授權(quán)文件;刪除單元,用于刪除目標(biāo)文件對應(yīng)的原簽名文件;替換單元,用于用描述文件替換目標(biāo)文件的原描述文件;簽名單元,用于使用目標(biāo)文件證書和授權(quán)文件進(jìn)行簽名,生成新的簽名文件。
目前技術(shù)中,在代碼沒有改動的情況下,如果要生成若干個(gè)包,如果是用編譯器一個(gè)個(gè)去生成包,則效率太低,本發(fā)明實(shí)施例提供的方法先生成一個(gè)包,再對現(xiàn)有包通過重簽名的方式生成若干個(gè)與原包功能代碼完全一樣的包,總體上節(jié)省了時(shí)間,提高了生成包的效率,同時(shí),解決了含有Apple Watch和Extension復(fù)雜APP的.ipa包通過重簽名生成新包的問題。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明第一實(shí)施例提供的重簽名方法的流程圖;
圖2是本發(fā)明第二實(shí)施例中涉及提供的重簽名方法的流程圖;
圖3是本發(fā)明第二實(shí)施例中涉及到重簽名裝置的結(jié)構(gòu)框圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
第一實(shí)施例
本實(shí)施例提供了一種重簽名方法,用以解決現(xiàn)有技術(shù)中存在的對多層次的應(yīng)用程序進(jìn)行重簽名的問題,圖1是該方法的流程圖,如圖1所示,該方法包括如下處理:
步驟101:對第一設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第一層重簽名;其中,本實(shí)施例中的應(yīng)用擴(kuò)展文件是指Extension,是對APP的擴(kuò)展。
步驟102:對第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第二層重簽名;
步驟103:對第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第三層重簽名。
在本實(shí)施例中,第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件可以統(tǒng)稱目標(biāo)文件,對這些目標(biāo)文件進(jìn)行重簽名均可以以以下具體的方式來進(jìn)行:
根據(jù)待進(jìn)行重簽名的目標(biāo)文件對應(yīng)的描述文件生成授權(quán)文件;刪除目標(biāo)文件對應(yīng)的原簽名文件;用描述文件替換目標(biāo)文件的原描述文件;使用目標(biāo)文件證書和授權(quán)文件進(jìn)行簽名,生成新的簽名文件,即根據(jù)Inhouse對應(yīng)的描述文件生成授權(quán)文件entitlements.plist,原理是將描述文件中的Entitlements對應(yīng)的塊取出,并將Entitlements中com.apple.developer.team-identifier的值設(shè)置為“原值.對應(yīng)bundleid”的形式,再將修改后的Entitlements復(fù)制到entitlements.plist文件;刪除當(dāng)前目錄下原來的簽名文件CodeResources;用Inhouse對應(yīng)的新描述文件替換當(dāng)前目錄下的embedded.mobileprovision文件;用Inhouse證書和剛才生成的生成的entitlements.plist文件進(jìn)行簽名,生成新的簽名文件CodeResources。
其中,本實(shí)施例的第一設(shè)備與第二設(shè)備預(yù)先經(jīng)過匹配,并建立連接,第一設(shè)備受第二設(shè)備控制,同時(shí)第二設(shè)備可以獲取第一設(shè)備中的數(shù)據(jù),本實(shí)施例的一個(gè)優(yōu)選實(shí)施例方式中,第一設(shè)備可以為智能手表,例如,iphone,第二設(shè)備可以為移動終端,例如,apple watch,在第一設(shè)備為iphone,第二設(shè)備為apple watch的情況下,如圖2所示,對應(yīng)用程序安裝包進(jìn)行重簽名的過程可以包括:步驟201:解壓.ipa包,得到payload目錄;步驟202:首先對深層Wacth Extension進(jìn)行重簽名,步驟203:再對次外層的Watch APP和與其同層次的iphone的APP的Extension進(jìn)行重簽名,步驟203:最后對整個(gè)APP進(jìn)行一次最外層的重簽名,實(shí)現(xiàn)了APP的.ipa包換證書生成新的.ipa包,步驟204:對payload進(jìn)行壓縮,生成目標(biāo).ipa包,步驟205:進(jìn)行掃尾工作后流程結(jié)束,例如,將payload整個(gè)目錄以及重簽名過程中產(chǎn)生的entitlement.plist進(jìn)行刪除。
進(jìn)一步的,本實(shí)施例提供的方法還可以包括:在對第一設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第一層重簽名之前,對應(yīng)用程序的安裝包進(jìn)行解壓,得到可執(zhí)行文件對應(yīng)的目錄,即payload目錄,應(yīng)用程序的安裝包包括:第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件;從目錄中查找第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件,基于此,在對第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第三層重簽名之后,本實(shí)施例提供的方法還可以包括,對目錄進(jìn)行壓縮,生成目標(biāo)應(yīng)用程序安裝包。
第二實(shí)施例
本實(shí)施例提供了一種重簽名方法,在本實(shí)施例中,以應(yīng)用程序安裝包中含有Apple Watch和Today Extension為例對重簽名方法進(jìn)行進(jìn)一步說明。
該方法的實(shí)現(xiàn)原理如下:
APP在打包進(jìn)行簽名的過程中會在.ipa包中新建一個(gè)_CodeSignatue/CodeResources,CodeResources實(shí)際上就是一個(gè).plist文件,這個(gè)文件中存儲了被簽名的APP中所有文件的簽名。CodeResources中包含了文件和文件對應(yīng)的簽名的列表,在以前的OS X系統(tǒng)版本中可以設(shè)置某些資源文件不用設(shè)置簽名,但現(xiàn)在新版代碼簽名中所有的代碼文件和資源文件都必須設(shè)置簽名,不再有例外,而且APP中如果有Watch、Extension這些擴(kuò)展中,也會生成CodeResources簽名文件,其中Watch下還有Extension,這些文件都必須進(jìn)行獨(dú)立的簽名驗(yàn)證。
本實(shí)施例主要針對含有Watch和Extension的APP,在對其.ipa包進(jìn)行重簽名時(shí),對Watch和Extension下生成的CodeResources簽名文件做一些單獨(dú)的處理。
假設(shè)執(zhí)行本實(shí)施例的重簽名方法之前,存在以下條件。
已有可用的Inhouse發(fā)布證書。
已在Inhouse賬戶中創(chuàng)建4個(gè)bundle id,其中主APP有1個(gè),AappleWatch有2個(gè),Extension有1個(gè)。
已在Inhouse賬戶中創(chuàng)建好4個(gè)描述文件,其中主APP有1個(gè),Watch有2個(gè),Extension有1個(gè),并且Extension的描述文件中包含的APP ID已經(jīng)創(chuàng)建好了相應(yīng)的group id;
假設(shè)在APP中各target名如下:
主APP為XXX,Watch為XXXWatch,Watch Extension為XXXWatchExtension,Today Extension為XXXTodayExtension。
基于上述先決條件,本實(shí)施例提供的重簽名方法包括如下處理:
1、解壓.ipa包后,有Payload目錄;
2、對Watch Extension進(jìn)行重簽名;
2.1、找到目錄:
Payload/XXX.app/Watch/XXXWatch.app/PlugIns/XXXWatchExtension.ppex。
2.2、修改目錄下的Info.plist文件中的一些屬性值:
修改CFBundleIdentifier為Inhouse中對應(yīng)的bundle id,修改NSExtension:NSExtensionAttributes:WKAppBundleIdentifier的值為XXXWatch對應(yīng)的Inhouse中對應(yīng)的bundle id。如果是Watch OS1,還需要修改Inhouse中對應(yīng)的watch group id。
2.3、公共操作:創(chuàng)建授權(quán)文件、刪除原來的簽名文件、替換描述文件以及用Inhouse證書進(jìn)行簽名操作。
3、對Watch進(jìn)行重簽名;
3.1、找到目錄Payload/XXX.app/Watch/XXXWatch.app。
3.2、修改目錄下的Info.plist文件,修改CFBundleIdentifier為Inhouse中對應(yīng)的bundle id,修改WKCompanionAppBundleIdentifier為主APP的bundle id。
3.3、公共簽名。
4、對Today Extension進(jìn)行重簽名;
4.1、找到目錄Payload/XXX.app/PlugIns/XXXTodayExtension.appex。
4.2、修改目錄下的Info.plist文件,修改CFBundleIdentifier為Inhouse中對應(yīng)的bundle id,修改Today在Inhouse對應(yīng)的group id。
4.3、公共簽名。
5、對XXX進(jìn)行重簽名;
5.1、找到目錄Payload/XXX.app。
5.2、修改目錄下的Info.plist文件,修改CFBundleIdentifier為Inhouse中對應(yīng)的bundle id,修改Today在Inhouse對應(yīng)的group id,如果是OS1,修改Watch在Inhouse中對應(yīng)的group id。
5.3、公共簽名。
6、壓縮Payload成.ipa包,至此,重簽名完成,新的.ipa包已經(jīng)生成。
7、將Payload整個(gè)目錄及以上步驟中產(chǎn)生的entitlements.plist進(jìn)行刪除。
對以上公共簽名的操作與上述第一實(shí)施例中對目標(biāo)文件進(jìn)行重簽名的方法相同,此處不再贅述。
第三實(shí)施例
本實(shí)施例提供了一種重簽名裝置,該裝置用于實(shí)現(xiàn)上述第一實(shí)施例以及第二實(shí)施例提供的方法,圖3是該裝置的結(jié)構(gòu)框圖,如圖3所示,該裝置30包括如下組成部分:
第一重簽名模塊31,用于對第一設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第一層重簽名;
第二重簽名模塊32,用于對第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第二層重簽名;
第三重簽名模塊33,用于對第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第三層重簽名,其中,第一設(shè)備受第二設(shè)備控制。
優(yōu)選的,本實(shí)施例中的第一設(shè)備可以為智能手表,第二設(shè)備可以為移動終端。
進(jìn)一步的,上述裝置30還可以包括:解壓模塊,用于在對第一設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第一層重簽名之前,對應(yīng)用程序的安裝包進(jìn)行解壓,得到可執(zhí)行文件對應(yīng)的目錄,應(yīng)用程序的安裝包包括:第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件;查找模塊,用于從目錄中查找第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件。
進(jìn)一步的,上述裝置30還可以包括:生成模塊,用于在對第一設(shè)備的應(yīng)用擴(kuò)展文件、第一設(shè)備的應(yīng)用文件以及第二設(shè)備的應(yīng)用擴(kuò)展文件進(jìn)行第三層重簽名之后,對目錄進(jìn)行壓縮,生成目標(biāo)應(yīng)用程序安裝包。
其中,目標(biāo)文件包括所述第一設(shè)備的應(yīng)用擴(kuò)展文件、所述第一設(shè)備的應(yīng)用文件以及所述第二設(shè)備的應(yīng)用擴(kuò)展文件,基于此,上述第三重簽名模塊,可以包括:生成單元,用于根據(jù)待進(jìn)行重簽名的目標(biāo)文件對應(yīng)的描述文件生成授權(quán)文件;刪除單元,用于刪除目標(biāo)文件對應(yīng)的原簽名文件;替換單元,用于用描述文件替換目標(biāo)文件的原描述文件;簽名單元,用于使用目標(biāo)文件證書和授權(quán)文件進(jìn)行簽名,生成新的簽名文件。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。