After upgrading to xcode 9, cordova app won't build, error 70, requires provisioning profile

前端 未结 3 2071
终归单人心
终归单人心 2020-11-29 02:19

Yesterday we upgraded from xcode 8.3.2 to version 9. And now our enterprise distribution apache cordova ios app refuses to build.

2017-09-21 07:37:16.787 xc         


        
3条回答
  •  囚心锁ツ
    2020-11-29 02:29

    If you specify your provisioning profile explicitly, like me. Like this in your Cordova build.json:

    "ios": {
        "debug": {
            "codeSignIdentitiy": "iPhone Developer",
            "developmentTeam":"MYTEAMID",
            "packageType": "developer",
            "iCloudContainerEnvironment": "Development"
        },
        "release": {
            "codeSignIdentitiy": "iPhone Distribution",
            "developmentTeam":"MYTEAMID",
            "provisioningProfile": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
            "packageType": "ad-hoc",
            "iCloudContainerEnvironment": "Production"
        }
    }
    

    Please Note iCloudContainerEnvironment = Production/Development is only required if you use push notifications

    You need to explicitly set manual signing and provide the provisioning keys in your ExportOptions.plist that is generated by Cordova. Unfortunately Cordova is not currently generating all of the required keys.

    Here is what it needs to look like, at least for me:

    
    
    
    
      compileBitcode
      
      method
      ad-hoc
      iCloudContainerEnvironment
      Production
      provisioningProfiles
      
        my.bundle.idenifier
        My Provisioning Profile Name
      
      signingCertificate
      iPhone Distribution
      signingStyle
      manual
      stripSwiftSymbols
      
      teamID
      YOURTEAMID
      thinning
      <none>
    
    
    

    The file Cordova generates @ cordova/app/platforms/ios/exportOptions.plist looks like:

    
    
    
      
        compileBitcode
        
        method
        development
        teamID
        MYTEAMID
      
    
    

    notice it is missing the important bits that Xcode 9 requires.

    I generated the correct file by archiving the build manually, then exporting it which also creates the exportOptions.plist that I now use as reference.

    After digging deeper, I found that this cannot be fixed after running "Cordova add platform iOS", because it is generated during the build phase dynamically. I decided to fork the Cordova-ios repo and submit a pull request. You may use my fork directly, or wait until the pull request is merged.

    Pull Request https://github.com/apache/cordova-ios/pull/338/commits

    Fork https://github.com/jrryhrtn/cordova-ios

    Usage notes from pull request

    See example below, please note that the provisioning profile can be the name or UUID of the profile. Name is preferred for maintenence, as UUID changes each time to regenerate the profile.

    {
    "ios": {
        "debug": {
            "codeSignIdentity": "iPhone Developer",
            "developmentTeam":"YOURTEAMID",
            "provisioningProfile": "provisioning profile name or UUID",
            "packageType": "development"
        },
        "release": {
            "codeSignIdentity": "iPhone Distribution",
            "developmentTeam":"YOURTEAMID",
            "provisioningProfile": "provisioning profile name or UUID",
            "packageType": "ad-hoc"
        }
    }
    }
    

    I plan to manually patch until the/a fix is merged into the next Cordova release. You will have to regenerate your iOS platform after the patch via "Cordova platform rm iOS" and then "Cordova platform add ~/forks/cordova-ios". ~/forks/cordova-ios my local path, use the path on your local machine where you downloaded the forked Cordova-ios repo.

    Update

    cordova-ios 4.5.2 has been officially released! Upgrade by running the following commands: "cordova platform rm ios", and then "cordova platform add ios@4.5.2"

    Cheers!

提交回复
热议问题