ipa重簽名-ruby實現(xiàn)

需要的文件:

appName.ipa: 要重簽名的ipa

embedded.mobileprovision: 用來簽名的provision文件

entitlements.plist: 授權(quán)機制

distributionName: 指該簽名對應的證書的名字,在keychain中可以找到對應證書的名稱

步驟:

步驟一:將ipa包、mobileprovision文件、plist文件、iOSCodeSign.rb放在同一目錄下。

步驟二:更改entitlements.plist文件,其中application-identifier中的BundleID必須是用來簽名的證書下的BundleID,不然會出現(xiàn)安裝ipa包不成功。

步驟三:更改iOSCodeSign.rb腳本,第一部分的內(nèi)容需要填寫,IPA為ipa包的名字,PROVISION為mobileprovision文件的名字,PLIST文件必須命名為entitlements.plist,KEY為證書名字,BUNDLEID為BundleID,如果不修改則不填。

步驟四:運行腳本 ruby iOSCodeSign.rb。

iOSCodeSign.rb

=begin
需要的文件:
appName.ipa: 要重簽名的ipa
embedded.mobileprovision: 用來簽名的provision文件
entitlements.plist: 授權(quán)機制
distributionName: 指該簽名對應的證書的名字,在keychain中可以找到對應證書的名稱

步驟:
步驟一:將ipa包、mobileprovision文件、plist文件、iOSCodeSign.rb放在同一目錄下。
步驟二:更改entitlements.plist文件,其中application-identifier中的BundleID必須是用來簽名的證書下的BundleID,不然會出現(xiàn)安裝ipa包不成功。
步驟三:更改iOSCodeSign.rb腳本,第一部分的內(nèi)容需要填寫,IPA為ipa包的名字,PROVISION為mobileprovision文件的名字,PLIST文件必須命名為entitlements.plist,KEY為證書名字,BUNDLEID為BundleID,如果不修改則不填。
步驟四:運行腳本 ruby iOSCodeSign.rb。
=end

# 需要填寫
IPA = "example.ipa" # 用來重簽名的ipa包
PROVISION = "example.mobileprovision" # 用來重簽名的provision,可自定義命名
PLIST = "entitlements.plist" # entitlements文件,必須命名為entitlements.plist
KEY = "" # 用來重簽名的證書,在鑰匙串可以獲得
BUNDLEID = "" # BundleID,如果不需要改BundleID則不填


@ipa = Dir.pwd + "/" + IPA
@provision = Dir.pwd + "/" + PROVISION
@plist = Dir.pwd + "/" + PLIST
@payLoad = Dir.pwd + "/" + "Payload"

# 解壓ipa包
def unzipIPA
    if Dir.exist? @payLoad
        `rm -rf #{@payLoad}` # 刪除非空的文件夾
    end

    `unzip #{@ipa}`
end

# 修改BundleID
def changeBundleID
    if BUNDLEID.length > 0 # 需要修改BundleID
        appName = getAppName
        infoPlist = "#{@payLoad}/#{appName}/Info.plist"

        if File.exist? infoPlist # 可以更改BundleID
            `/usr/libexec/PlistBuddy -c 'Set :CFBundleIdentifier #{BUNDLEID}' #{infoPlist}`
        else
            puts "Info.plist文件不存在"
        end
    end
end

# 更換證書
def changeProvision
    oldProvision = @provision
    newProvision = "#{@payLoad}/#{getAppName}/embedded.mobileprovision"
    `cp #{oldProvision} #{newProvision}`
end

# 重簽名
def reSign
    reSignFrameWork
    reSignApp
end

# 對framework重簽名
def reSignFrameWork
    frameworks = "#{@payLoad}/#{getAppName}/Frameworks"
    if Dir.exist? frameworks
        Dir.foreach frameworks do |framework|
            if framework.end_with? ".framework"
                `codesign -fs "#{KEY}" --no-strict --entitlements #{@plist} #{frameworks}/#{framework}`
            end
        end
    end
end

# 對app重簽名
def reSignApp
    `codesign -fs "#{KEY}" --no-strict --entitlements #{@plist} #{@payLoad}/#{getAppName}`
end

# 打包
def zipIPA
    newAppName = getAppName.gsub(".app", "") + "_resign.ipa"

    `zip -r #{newAppName} Payload`
end

# 獲取appName
def getAppName
    appName = ""
     Dir.foreach @payLoad do |file|
        if file.end_with? "app"
            appName = file
            break
        end
     end
     appName
end

# 程序開始
if File.exist? @ipa
    if File.exist? @provision
        if File.exist? @plist
            if KEY.length > 0
                unzipIPA
                changeBundleID
                changeProvision
                reSign
                zipIPA
            else
                puts "證書為空"
            end
        else
            puts "entitlements.plist文件不存在"
        end
    else
        puts "provision文件不存在"
    end
else
    puts "ipa包不存在"
end

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • ipa 包重簽名最新最簡單教程 重簽名的意義:ipa 重簽名最大的用處是,不必重新打包,和配置其它第三方獲取 ap...
    紅發(fā)_KVO閱讀 73,593評論 24 64
  • 參數(shù)說明 appName.ipa: 要重簽名的ipa embedded.mobileprovision: 用來簽名...
    Billlin閱讀 1,632評論 1 3
  • iReSign運行界面: 需要準備的文件: appName.ipa: 要重簽名的ipa embedded.mobi...
    Billlin閱讀 18,612評論 16 16
  • 重簽名:可以讓用個人開發(fā)者賬號打出來的包,不用上架Appstore即可將其安裝到所有未越獄的iOS設備上(前提條件...
    CGsir陳閱讀 3,193評論 0 2
  • 準備工作 代碼簽名 (code signing) 對一個App來講至關(guān)重要,是iOS系統(tǒng)安全的重要組成部分,決定了...
    pandora的技術(shù)博客閱讀 3,001評論 3 51

友情鏈接更多精彩內(nèi)容