使用xcodebuild命令進(jìn)行自動(dòng)化打包

1 修改xcodeproj/project.pbxproj 文件

這個(gè)文件修改的是項(xiàng)目的證書配置和描述文件配置

關(guān)鍵修改如下

對(duì)于打Release模式包的,找到這一段

        638234841AE62041001700C9 /* Release */ = {
            isa = XCBuildConfiguration;
            baseConfigurationReference = 6A6EBCC368D67FB5C2365F82 /* Pods-Toon.release.xcconfig */;
            buildSettings = {
                ....
                PRODUCT_BUNDLE_IDENTIFIER = com.test.enterprise.xxx
                PROVISIONING_PROFILE = "d73920ec-9178-4f26-a0b8-c89ca2bbea6d";
                PROVISIONING_PROFILE_SPECIFIER = com.test.enterprise.xxx
                DEVELOPMENT_TEAM = TLWP697Z5D;
                ....
            };
            name = Release;
        };

將這四個(gè)值配置成對(duì)應(yīng)的證書和描述文件即可

2 構(gòu)建archive包

  • 使用cocoapods管理第三方的工程使用這條命令打包

    xcodebuild archive -workspace 項(xiàng)目名稱.xcworkspace -scheme 項(xiàng)目名稱 -configuration Release -archivePath archive包存儲(chǔ)路徑 CODE_SIGN_IDENTITY="證書" PROVISIONING_PROFILE="描述文件UUID"
    
  • 未使用Pod管理第三方的工程使用這個(gè)

    xcodebuild archive -project 項(xiàng)目名稱.xcodeproj -scheme 項(xiàng)目名稱 -configuration Release -archivePath archive包存儲(chǔ)路徑 CODE_SIGN_IDENTITY=證書 PROVISIONING_PROFILE=描述文件UUID
    

證書去鑰匙串中查找,需要注意的是這里需要把證書的完整名字拷貝過來。

描述文件的UUID在下面會(huì)有介紹如何獲取

示例

 ? xcodebuild archive -workspace Test.xcworkspace -scheme Test -configuration Release -archivePath ~/Desktop/Test.xcarchive CODE_SIGN_IDENTITY="iPhone Distribution: Beijing Test Internet Technology Co. Ltd." PROVISIONING_PROFILE="d78212ec-9128-4f26-a428-c89ca5232bea6d"

3 導(dǎo)出ipa包

xcodebuild  -exportArchive 
            -archivePath archive文件的地址.xcarchive 
            -exportPath 導(dǎo)出的文件夾地址 
            -exportOptionsPlist exprotOptionsPlist.plist 
            CODE_SIGN_IDENTITY=證書 
            PROVISIONING_PROFILE=描述文件UUID
各參數(shù)說明
  • -archivePath 指定從哪里讀取archive包
  • -exportPath 指定ipa包導(dǎo)出后的放置位置
  • -exportOptionsPlist 該參數(shù)的值是一個(gè)plist文件的地址,打包時(shí)候的一些配置,該文件中的值如下
    • teamID - 值為證書的teamID
    • method - 指定打包方式,是內(nèi)側(cè)包、企業(yè)包、App Store包。值為下面幾個(gè): enterprise、ad-hoc、..
    • ...
  • CODE_SIGN_IDENTITY - 打包證書
  • PROVISIONING_PROFILE - 使用的描述文件

exportOptionsPlist在用xcode手動(dòng)打包的時(shí)候會(huì)自動(dòng)生成的,和ipa文件在同一個(gè)目錄,可以拷貝來用。也可以手動(dòng)創(chuàng)建。文件中需要配置的值在上面已經(jīng)說明。

示例

? xcodebuild -exportArchive -archivePath ~/Desktop/Test.xcarchive -exportPath ~/Desktop/ -exportOptionsPlist ~/WorkSpace/archive/ExportOptions.plist CODE_SIGN_IDENTITY="iPhone Distribution: Beijing Test Internet Technology Co. Ltd." PROVISIONING_PROFILE="d78212ec-9128-4f26-a428-c89ca5232bea6d"

通過xcodebuild命令查看項(xiàng)目設(shè)置

通過命令查看描述文件的詳細(xì)信息 包括UUID等信息

/usr/bin/security cms -D -i 文件路徑

