produce

Alias for the create_app_online action

Create new iOS apps on App Store Connect and Apple Developer Portal using your command line

produce creates new iOS apps on both the Apple Developer Portal and App Store Connect with the minimum required information.


FeaturesUsageHow does it work?


Features

  • Create new apps on both App Store Connect and the Apple Developer Portal
  • Modify Application Services on the Apple Developer Portal
  • Create App Groups on the Apple Developer Portal
  • Associate apps with App Groups on the Apple Developer Portal
  • Create iCloud Containers on the Apple Developer Portal
  • Associate apps with iCloud Containers on the Apple Developer Portal
  • Create Merchant Identifiers on the Apple Developer Portal
  • Associate apps with Merchant Identifiers on the Apple Developer Portal
  • Support for multiple Apple accounts, storing your credentials securely in the Keychain

Usage

Creating a new application

fastlane produce

To get a list of all available parameters:

fastlane produce --help
Commands: (* default)
  associate_group      Associate with a group, which is created if needed or simply located otherwise
  associate_merchant   Associate with a merchant for use with Apple Pay. Apple Pay will be enabled for this app
  create             * Creates a new app on App Store Connect and the Apple Developer Portal
  disable_services     Disable specific Application Services for a specific app on the Apple Developer Portal
  enable_services      Enable specific Application Services for a specific app on the Apple Developer Portal
  group                Ensure that a specific App Group exists
  cloud_container      Ensure that a specific iCloud Container exists
  help                 Display global or [command] help documentation
  merchant             Ensure that a specific Merchant exists

Global Options:
  --verbose
  -h, --help           Display help documentation
  -v, --version        Display version information

Options for create:
  -u, --username STRING Your Apple ID Username (PRODUCE_USERNAME)
  -a, --app_identifier STRING App Identifier (Bundle ID, e.g. com.krausefx.app) (PRODUCE_APP_IDENTIFIER)
  -e, --bundle_identifier_suffix STRING App Identifier Suffix (Ignored if App Identifier does not ends with .*) (PRODUCE_APP_IDENTIFIER_SUFFIX)
  -q, --app_name STRING App Name (PRODUCE_APP_NAME)
  -z, --app_version STRING Initial version number (e.g. '1.0') (PRODUCE_VERSION)
  -y, --sku STRING     SKU Number (e.g. '1234') (PRODUCE_SKU)
  -j, --platform STRING The platform to use (optional) (PRODUCE_PLATFORM)
  -m, --language STRING Primary Language (e.g. 'English', 'German') (PRODUCE_LANGUAGE)
  -c, --company_name STRING The name of your company. It's used to set company name on App Store Connect team's app pages. Only required if it's the first app you create (PRODUCE_COMPANY_NAME)
  -i, --skip_itc [VALUE] Skip the creation of the app on App Store Connect (PRODUCE_SKIP_ITC)
  -d, --skip_devcenter [VALUE] Skip the creation of the app on the Apple Developer Portal (PRODUCE_SKIP_DEVCENTER)
  -s, --itc_users ARRAY Array of App Store Connect users. If provided, you can limit access to this newly created app for users with the App Manager, Developer, Marketer or Sales roles (ITC_USERS)
  -b, --team_id STRING The ID of your Developer Portal team if you're in multiple teams (PRODUCE_TEAM_ID)
  -l, --team_name STRING The name of your Developer Portal team if you're in multiple teams (PRODUCE_TEAM_NAME)
  -k, --itc_team_id [VALUE] The ID of your App Store Connect team if you're in multiple teams (PRODUCE_ITC_TEAM_ID)
  -p, --itc_team_name STRING The name of your App Store Connect team if you're in multiple teams (PRODUCE_ITC_TEAM_NAME)

Enabling / Disabling Application Services

If you want to enable Application Services for an App ID (HomeKit and HealthKit in this example):

fastlane produce enable_services --homekit --healthkit

If you want to disable Application Services for an App ID (iCloud in this case):

fastlane produce disable_services --icloud

If you want to create a new App Group:

fastlane produce group -g group.krausefx -n "Example App Group"

If you want to associate an app with an App Group:

fastlane produce associate_group -a com.krausefx.app group.krausefx

If you want to create a new iCloud Container:

