How iOS and iPadOS Handle Add-on Files
On iOS and iPadOS, Minecraft registers custom file associations for the .mcpack, .mcaddon, and .mcworld extensions. Under the hood, these are standard ZIP archives with renamed extensions. However, iOS does not always trust file extensions alone when routing files between apps. If a file is downloaded through Safari or sent via AirDrop, the operating system sometimes assigns it a generic ZIP Uniform Type Identifier (UTI) rather than Minecraft's custom identifier.
Unlike Android since API 30, where application data folders are heavily obscured under Scoped Storage, iOS actually exposes Minecraft's internal game directory directly inside the built-in Files app. Under the 'On My iPhone' or 'On My iPad' location, Minecraft provides a dedicated application folder. This makes manual installation and live development editing much more straightforward on Apple devices than many creators expect, provided the World and Resource settings are configured to store data externally.
| Extension | Archive Contents | Target Folder in com.mojang |
|---|---|---|
| .mcpack | A single behavior pack or resource pack with manifest.json at the root. | behavior_packs/ or resource_packs/ |
| .mcaddon | A container ZIP holding multiple .mcpack files or pack folders. | Unpacks into both pack directories |
| .mcworld | A complete world folder with level.dat at the root. | minecraftWorlds/ |
Packaging and Validating Before Transfer
Mobile devices give very little diagnostic feedback when a pack fails to import unless you explicitly turn on the Creator Content Log in Settings. Before moving a pack to an iPhone or iPad, make sure your manifest.json is strictly valid JSON—without trailing commas or single-line comments, which older parsers sometimes tolerated on desktop—and that your archive structure is flat.
When creating an .mcpack file on macOS or Windows to send to an iOS device, select the contents inside your pack folder (manifest.json, pack_icon.png, and the subfolders) and compress them directly. Do not compress the parent folder itself, or the manifest will be buried one directory deep. Furthermore, if you pack on macOS, the Finder compression tool injects a hidden __MACOSX folder and .DS_Store files; while Bedrock usually ignores them, stripping them out via terminal commands (`zip -r -X`) prevents occasional false-positive corruption warnings during mobile import.
{
"format_version": 2,
"header": {
"name": "iOS Test Behavior Pack",
"description": "Pack configured for iOS and iPadOS testing",
"uuid": "a4b8c9d0-1234-4ef5-89ab-cdef01234567",
"version": [1, 0, 0],
"min_engine_version": [1, 20, 80]
},
"modules": [
{
"type": "data",
"uuid": "b5c9d0e1-2345-4fa6-9abc-def012345678",
"version": [1, 0, 0]
}
],
"dependencies": [
{
"uuid": "c6d0e1f2-3456-4ab7-abcd-ef0123456789",
"version": [1, 0, 0]
}
]
}Method 1: One-Tap Import via the Files App
For finished packs or quick tests, the standard import pipeline through the built-in Apple Files app is the fastest method. First, get the .mcpack or .mcaddon file onto the device using AirDrop from a Mac, an iCloud Drive shared folder, or a direct download in Safari. Do not attempt to open the file directly from within Safari's download popover or inside third-party cloud apps (like Google Drive or Dropbox), as their built-in previewers frequently intercept the file and treat it as a standard ZIP archive.
Instead, open the native Apple Files app and navigate to the downloaded file. If the file icon shows the Minecraft grass block or an blank document icon with 'MCPACK' written on it, simply tap it once. iOS will immediately launch Minecraft and begin the import process, displaying 'Import started...' at the top of the screen.
If tapping the file automatically unzips it into a blue folder instead of launching Minecraft, iOS has misidentified the file's UTI. Delete the unzipped folder, long-press the original .mcpack or .mcaddon file, select 'Share' from the context menu, and scroll through the horizontal app list to tap 'Minecraft' (if it is not visible, tap 'More' at the end of the app strip). Passing the file through the system Share Sheet forces iOS to hand the file stream directly to the Minecraft binary.
Method 2: Direct Folder Installation for Creators
When you are actively developing an add-on, re-zipping and re-importing a pack every time you tweak a JSON file or causes UUID conflicts unless you increment the version or delete the old cached pack in Settings > Storage. A better workflow on iOS is to copy your unpacked folder directly into Minecraft's development directories.
Before the folders will appear in the Files app, open Minecraft, go to Settings > Profile, and ensure 'File Storage Location' is set to 'External' rather than 'Application'. Next, create or load at least one world while set to External so the game initializes the directory tree. Then, open the iOS Files app and navigate to: On My iPhone (or On My iPad) > Minecraft > games > com.mojang.
Inside `com.mojang`, you will find `development_behavior_packs` and `development_resource_packs`. You can copy your raw, uncompressed `BP` and `RP` folders straight into these directories via AirDrop, iCloud Drive, or by connecting your iPhone/iPad to a Mac or PC with a USB cable and using Finder (on macOS) or the Apple Devices / iTunes File Sharing panel (on Windows) to drag folders into the Minecraft document space. Packs placed in the `development_` folders do not need to be re-imported; simply exiting to the main menu and reloading the world will pick up your file changes.
| com.mojang Subfolder | Purpose | Behavior on World Export |
|---|---|---|
| behavior_packs | Holds packs imported via .mcpack or .mcaddon. | Bundled into the exported world folder. |
| resource_packs | Holds resource packs imported via .mcpack or .mcaddon. | Bundled into the exported world folder. |
| development_behavior_packs | For loose folders during testing; reloads on world entry. | Referenced by UUID only; not copied into the world until packaged. |
| development_resource_packs | For loose resource folders during testing. | Referenced by UUID only; not copied into the world until packaged. |
Activating and Debugging on Mobile
Once you see the 'Successfully imported' toast notification—or after you have dropped your folders into the `development_` directories—the add-on is on disk but is not active in gameplay. Create a new world or press the pencil icon next to an existing world, then scroll down the left sidebar to the 'Add-Ons' section. Select 'Resource Packs' or 'Behavior Packs', open the 'My Packs' tab, tap your pack, and press 'Activate'. If your behavior pack manifest includes a `dependencies` block pointing to your resource pack's UUID, activating the behavior pack will automatically activate the matching resource pack.
When testing on iPhone and iPad, always turn on the Content Log before loading your world. Go to Settings > Creator and toggle on both 'Enable Content Log File' and 'Enable Content Log GUI'. If a JSON syntax error, missing texture, or invalid component exists in your pack, mobile devices will silently drop the broken file unless the GUI log is active. You can also inspect the generated log files directly inside the Files app under `On My iPhone > Minecraft > games > com.mojang > content_logs`.
Which versions this applies to
Applies to Minecraft Bedrock Edition 1.19.0 through 1.21+ on iOS 15+ and iPadOS 15+. No experimental toggles are required to install add-ons, though individual packs using beta APIs or upcoming features must have their corresponding experiments enabled in the world settings.
When it does not work
| What you see | Why | The fix |
|---|---|---|
| Tapping the .mcaddon or .mcpack file in the Files app extracts a folder instead of opening Minecraft. | Safari or the file transfer app tagged the file with a standard ZIP MIME type, or renamed the file to end in '.mcpack.zip' while hiding the '.zip' extension. | In the Files app, tap the '...' menu at the top, open 'View Options', and enable 'Show All Extensions'. If '.zip' is appended at the end, rename the file to remove '.zip'. If the extension is already clean, long-press the file, tap 'Share', and select 'Minecraft' from the app strip. |
| Toast notification reads: 'Failed to import [Pack Name]. Duplicate pack detected.' | A pack with the exact same header UUID and version array already exists in `behavior_packs` or `resource_packs` from an earlier test import. | Open Minecraft Settings > Storage, expand 'Behavior Packs' or 'Resource Packs', tap the old version of your pack, and delete it before importing again—or use the `development_behavior_packs` folder workflow instead. |
| Toast notification reads: 'Failed to import [Pack Name]. Not a valid zip archive.' | Either the file download was incomplete, or you compressed the parent folder rather than the contents, placing `manifest.json` inside a subfolder where the importer cannot find it. | Unzip the archive, verify that `manifest.json` is at the top level alongside your folders (or that an `.mcaddon` contains only valid `.mcpack` files or single-level pack folders), and re-compress the inner files directly. |
| The 'Minecraft' folder under 'On My iPhone' or 'On My iPad' is completely empty. | Minecraft defaults to internal 'Application' storage on fresh installs, which hides `com.mojang` inside the private app container. | In Minecraft, go to Settings > Profile, change 'File Storage Location' to 'External', and create a new world to force the game to build the external `games/com.mojang` folder tree. |
Reference, straight from the game files
Read out of the game itself, so the ids match the version you are building for.
