How can I deploy (create .ipa) iphone app using 'cordova build ios --release'?

前端 未结 5 1290
孤独总比滥情好
孤独总比滥情好 2020-12-12 10:46

I have created a \'helloworld\' iOS app with cordova using there documentation. The app successfully runs when I run cordova emulate ios. What I ca

相关标签:
5条回答
  • 2020-12-12 10:51

    I found this command which worked for me:

    cordova build ios --device
    cd platforms/ios/build/device
    /usr/bin/xcrun -sdk iphoneos PackageApplication "$(pwd)/$PROJECT_NAME.app" -o "$(pwd)/$PROJECT_NAME.ipa"
    

    Source: http://www.splinter.com.au/xcode-4-command-line-builds-of-iphone-apps/

    I did run @MD. Mohiuddin Ahmed's Ruby script first, which would have changed my xcodeproj file. I'm not sure if that was necessary but I don't think so.

    Update for XCode 8: As a commenter has noted, PackageApplication has been removed from XCode 8. To update the process, see the question: What's the replacement for Xcode's PackageApplication?

    Edited to clarify process by adding cordova build command as suggested by comments.

    0 讨论(0)
  • 2020-12-12 11:03

    I finally figured out a way to automate this by using xcodeproj, xcode and this ruby script :

    require 'xcodeproj'
    xcproj = Xcodeproj::Project.open("HelloWorld.xcodeproj")
    xcproj.recreate_user_schemes
    xcproj.save
    

    And then in the PROJECT_ROOT/platforms/ios/ directory this command helped me to generate my *.ipa:

    xcodebuild -project HelloWorld.xcodeproj -exportArchive -exportFormat ipa -archivePath $(pwd)/HelloWorld.xcarchive -exportPath $(pwd)/HelloWorld.ipa CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -alltargets -configuration Release
    

    Thought we can sign our .ipa later on :)

    0 讨论(0)
  • 2020-12-12 11:04

    If you are using cordova ios 3.9.0 or newer, you can use this command to create the .ipa directly from the CLI with no extra commands:

    cordova build ios --device --release
    

    You'll need a build.json file on the root of your project

    {
      "ios": {
        "debug": {
          "codeSignIdentity": "iPhone Developer",
          "provisioningProfile": "your-dev-provisioning-profile-UUID-here"
        },
        "release": {
          "codeSignIdentity": "iPhone Distribution",
          "provisioningProfile": "your-distribution-provisioning-profile-UUID-here"
        }
      }
    }
    

    To get the UUID I open the .mobileprovision file on a text editor and search for 'UUID', not sure if there is an easier way of finding it.

    If using Xcode 8 the build.json needs developmentTeam field and packageType field, but not longer need the provisioning profile, also, the codeSignIdentity should be iPhone Developer for both debug and release:

    {
        "ios": {
            "debug": {
                "codeSignIdentity": "iPhone Developer",
                "developmentTeam": "FG35JLLMXX4A",
                "packageType": "development"
            },
            "release": {
                "codeSignIdentity": "iPhone Developer",
                "developmentTeam": "FG35JLLMXX4A",
                "packageType": "app-store"
            }
        }
    }
    

    http://cordova.apache.org/docs/en/6.x/guide/platforms/ios/index.html#using-buildjson

    0 讨论(0)
  • 2020-12-12 11:05

    You can try a new tool from http://fir.im.

    They have a fir cli tool written in ruby. You can install it with the following command:

    sudo gem install fir-cli --no-ri --no-rdoc
    

    Sign up an account (all free like the good old testflight) and get a token from your profile. From your command prompt run:

    fir login
    

    Provide your token.

    CD into your directory where your .xcodeproj located.

    fir build_ipa . 
    

    After a while (if the build success) you will find your ipa in your ./build_ipa folder.

    0 讨论(0)
  • 2020-12-12 11:08

    Everything else did not work for me but this works for me

    cordova build ios
    

    then

    cordova run ios --device
    

    The .ipa file is located at

    myPrject/platforms/ios/build/device/myProject.ipa
    

    build.json (set automatic siging)

    {
        "ios": {
            "debug": {
                "codeSignIdentity": "iPhone Developer",
                "developmentTeam": "FG35JLLMXX4A",
                "packageType": "development",
                "automaticProvisioning": true,
                "buildFlag": [
                    "EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
                    "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
                    "LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
                ]
            },
            "release": {
                "codeSignIdentity": "iPhone Developer",
                "developmentTeam": "FG35JLLMXX4A",
                "packageType": "app-store",
                "automaticProvisioning": true,
                "buildFlag": [
                    "EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
                    "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
                    "LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
                ]
            }
        }
    }
    

    Reference docs

    Voila!

    0 讨论(0)
提交回复
热议问题