Repository Structure Overview

A Sandio repository follows a standardized structure to ensure compatibility and ease of use. All repositories must be hosted on a web server with the following directory layout:

/sandio/ ├── sandio.json (required) ├── repoicon.png (optional) ├── IPA/ │ ├── app.ipa │ ├── app_logo.png │ ├── app_banner.jpg │ └── app_screenshot1.jpg ├── Wallpapers/ │ ├── wallpaper.jpg │ ├── wallpaper_logo.png │ └── wallpaper_banner.jpg ├── Shortcuts/ │ ├── shortcut.shortcut │ └── shortcut_logo.png ├── Profiles/ │ └── profile.mobileconfig └── ExploitTools/ ├── tool.ipa └── tool_logo.png
Important: The root folder must always be named sandio and must contain the sandio.json manifest file.

Required Files

sandio.json

The manifest file is the core of your repository. It contains metadata about your repository and lists all available packages. This file must be located at /sandio/sandio.json.

Manifest Structure

{
  "name": "Repository Name",
  "repoIcon": "repoicon.png",
  "packages": []
}
Field Type Required Description
name string Yes Display name of your repository
repoIcon string No Filename of repository icon (relative to sandio folder)
packages array Yes Array of package objects

Package Object Structure

Each package in the packages array must follow this structure:

{
  "id": "com.example.package",
  "name": "Package Name",
  "description": "Package description",
  "version": "1.0.0",
  "type": "wallpaper",
  "downloadURL": "filename.jpg",
  "fileSize": 2048576,
  "author": "Author Name",
  "logo": "logo.png",
  "banner": "banner.jpg",
  "screenshots": ["screen1.jpg", "screen2.jpg"],
  "supportEmail": "support@example.com"
}
Field Type Required Description
id string Yes Unique identifier in reverse domain format
name string Yes Display name of the package
description string Yes Brief description of the package
version string Yes Version number (semantic versioning recommended)
type string Yes One of: wallpaper, shortcut, ipa, configProfile, exploitTool
downloadURL string Yes Filename of the package file (relative to type folder)
fileSize integer Yes File size in bytes
author string Yes Name of the package author or creator
logo string No Filename of package logo (relative to type folder)
banner string No Filename of package banner image (relative to type folder)
screenshots array No Array of screenshot filenames (relative to type folder)
supportEmail string No Email address for support inquiries

Package Types and Folders

Each package type has a designated folder where all related files must be stored:

Type Value Folder Name Description
wallpaper Wallpapers/ High-quality wallpaper images
shortcut Shortcuts/ iOS Shortcuts automation files
ipa IPA/ iOS application packages
configProfile Profiles/ Configuration profile files
exploitTool ExploitTools/ Security and jailbreak tools
Tip: All file references in the manifest (downloadURL, logo, banner, screenshots) are relative to their respective type folder, not the root sandio folder.

Complete Example

Here is a complete example of a repository with multiple package types:

{
  "name": "Example Sandio Repository",
  "repoIcon": "repoicon.png",
  "packages": [
    {
      "id": "com.example.abstract.wallpaper",
      "name": "Abstract Gradient",
      "description": "Beautiful abstract gradient wallpaper perfect for any device",
      "version": "1.0",
      "type": "wallpaper",
      "downloadURL": "abstract_gradient.jpg",
      "fileSize": 2048576,
      "author": "John Designer",
      "logo": "abstract_logo.png",
      "banner": "abstract_banner.jpg",
      "screenshots": ["preview1.jpg", "preview2.jpg"],
      "supportEmail": "support@example.com"
    },
    {
      "id": "com.example.productivity.shortcut",
      "name": "Quick Email",
      "description": "Send emails quickly with pre-filled templates",
      "version": "2.1",
      "type": "shortcut",
      "downloadURL": "quick_email.shortcut",
      "fileSize": 51200,
      "author": "Jane Developer",
      "logo": "email_logo.png",
      "banner": null,
      "screenshots": null,
      "supportEmail": "jane@example.com"
    }
  ]
}

Image Guidelines

Repository Icon

  • Recommended size: 512x512 pixels
  • Format: PNG with transparency support
  • Should be placed in the root sandio folder