fastlane produce cloud_container -g iCloud.com.krausefx.app -n "Example iCloud Container"

If you want to associate an app with an iCloud Container:

fastlane produce associate_cloud_container -a com.krausefx.app iCloud.com.krausefx.app

If you want to associate an app with multiple iCloud Containers:

fastlane produce associate_cloud_container -a com.krausefx.app iCloud.com.krausefx.app1 iCloud.com.krausefx.app2

Parameters

Get a list of all available options using

fastlane produce enable_services --help
--access-wifi                         Enable Access Wifi
--app-attest                          Enable App Attest
--app-group                           Enable App Group
--apple-pay                           Enable Apple Pay
--associated-domains                  Enable Associated Domains
--auto-fill-credential                Enable Auto Fill Credential
--class-kit                           Enable Class Kit
--icloud STRING                        Enable iCloud, suitable values are "xcode5_compatible" and "xcode6_compatible"
--custom-network-protocol             Enable Custom Network Protocol
--data-protection STRING              Enable Data Protection, suitable values are "complete", "unlessopen" and "untilfirstauth"
--extended-virtual-address-space      Enable Extended Virtual Address Space
--game-center STRING                  Enable Game Center, suitable values are "ios" and "macos
--health-kit                          Enable Health Kit
--hls-interstitial-preview            Enable Hls Interstitial Preview
--home-kit                            Enable Home Kit
--hotspot                             Enable Hotspot
--in-app-purchase                     Enable In App Purchase
--inter-app-audio                     Enable Inter App Audio
--low-latency-hls                     Enable Low Latency Hls
--managed-associated-domains          Enable Managed Associated Domains
--maps                                Enable Maps
--multipath                           Enable Multipath
--network-extension                   Enable Network Extension
--nfc-tag-reading                     Enable NFC Tag Reading
--personal-vpn                        Enable Personal VPN
--passbook                            Enable Passbook (deprecated)
--push-notification                   Enable Push Notification
--sign-in-with-apple                  Enable Sign In With Apple
--siri-kit                            Enable Siri Kit
--system-extension                    Enable System Extension
--user-management                     Enable User Management
--vpn-configuration                   Enable Vpn Configuration (deprecated)
--wallet                              Enable Wallet
--wireless-accessory                  Enable Wireless Accessory
--car-play-audio-app                  Enable Car Play Audio App
--car-play-messaging-app              Enable Car Play Messaging App
--car-play-navigation-app             Enable Car Play Navigation App
--car-play-voip-calling-app           Enable Car Play Voip Calling App
--critical-alerts                     Enable Critical Alerts
--hotspot-helper                      Enable Hotspot Helper
--driver-kit                          Enable DriverKit
--driver-kit-endpoint-security        Enable DriverKit Endpoint Security
--driver-kit-family-hid-device        Enable DriverKit Family HID Device
--driver-kit-family-networking        Enable DriverKit Family Networking
--driver-kit-family-serial            Enable DriverKit Family Serial
--driver-kit-hid-event-service        Enable DriverKit HID EventService
--driver-kit-transport-hid            Enable DriverKit Transport HID
--multitasking-camera-access          Enable Multitasking Camera Access
--sf-universal-link-api               Enable SFUniversalLink API
--vp9-decoder                         Enable VP9 Decoder
--music-kit                           Enable MusicKit
--shazam-kit                          Enable ShazamKit
--communication-notifications         Enable Communication Notifications
--group-activities                    Enable Group Activities
--health-kit-estimate-recalibration   Enable HealthKit Estimate Recalibration
--time-sensitive-notifications        Enable Time Sensitive Notifications
fastlane produce disable_services --help
--access-wifi                         Disable Access Wifi
--app-attest                          Disable App Attest
--app-group                           Disable App Group
--apple-pay                           Disable Apple Pay
--associated-domains                  Disable Associated Domains
--auto-fill-credential                Disable Auto Fill Credential
--class-kit                           Disable Class Kit
--icloud STRING                        Disable iCloud
--custom-network-protocol             Disable Custom Network Protocol
--data-protection STRING              Disable Data Protection
--extended-virtual-address-space      Disable Extended Virtual Address Space
--game-center STRING                  Disable Game Center
--health-kit                          Disable Health Kit
--hls-interstitial-preview            Disable Hls Interstitial Preview
--home-kit                            Disable Home Kit
--hotspot                             Disable Hotspot
--in-app-purchase                     Disable In App Purchase
--inter-app-audio                     Disable Inter App Audio
--low-latency-hls                     Disable Low Latency Hls
--managed-associated-domains          Disable Managed Associated Domains
--maps                                Disable Maps
--multipath                           Disable Multipath
--network-extension                   Disable Network Extension
--nfc-tag-reading                     Disable NFC Tag Reading
--personal-vpn                        Disable Personal VPN
--passbook                            Disable Passbook (deprecated)
--push-notification                   Disable Push Notification
--sign-in-with-apple                  Disable Sign In With Apple
--siri-kit                            Disable Siri Kit
--system-extension                    Disable System Extension
--user-management                     Disable User Management
--vpn-configuration                   Disable Vpn Configuration (deprecated)
--wallet                              Disable Wallet
--wireless-accessory                  Disable Wireless Accessory
--car-play-audio-app                  Disable Car Play Audio App
--car-play-messaging-app              Disable Car Play Messaging App
--car-play-navigation-app             Disable Car Play Navigation App
--car-play-voip-calling-app           Disable Car Play Voip Calling App
--critical-alerts                     Disable Critical Alerts
--hotspot-helper                      Disable Hotspot Helper
--driver-kit                          Disable DriverKit
--driver-kit-endpoint-security        Disable DriverKit Endpoint Security
--driver-kit-family-hid-device        Disable DriverKit Family HID Device
--driver-kit-family-networking        Disable DriverKit Family Networking
--driver-kit-family-serial            Disable DriverKit Family Serial
--driver-kit-hid-event-service        Disable DriverKit HID EventService
--driver-kit-transport-hid            Disable DriverKit Transport HID
--multitasking-camera-access          Disable Multitasking Camera Access
--sf-universal-link-api               Disable SFUniversalLink API
--vp9-decoder                         Disable VP9 Decoder
--music-kit                           Disable MusicKit
--shazam-kit                          Disable ShazamKit
--communication-notifications         Disable Communication Notifications
--group-activities                    Disable Group Activities
--health-kit-estimate-recalibration   Disable HealthKit Estimate Recalibration
--time-sensitive-notifications        Disable Time Sensitive Notifications

