Skip to main content

Use xcodebuild to package iOS apps

To package your iOS applications the quickest way, you can use xcodebuild in your terminal.

Before you begin:

  • You have installed the Command Line Tools for Xcode.

  • You have installed or updated gen-ir.

To complete this task:

  1. Open your terminal, and then change directory to your project.

  2. Run the following command:

    xcodebuild clean
  3. If you have an Xcode Workspace, run the following command:

    note

    You must change the invocation of xcodebuild to match your project. You should at least replace MyApp and MyScheme.

    xcodebuild archive \
    -workspace MyApp.xcworkspace \
    -scheme MyScheme \
    -destination generic/platform=iOS \
    -configuration Debug \
    -archivePath MyApp.xcarchive \
    DEBUG_INFORMATION_FORMAT=dwarf-with-dsym \
    ENABLE_BITCODE=NO \
    > MyApp.log.txt

    Or, if you have an Xcode project, run:

    xcodebuild archive \
    -project MyApp.xcodeproj \
    -scheme MyScheme \
    -destination generic/platform=iOS \
    -configuration Debug \
    -archivePath MyApp.xcarchive \
    DEBUG_INFORMATION_FORMAT=dwarf-with-dsym \
    ENABLE_BITCODE=NO \
    > MyApp.log.txt

    Optionally, you can use -archivePath to set a different output location for the archive, and you can use > MyApp.log.txt to set a different output location for the build log of the archive.

  4. Run gen-ir with your build log and the archive path in the following command. Ensure MyApp.log.txt points to the exported build log, and that MyApp.xcarchive/ is the newly-created xcarchive.

    Xcode workspace:

    gen-ir MyApp.log.txt MyApp.xcarchive/ --project-path MyApp.xcworkspace

    Xcode project:

    gen-ir MyApp.log.txt MyApp.xcarchive/ --project-path MyApp.xcodeproj
  5. To create a new ZIP archive:

    a. Place the xcarchive at the root of the directory you want to archive. The xcarchive must be at the root of the ZIP archive. b. Ensure the directory does not contain any other subfolders or additional paths, so that they are not included in the ZIP archive. c. Run:

    zip -r MyApp.zip MyApp.xcarchive
  6. To determine if the archive contains additional paths, run:

    zipinfo MyApp.zip
  7. In the output, ensure your xcarchive is the only folder at the root of the ZIP file:

    ❯ zipinfo MyApp.zip
    Archive: MyApp.zip
    Zip file size: 1519917 bytes, number of entries: 78
    drwxr-xr-x 3.0 unx 0 bx stor 23-Dec-13 16:37 MyApp.xcarchive/
    drwxr-xr-x 3.0 unx 0 bx stor 23-Dec-13 16:36 MyApp.xcarchive/Products/
    drwxr-xr-x 3.0 unx 0 bx stor 23-Dec-13 16:36 MyApp.xcarchive/Products/Applications/
    drwxr-xr-x 3.0 unx 0 bx stor 23-Dec-13 16:36 MyApp.xcarchive/Products/Applications/MyApp.app/
    ...

  8. Upload your iOS application to the Veracode Platform for analysis. See how to submit an application for analysis.

  9. Optionally, to upload your archives with Veracode Software Composition Analysis:

    a. Add the Podfile.lock file to the root of a different archive folder. The ZIP archive must be separate from the one that contains the .xcarchive folder, as shown in the following command:

    zip MyApp-Podfile.zip Podfile.lock

    b. Upload MyApp-Podfile.zip to the same scan as the MyApp.zip that you previously uploaded.