Package Logo

  • Recommended size: 256x256 pixels
  • Format: PNG or JPG
  • Square aspect ratio
  • Should be placed in the appropriate type folder

Package Banner

  • Recommended size: 1200x600 pixels
  • Format: JPG or PNG
  • 16:9 or 2:1 aspect ratio
  • Should be placed in the appropriate type folder

Screenshots

  • Recommended size: iPhone resolution (1170x2532 or similar)
  • Format: JPG or PNG
  • Portrait orientation preferred
  • Should be placed in the appropriate type folder

Hosting Your Repository

Your repository must be accessible via HTTP or HTTPS. Here are recommended hosting options:

Static Web Hosting
  • GitHub Pages
  • Netlify
  • Vercel
  • AWS S3 with CloudFront
Traditional Web Hosting
  • Shared hosting with Apache or Nginx
  • VPS or dedicated server
  • Any hosting that serves static files
Best Practice: Use HTTPS to ensure secure delivery of your packages and protect user privacy.

Adding Your Repository to Sandio

Users can add your repository by following these steps:

  1. Open Sandio and navigate to Packo
  2. Tap the Sources tab
  3. Tap the plus icon in the top right
  4. Enter your repository URL (just the base URL, e.g., https://example.com)
  5. Sandio will automatically append /sandio/sandio.json
  6. Tap Add to import the repository
Note: Users only need to provide the base URL of your server. Sandio automatically handles the path to the manifest file.

Testing Your Repository

Before making your repository public, ensure everything works correctly:

Validation Checklist

  • Verify the sandio.json file is valid JSON
  • Ensure all file paths are correct and files exist
  • Check that file sizes match the actual file sizes
  • Test downloading each package
  • Verify images load correctly
  • Confirm all URLs are accessible
  • Test with CORS enabled if hosting on a different domain

JSON Validation

Use online tools to validate your JSON structure:

curl https://yourserver.com/sandio/sandio.json | python -m json.tool

CORS Configuration

If your repository is hosted on a different domain than where Sandio might access it from, you need to enable Cross-Origin Resource Sharing (CORS).

Apache Configuration

Add this to your .htaccess file:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"

Nginx Configuration

Add this to your server block:

location /sandio/ {
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods "GET, OPTIONS";
    add_header Access-Control-Allow-Headers "Content-Type";
}

Best Practices

Version Management

  • Use semantic versioning (MAJOR.MINOR.PATCH)
  • Increment version numbers when updating packages
  • Keep old versions if users might need them

File Organization

  • Keep files organized in their respective type folders
  • Use descriptive filenames
  • Compress images appropriately without losing quality
  • Test download speeds for large files

Documentation

  • Provide clear package descriptions
  • Include installation instructions if needed
  • List compatibility requirements
  • Provide support contact information

Security

  • Only host safe and verified content
  • Scan IPA files for malware before hosting
  • Use HTTPS for all content delivery
  • Keep your server software updated

Troubleshooting

Repository Not Loading

  • Verify the URL is accessible in a web browser
  • Check that sandio.json exists at the correct path
  • Ensure the JSON is valid and properly formatted
  • Verify CORS headers are configured correctly

Packages Not Displaying

  • Check that the package type is spelled correctly
  • Verify all required fields are present
  • Ensure file paths are relative to the type folder
  • Confirm files exist at the specified locations

Images Not Loading

  • Verify image files exist in the correct folders
  • Check file permissions on the server
  • Ensure image paths in JSON are correct
  • Confirm images are in supported formats (PNG, JPG)

Download Failures

  • Verify the download URL is correct
  • Check file permissions allow reading
  • Ensure file size matches the actual file
  • Test download manually with curl or wget

Updating Your Repository

To update your repository with new packages or changes:

  1. Add new package files to the appropriate type folders
  2. Update the sandio.json manifest with new package entries
  3. Increment version numbers for updated packages
  4. Upload all files to your server
  5. Users can refresh their sources in Sandio to see updates
Note: Sandio checks for repository updates when users manually refresh or when they open the app.

Support and Resources

For additional help and community support:

  • Follow @FCE365 on Twitter for updates
  • Visit idevicecentral.com for more information
  • Join the community to share repositories and get help