Creating Apple Pay merchants and associating them with an App ID

If you want to create a new Apple Pay Merchant Identifier:

fastlane produce merchant -o merchant.com.example.production -r "Example Merchant Production"

Use --help for more information about all available parameters

fastlane produce merchant --help

If you want to associate an app with a Merchant Identifier:

fastlane produce associate_merchant -a com.krausefx.app merchant.com.example.production

If you want to associate an app with multiple Merchant Identifiers:

fastlane produce associate_merchant -a com.krausefx.app merchant.com.example.production merchant.com.example.sandbox

Use --help for more information about all available parameters

fastlane produce associate_merchant --help

Environment Variables

All available values can also be passed using environment variables, run fastlane produce --help to get a list of all available parameters.

fastlane Integration

Your Fastfile should look like this

lane :release do
  produce(
    username: 'felix@krausefx.com',
    app_identifier: 'com.krausefx.app',
    app_name: 'MyApp',
    language: 'English',
    app_version: '1.0',
    sku: '123',
    team_name: 'SunApps GmbH', # only necessary when in multiple teams

    # Optional
    # App services can be enabled during app creation
    enable_services: {
      access_wifi: "on",                        # Valid values: "on", "off"
      app_attest: "on",                         # Valid values: "on", "off"
      app_group: "on",                          # Valid values: "on", "off"
      apple_pay: "on",                          # Valid values: "on", "off"
      associated_domains: "on",                 # Valid values: "on", "off"
      auto_fill_credential: "on",               # Valid values: "on", "off"
      car_play_audio_app: "on",                 # Valid values: "on", "off"
      car_play_messaging_app: "on",             # Valid values: "on", "off"
      car_play_navigation_app: "on",            # Valid values: "on", "off"
      car_play_voip_calling_app: "on",          # Valid values: "on", "off"
      class_kit: "on",                          # Valid values: "on", "off"
      icloud: "xcode5_compatible",              # Valid values: "xcode5_compatible", "xcode6_compatible", "off"
      critical_alerts: "on",                    # Valid values: "on", "off"
      custom_network_protocol: "on",            # Valid values: "on", "off"
      data_protection: "complete",              # Valid values: "complete", "unlessopen", "untilfirstauth", "off"
      extended_virtual_address_space: "on",     # Valid values: "on", "off"
      file_provider_testing_mode: "on",         # Valid values: "on", "off"
      fonts: "on",                              # Valid values: "on", "off"
      game_center: "ios",                       # Valid values: "ios", "macos", off"
      health_kit: "on",                         # Valid values: "on", "off"
      hls_interstitial_preview: "on",           # Valid values: "on", "off"
      home_kit: "on",                           # Valid values: "on", "off"
      hotspot: "on",                            # Valid values: "on", "off"
      hotspot_helper: "on",                     # Valid values: "on", "off"
      in_app_purchase: "on",                    # Valid values: "on", "off"
      inter_app_audio: "on",                    # Valid values: "on", "off"
      low_latency_hls: "on",                    # Valid values: "on", "off"
      managed_associated_domains: "on",         # Valid values: "on", "off"
      maps: "on",                               # Valid values: "on", "off"
      multipath: "on",                          # Valid values: "on", "off"
      network_extension: "on",                  # Valid values: "on", "off"
      nfc_tag_reading: "on",                    # Valid values: "on", "off"
      passbook: "on",                           # Valid values: "on", "off" (deprecated)
      personal_vpn: "on",                       # Valid values: "on", "off"
      push_notification: "on",                  # Valid values: "on", "off"
      sign_in_with_apple: "on",                 # Valid values: "on", "off"
      siri_kit: "on",                           # Valid values: "on", "off"
      system_extension: "on",                   # Valid values: "on", "off"
      user_management: "on",                    # Valid values: "on", "off"
      vpn_configuration: "on",                  # Valid values: "on", "off" (deprecated)
      wallet: "on",                             # Valid values: "on", "off"
      wireless_accessory: "on",                 # Valid values: "on", "off"
      driver_kit: "on",                         # Valid values: "on", "off"
      driver_kit_endpoint_security: "on",       # Valid values: "on", "off"
      driver_kit_family_hid_device: "on",       # Valid values: "on", "off"
      driver_kit_family_networking: "on",       # Valid values: "on", "off"
      driver_kit_family_serial: "on",           # Valid values: "on", "off"
      driver_kit_hid_event_service: "on",       # Valid values: "on", "off"
      driver_kit_transport_hid: "on",           # Valid values: "on", "off"
      multitasking_camera_access: "on",         # Valid values: "on", "off"
      sf_universal_link_api: "on",              # Valid values: "on", "off"
      vp9_decoder: "on",                        # Valid values: "on", "off"
      music_kit: "on",                          # Valid values: "on", "off"
      shazam_kit: "on",                         # Valid values: "on", "off"
      communication_notifications: "on",        # Valid values: "on", "off"
      group_activities: "on",                   # Valid values: "on", "off"
      health_kit_estimate_recalibration: "on",  # Valid values: "on", "off"
      time_sensitive_notifications: "on",       # Valid values: "on", "off"
    }
  )

  deliver