輸出如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>AppIDName</key>
    <string>comtestenterprisexx</string>
    <key>ApplicationIdentifierPrefix</key>
    <array>
    <string>TLWP697Z5D</string>
    </array>
    <key>CreationDate</key>
    <date>2018-06-06T03:36:47Z</date>
    <key>Platform</key>
    <array>
        <string>iOS</string>
    </array>
    <key>IsXcodeManaged</key>
    <false/>
    <key>DeveloperCertificates</key>
    <array>
        <data>MIIFvjCCBKagAwIBAgIIS3zyrKjgso8wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYxMjI0MDkyNjA3WhcNMTkxMjI0MDkyNjA3WjCBvzEaMBgGCgmSJomT8ixkAQEMClRMV1A2OTdaNUQxSTBHBgNVBAMMQGlQaG9uZSBEaXN0cmlidXRpb246IEJlaWppbmcgU3lzd2luIEludGVybmV0IFRlY2hub2xvZ3kgQ28uIEx0ZC4xEzARBgNVBAsMClRMV1A2OTdaNUQxNDAyBgNVBAoMK0JlaWppbmcgU3lzd2luIEludGVybmV0IFRlY2hub2xvZ3kgQ28uIEx0ZC4xCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtPL6A6upSWHyDFFuPEF+eM9fXXJicMaJU68AqdGVwloKUlS/WXPCDlDOTzL66r0i55eh91YK27WC733/TH0CBOvjT6O0jpPJLBDLzg/pMxlMD2jiKh0EOTdBQdoaDlnDZpQZ+ht5E4UudBYtzvf9C58Sit839RK43mvioZiBp4nMEUlSXRY3/S6gVlwkh4S2Lm7dLSXnX7WcoJBGi/ixXcCcE6vqNdcZ36ngs8lmWM/gJByEGNKzb4kaTkvLileYSo3cguhfrxf7Q1VGKIrL43YzHZ71Pkpeqdy5pTykKZH8RnnXhX65LlCWrJTkQsMO+qfv9tHdpbx360wD4ClkxQIDAQABo4IB4zCCAd8wPwYIKwYBBQUHAQEEMzAxMC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDAyLXd3ZHIwMTAdBgNVHQ4EFgQU/jENRTZR9YaB3s7mnzHmn0bzU0YwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCCAQ8GA1UdIASCAQYwggECMIH/BgkqhkiG92NkBQEwgfEwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wKQYIKwYBBQUHAgEWHWh0dHA6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2EvMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAzATBgoqhkiG92NkBgEEAQH/BAIFADANBgkqhkiG9w0BAQUFAAOCAQEAmeGtWRppAcYdOe7l6hEdzlQE1YT2BztljaLW38hkrhVU+omaaF8LEb3F58fZxSCOteEsaiyTkq9lgt/3wKbmzPVFW379az1+sxnk5sb+PHCrg7BvfVIlB9/1CljxYuGwwOWKkLL6MP/sAFInrBJkDYWt3NHvpe1aH0bT/3rVW2bkV4LWfcJlVPtGzAGNYOr4itL4wma3h9ryvVQb1Eiy+RWbn//QmJGavkuICh3cJ25/ywUR6sLMsIQLMyt+GcZdUMioXJn5RqDxSDlB3wArJkav2CDP7QN83m/bbplKdph+e/r0jRoHCTXPs2A4xnIkUIQJNkGGvdDvc0AFcV+kNQ==</data>
    </array>
    <key>Entitlements</key>
    <dict>
        <key>keychain-access-groups</key>
        <array>
            <string>TLWP697Z5D.*</string>
        </array>
        <key>get-task-allow</key>
        <false/>
        <key>application-identifier</key>
        <string>TLWP697Z5D.com.systoon.enterprise.milintoon</string>
        <key>com.apple.developer.associated-domains</key>
        <string>*</string>
        <key>com.apple.security.application-groups</key>
        <array>
        </array>
        <key>com.apple.developer.team-identifier</key>
        <string>TLWP543Z5D</string>
        <key>com.apple.external-accessory.wireless-configuration</key>
        <true/>
        <key>aps-environment</key>
        <string>production</string>
    </dict>
    <key>ExpirationDate</key>
    <date>2019-06-06T03:36:47Z</date>
    <key>Name</key>
    <string>com.markday.enterprise.test</string>
    <key>ProvisionsAllDevices</key>
    <true/>
    <key>TeamIdentifier</key>
    <array>
        <string>TLWP697Z5D</string>
    </array>
    <key>TeamName</key>
    <string>Beijing MarkDay Internet Technology Co. Ltd.</string>
    <key>TimeToLive</key>
    <integer>365</integer>
    <key>UUID</key>
    <string>d73234ec-9178-4f26-a0b8-c89ca2bbea6d</string>
    <key>Version</key>
    <integer>1</integer>
</dict>
</plist>%

這里面就有UUID、TeamName等信息

描述文件存放的位置

/Users/用戶名稱/Library/MobileDevice/Provisioning Profiles

查看工程的信息

xcodebuild -list

輸出如下

Information about project "Toon":
    Targets:
        Toon
        ToonTests
        TNAOrgTest
        TNGroupChatTests
        TNShareExtension

    Build Configurations:
        Debug
        Debug_Automation_Test
        Release

    If no build configuration is specified and -scheme is not passed then "Release" is used.

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

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

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