end

To use the newly generated app in deliver, you need to add this line to your Deliverfile:

apple_id(ENV['PRODUCE_APPLE_ID'])

This will tell deliver, which App ID to use, since the app is not yet available in the App Store.

You'll still have to fill out the remaining information (like screenshots, app description and pricing). You can use deliver to upload your app metadata using a CLI

How is my password stored?

produce uses the password manager from fastlane. Take a look the CredentialsManager README for more information.


produce
Supported platforms ios
Author @KrauseFx

2 Examples

create_app_online(
  username: "felix@krausefx.com",
  app_identifier: "com.krausefx.app",
  app_name: "MyApp",
  language: "English",
  app_version: "1.0",
  sku: "123",
  team_name: "SunApps GmbH" # Only necessary when in multiple teams.
)
produce   # alias for "create_app_online"

Parameters

Key Description Default
username Your Apple ID Username *
app_identifier App Identifier (Bundle ID, e.g. com.krausefx.app) *
bundle_identifier_suffix App Identifier Suffix (Ignored if App Identifier does not end with .*)
app_name App Name
app_version Initial version number (e.g. '1.0')
sku SKU Number (e.g. '1234') *
platform The platform to use (optional) ios
platforms The platforms to use (optional)
language Primary Language (e.g. 'en-US', 'fr-FR') English
company_name The name of your company. It's used to set company name on App Store Connect team's app pages. Only required if it's the first app you create
skip_itc Skip the creation of the app on App Store Connect false
itc_users Array of App Store Connect users. If provided, you can limit access to this newly created app for users with the App Manager, Developer, Marketer or Sales roles
enabled_features DEPRECATED! Please use enable_services instead - Array with Spaceship App Services {}
enable_services Array with Spaceship App Services (e.g. access_wifi: (on|off), app_attest: (on|off), app_group: (on|off), apple_pay: (on|off), associated_domains: (on|off), auto_fill_credential: (on|off), class_kit: (on|off), icloud: (legacy|cloudkit), custom_network_protocol: (on|off), data_protection: (complete|unlessopen|untilfirstauth), extended_virtual_address_space: (on|off), family_controls: (on|off), file_provider_testing_mode: (on|off), fonts: (on|off), game_center: (ios|mac), health_kit: (on|off), hls_interstitial_preview: (on|off), home_kit: (on|off), hotspot: (on|off), in_app_purchase: (on|off), inter_app_audio: (on|off), low_latency_hls: (on|off), managed_associated_domains: (on|off), maps: (on|off), multipath: (on|off), network_extension: (on|off), nfc_tag_reading: (on|off), personal_vpn: (on|off), passbook: (on|off), push_notification: (on|off), sign_in_with_apple: (on), siri_kit: (on|off), system_extension: (on|off), user_management: (on|off), vpn_configuration: (on|off), wallet: (on|off), wireless_accessory: (on|off), car_play_audio_app: (on|off), car_play_messaging_app: (on|off), car_play_navigation_app: (on|off), car_play_voip_calling_app: (on|off), critical_alerts: (on|off), hotspot_helper: (on|off), driver_kit: (on|off), driver_kit_endpoint_security: (on|off), driver_kit_family_hid_device: (on|off), driver_kit_family_networking: (on|off), driver_kit_family_serial: (on|off), driver_kit_hid_event_service: (on|off), driver_kit_transport_hid: (on|off), multitasking_camera_access: (on|off), sf_universal_link_api: (on|off), vp9_decoder: (on|off), music_kit: (on|off), shazam_kit: (on|off), communication_notifications: (on|off), group_activities: (on|off), health_kit_estimate_recalibration: (on|off), time_sensitive_notifications: (on|off)) {}
skip_devcenter Skip the creation of the app on the Apple Developer Portal false
team_id The ID of your Developer Portal team if you're in multiple teams *
team_name The name of your Developer Portal team if you're in multiple teams *
itc_team_id The ID of your App Store Connect team if you're in multiple teams *
itc_team_name The name of your App Store Connect team if you're in multiple teams *

* = default value is dependent on the user's system


Lane Variables

Actions can communicate with each other using a shared hash lane_context, that can be accessed in other actions, plugins or your lanes: lane_context[SharedValues:XYZ]. The produce action generates the following Lane Variables:

SharedValue Description
SharedValues::PRODUCE_APPLE_ID The Apple ID of the newly created app. You probably need it for deliver

To get more information check the Lanes documentation.


Documentation

To show the documentation in your terminal, run

fastlane action produce

CLI

It is recommended to add the above action into your Fastfile, however sometimes you might want to run one-offs. To do so, you can run the following command from your terminal

fastlane run produce

To pass parameters, make use of the : symbol, for example

fastlane run produce parameter1:"value1" parameter2:"value2"

It's important to note that the CLI supports primitive types like integers, floats, booleans, and strings. Arrays can be passed as a comma delimited string (e.g. param:"1,2,3"). Hashes are not currently supported.

It is recommended to add all fastlane actions you use to your Fastfile.


Source code

This action, just like the rest of fastlane, is fully open source, view the source code on GitHub


Back to actions